e_hwc_window_accepted_state_set(target_window, state);
}
+static pixman_format_code_t
+_e_hwc_windows_pixman_format_convert(tbm_format format)
+{
+ switch(format)
+ {
+ case TBM_FORMAT_ARGB8888: return PIXMAN_a8r8g8b8;
+ case TBM_FORMAT_XRGB8888: return PIXMAN_x8r8g8b8;
+ case TBM_FORMAT_ABGR8888: return PIXMAN_a8b8g8r8;
+ case TBM_FORMAT_XBGR8888: return PIXMAN_x8b8g8r8;
+ default: return 0;
+ }
+
+ return 0;
+}
+
static void
_e_hwc_windows_center_rect_get(int src_w, int src_h, int dst_w, int dst_h, Eina_Rectangle *fit)
{
goto src_unmap;
}
- src_format = PIXMAN_a8r8g8b8;
- dst_format = PIXMAN_a8r8g8b8;
+ src_format = _e_hwc_windows_pixman_format_convert(tbm_surface_get_format(src_tsurface));
+ EINA_SAFETY_ON_FALSE_RETURN(src_format);
+ dst_format = _e_hwc_windows_pixman_format_convert(tbm_surface_get_format(dst_tsurface));
+ EINA_SAFETY_ON_FALSE_RETURN(dst_format);
src_img = pixman_image_create_bits(src_format, src_tinfo.width, src_tinfo.height,
(uint32_t*)src_tinfo.planes[0].ptr,
EINTERN Eina_Bool
e_hwc_windows_pp_set(E_Hwc *hwc, Eina_Rectangle *src_rect, Eina_Rectangle *dst_rect)
{
+ E_Hwc_Window_Target *root_target_hwc_window;
+ E_Hwc_Window *hwc_window;
E_Comp_Screen *e_comp_screen = NULL;
tdm_error ret = TDM_ERROR_NONE;
int w, h;
if (!hwc->pp_tqueue)
{
+ root_target_hwc_window = _e_hwc_windows_root_target_hwc_window_get(hwc);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(root_target_hwc_window, EINA_FALSE);
+ hwc_window = (E_Hwc_Window *)root_target_hwc_window;
+
e_output_size_get(hwc->output, &w, &h);
if (e_comp_screen_pp_support())
_e_hwc_windows_pp_aligned_value_get(hwc, &w, &h);
//TODO: Does e20 get the buffer flags from the tdm backend?
- hwc->pp_tqueue = tbm_surface_queue_create(3, w, h, TBM_FORMAT_ARGB8888, TBM_BO_SCANOUT);
+ hwc->pp_tqueue = tbm_surface_queue_create(3, w, h, hwc_window->queue->format, TBM_BO_SCANOUT);
EINA_SAFETY_ON_NULL_GOTO(hwc->pp_tqueue, fail);
hwc->pp_queue = e_hwc_window_queue_get(hwc->pp_tqueue);