EINTERN void
e_hwc_window_buffer_set(E_Hwc_Window_Buffer *window_buffer,
tbm_surface_h tsurface,
- E_Hwc_Window_Queue *queue)
+ E_Hwc_Window_Queue *queue,
+ int transform)
{
EINA_SAFETY_ON_NULL_RETURN(window_buffer);
window_buffer->queue = queue;
window_buffer->tsurface = tsurface;
+ window_buffer->transform = transform;
}
static void
memcpy(&commit_data->info, &hwc_window->info, sizeof(tdm_hwc_window_info));
e_hwc_window_buffer_set(&commit_data->buffer, hwc_window->buffer.tsurface,
- hwc_window->buffer.queue);
+ hwc_window->buffer.queue, hwc_window->buffer.transform);
tbm_surface_internal_ref(commit_data->buffer.tsurface);
tdm_error error = TDM_ERROR_NONE;
E_Hwc_Window_Queue_Buffer *queue_buffer = NULL, *queue_buffer2 = NULL;
E_Client *ec = NULL;
+ E_Comp_Wl_Buffer *comp_buffer = NULL;
E_Hwc *hwc;
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE);
/* exist tsurface for update hwc_window */
if (tsurface)
- e_hwc_window_buffer_set(&hwc_window->buffer, tsurface, hwc_window->queue);
+ {
+ comp_buffer = _e_hwc_window_comp_wl_buffer_get(hwc_window);
+ e_hwc_window_buffer_set(&hwc_window->buffer, tsurface, hwc_window->queue,
+ comp_buffer ? comp_buffer->transform : 0);
+ }
else
- e_hwc_window_buffer_set(&hwc_window->buffer, NULL, NULL);
+ e_hwc_window_buffer_set(&hwc_window->buffer, NULL, NULL, 0);
error = tdm_hwc_window_set_buffer(thwc_window, hwc_window->buffer.tsurface);
EINA_SAFETY_ON_TRUE_RETURN_VAL(error != TDM_ERROR_NONE, EINA_FALSE);
commit_data = E_NEW(E_Hwc_Window_Commit_Data, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(commit_data, NULL);
- e_hwc_window_buffer_set(&commit_data->buffer, NULL, NULL);
+ e_hwc_window_buffer_set(&commit_data->buffer, NULL, NULL, 0);
}
EHWTRACE("COM data:%p ts:%p ------- {%25s}, state:%s, zpos:%d",
/* set latest commit_data */
memcpy(&hwc_window->commit.info, &commit_data->info, sizeof(tdm_hwc_window_info));
e_comp_wl_buffer_reference(&hwc_window->commit.buffer_ref, commit_data->buffer_ref.buffer);
- e_hwc_window_buffer_set(&hwc_window->commit.buffer, commit_data->buffer.tsurface, commit_data->buffer.queue);
+ e_hwc_window_buffer_set(&hwc_window->commit.buffer, commit_data->buffer.tsurface,
+ commit_data->buffer.queue, commit_data->buffer.transform);
hwc_window->commit_data_list = eina_list_append(hwc_window->commit_data_list, commit_data);
}
e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref, NULL);
- e_hwc_window_buffer_set(&hwc_window->display.buffer, NULL, NULL);
+ e_hwc_window_buffer_set(&hwc_window->display.buffer, NULL, NULL, 0);
CLEAR(hwc_window->display.info);
}
e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref,
commit_data->buffer_ref.buffer);
/* update hwc_window display info */
- e_hwc_window_buffer_set(&hwc_window->display.buffer, tsurface, queue);
+ e_hwc_window_buffer_set(&hwc_window->display.buffer, tsurface, queue, commit_data->buffer.transform);
memcpy(&hwc_window->display.info, &commit_data->info, sizeof(tdm_hwc_window_info));
}
e_comp_wl_buffer_reference(&commit_data->buffer_ref, NULL);
- e_hwc_window_buffer_set(&commit_data->buffer, NULL, NULL);
+ e_hwc_window_buffer_set(&commit_data->buffer, NULL, NULL, 0);
hwc_window->commit_data_list = eina_list_remove(hwc_window->commit_data_list, commit_data);
free(commit_data);
recover_buffer = e_comp_wl_tbm_buffer_get(tsurface);
EINA_SAFETY_ON_NULL_RETURN_VAL(recover_buffer, EINA_FALSE);
+
+ recover_buffer->transform = hwc_window->display.buffer.transform;
new_buffer = EINA_TRUE;
}
else
e_hwc_window_queue_buffer_release(hwc_window->buffer.queue, queue_buffer);
}
- e_hwc_window_buffer_set(&hwc_window->buffer, hwc_window->display.buffer.tsurface, hwc_window->display.buffer.queue);
+ e_hwc_window_buffer_set(&hwc_window->buffer, hwc_window->display.buffer.tsurface,
+ hwc_window->display.buffer.queue, hwc_window->display.buffer.transform);
tdm_hwc_set_client_target_buffer(thwc, hwc_window->display.buffer.tsurface, fb_damage);
_e_hwc_windows_target_window_force_render(target_hwc_window);
e_hwc_window_queue_buffer_release(hwc_window->buffer.queue, queue_buffer);
}
- e_hwc_window_buffer_set(&hwc_window->buffer, tsurface, queue);
+ e_hwc_window_buffer_set(&hwc_window->buffer, tsurface, queue, 0);
e_hwc_window_info_update(hwc_window);
/* the damage isn't supported by hwc extension yet */
}
}
- e_hwc_window_buffer_set(&hwc_window->buffer, NULL, NULL);
+ e_hwc_window_buffer_set(&hwc_window->buffer, NULL, NULL, 0);
e_hwc_window_info_update(hwc_window);
CLEAR(fb_damage);
hwc->tpp = NULL;
}
- e_hwc_window_buffer_set(&hwc->pp_buffer, NULL, NULL);
+ e_hwc_window_buffer_set(&hwc->pp_buffer, NULL, NULL, 0);
}
}
queue_buffer = e_hwc_window_queue_buffer_acquire(hwc_window->queue);
if (!queue_buffer) return EINA_FALSE;
- e_hwc_window_buffer_set(&hwc->pp_buffer, queue_buffer->tsurface, hwc_window->queue);
+ e_hwc_window_buffer_set(&hwc->pp_buffer, queue_buffer->tsurface, hwc_window->queue, 0);
}
else
{
return EINA_FALSE;
e_hwc_window_buffer_set(&hwc->pp_buffer,
- hwc_window->buffer.tsurface, hwc_window->buffer.queue);
+ hwc_window->buffer.tsurface, hwc_window->buffer.queue, 0);
if (!e_hwc_window_is_target(hwc_window))
e_comp_wl_buffer_reference(&hwc->pp_buffer_ref, _e_hwc_windows_comp_wl_buffer_get(hwc_window));
hwc->tpp = NULL;
}
- e_hwc_window_buffer_set(&hwc->pp_buffer, NULL, NULL);
+ e_hwc_window_buffer_set(&hwc->pp_buffer, NULL, NULL, 0);
}
_e_hwc_windows_target_window_pp_queue_set(hwc->target_hwc_window, NULL);