E_Comp_Hwc_Layer *primary_layer;
E_Comp_Hwc *hwc;
+
+ Eina_Bool disable_hwc;
};
struct _E_Comp_Hwc {
EINA_LIST_FOREACH(g_hwc->hwc_outputs, l, hwc_output)
{
if (!hwc_output) continue;
+ if (hwc_output->disable_hwc) continue;
toutput = ecore_drm_output_hal_private_get(drm_output);
if (toutput == hwc_output->toutput) return hwc_output;
}
EINA_LIST_FOREACH_SAFE(hwc->hwc_outputs, l_o, ll_o, hwc_output)
{
if (!hwc_output) continue;
+ if (hwc_output->disable_hwc) continue;
tdm_output_get_conn_status(hwc_output->toutput, &conn_status);
if (conn_status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) continue;
EINA_LIST_FOREACH_SAFE(hwc->hwc_outputs, l_o, ll_o, hwc_output)
{
if (!hwc_output) continue;
+ if (hwc_output->disable_hwc) continue;
tdm_output_get_conn_status(hwc_output->toutput, &conn_status);
if (conn_status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) continue;
EINA_LIST_FOREACH_SAFE(hwc->hwc_outputs, l_o, ll_o, hwc_output)
{
if (!hwc_output) continue;
+ if (hwc_output->disable_hwc) continue;
tdm_output_get_conn_status(hwc_output->toutput, &conn_status);
if (conn_status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) continue;
tdm_output_get_conn_status(hwc_output->toutput, &conn_status);
if (conn_status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) continue;
- INF("HWC: HWC Output(%d):(x, y, w, h)=(%d, %d, %d, %d) Information.",
- ++output_idx, hwc_output->x, hwc_output->y, hwc_output->w, hwc_output->h);
+ INF("HWC: HWC Output(%d):(x, y, w, h)=(%d, %d, %d, %d) disable(%d) Information.",
+ ++output_idx, hwc_output->x, hwc_output->y, hwc_output->w, hwc_output->h, hwc_output->disable_hwc);
INF("HWC: num_layers=%d", hwc_output->num_layers);
EINA_LIST_FOREACH_SAFE(hwc_output->hwc_layers, l_l, ll_l, hwc_layer)
{
EINA_LIST_FOREACH_SAFE(g_hwc->hwc_outputs, l_o, ll_o, hwc_output)
{
if (!hwc_output) continue;
+ if (hwc_output->disable_hwc) continue;
tdm_output_get_conn_status(hwc_output->toutput, &conn_status);
if (conn_status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) continue;
EINA_LIST_FOREACH_SAFE(g_hwc->hwc_outputs, l_o, ll_o, hwc_output)
{
if (!hwc_output) continue;
+ if (hwc_output->disable_hwc) continue;
tdm_output_get_conn_status(hwc_output->toutput, &conn_status);
if (conn_status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) continue;
}
}
}
+
+E_API void
+e_comp_hwc_disable_output_hwc_rendering(int index, int onoff)
+{
+ E_Comp_Hwc_Output *hwc_output = NULL;
+ tdm_output *output = NULL;
+ tdm_error error = TDM_ERROR_NONE;
+ Eina_List *l, *ll;
+
+ output = tdm_display_get_output(g_hwc->tdisplay, index, &error);
+ if (error != TDM_ERROR_NONE || !output)
+ {
+ ERR("fail tdm_display_get_output(index:%d)(err:%d)", index, error);
+ return;
+ }
+
+ EINA_LIST_FOREACH_SAFE(g_hwc->hwc_outputs, l, ll, hwc_output)
+ {
+ if (!hwc_output) continue;
+ if (output == hwc_output->toutput)
+ {
+ if (onoff == 0)
+ hwc_output->disable_hwc = EINA_TRUE;
+ else
+ hwc_output->disable_hwc = EINA_FALSE;
+
+ INF("e_comp_hwc_disable_output_hwc_rendering set index:%d, onoof:%d\n", index, onoff);
+ }
+ }
+ return;
+}
+
#else /* HAVE_HWC */
EINTERN Eina_Bool
e_comp_hwc_init(void)
{
;
}
+
+E_API void
+e_comp_hwc_disable_output_hwc_rendering(int index, int onoff)
+{
+ ;
+}
#endif /* endo of HAVE_HWC */