{
struct gbm_device *gbm;
+ /* HWC: for hwc */
+ struct gbm_surface *surface;
+ Eina_Bool wait_for_showup : 1;
+ Eina_Bool outbuf_flushed : 1;
+ Eina_Bool hwc_enable : 1;
+
unsigned int rotation, depth;
unsigned int crtc_id, conn_id, buffer_id;
unsigned int format, flags;
return NULL;
}
+ /* HWC: set the gbm_surface to the engine_info */
+ if (info->info.hwc_enable) info->info.surface = ob->surface;
+
return ob;
}
if (ob->info->callback.post_swap)
ob->info->callback.post_swap(ob->info->callback.data, ob->evas);
- if (rects)
+ /* HWC: do not display the ecore_evas at gl_drm engine
+ hwc at enlightenment will update the display device */
+ if (ob->info->info.hwc_enable)
{
- Tilebuf_Rect *r;
- Eina_Rectangle *res;
- int num, i = 0;
-
- num = eina_inlist_count(EINA_INLIST_GET(rects));
- res = alloca(sizeof(Eina_Rectangle) * num);
- EINA_INLIST_FOREACH(EINA_INLIST_GET(rects), r)
- {
- res[i].x = r->x;
- res[i].y = r->y;
- res[i].w = r->w;
- res[i].h = r->h;
- i++;
- }
-
- _evas_outbuf_buffer_swap(ob, res, num);
+ /* The pair of evas_outbuf_flush and post_render has to be matched */
+ ob->info->info.outbuf_flushed = EINA_TRUE;
+ INF("HWC: evas outbuf flushed");
}
else
- //Flush GL Surface data to Framebuffer
- _evas_outbuf_buffer_swap(ob, NULL, 0);
+ {
+ if (rects)
+ {
+ Tilebuf_Rect *r;
+ Eina_Rectangle *res;
+ int num, i = 0;
+ num = eina_inlist_count(EINA_INLIST_GET(rects));
+ res = alloca(sizeof(Eina_Rectangle) * num);
+ EINA_INLIST_FOREACH(EINA_INLIST_GET(rects), r)
+ {
+ res[i].x = r->x;
+ res[i].y = r->y;
+ res[i].w = r->w;
+ res[i].h = r->h;
+ i++;
+ }
+
+ _evas_outbuf_buffer_swap(ob, res, num);
+ }
+ else
+ //Flush GL Surface data to Framebuffer
+ _evas_outbuf_buffer_swap(ob, NULL, 0);
+ }
ob->priv.frame_cnt++;
end: