From 5796f7d4fb849754cb53a5c100bda2da4edd8664 Mon Sep 17 00:00:00 2001 From: Sangjin Lee Date: Tue, 30 May 2017 14:02:27 +0900 Subject: [PATCH] e_comp: change to use gl_drm_tbm. Basically ecore_gl_drm support two mode. one is gl_drm and unother is gl_tbm. In gl_tbm evas engine, it use offscreen GL engine(tbm_surface_queue). To seperate the render engine and present to lcd, we should use tbm base evas_engine. Change-Id: I4af327a2ed5fd1e350b18685d8df3a2f3b1fae44 --- src/bin/e_comp_screen.c | 4 +++- src/bin/e_comp_wl.c | 36 ++++++++++++++++-------------------- src/bin/e_plane.c | 13 +++++++++++++ src/bin/e_plane_renderer.c | 24 ++++++++++++++++++------ 4 files changed, 50 insertions(+), 27 deletions(-) diff --git a/src/bin/e_comp_screen.c b/src/bin/e_comp_screen.c index 0641fe8..4baf8cf 100644 --- a/src/bin/e_comp_screen.c +++ b/src/bin/e_comp_screen.c @@ -582,9 +582,11 @@ _e_comp_screen_engine_init(void) /* set env for use tbm_surface_queue*/ setenv("USE_EVAS_SOFTWARE_TBM_ENGINE", "1", 1); + //setenv("USE_EVAS_GL_TBM_ENGINE", "1", 1); /* set gl available if we have ecore_evas support */ - if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_DRM)) + if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_DRM) || + ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_TBM)) e_comp_gl_set(EINA_TRUE); /* e_comp_screen new */ diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 6c517a2..ad13bbe 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -4425,14 +4425,9 @@ _e_comp_wl_gl_init(void *data EINA_UNUSED) Evas_GL_Surface *sfc = NULL; Evas_GL_Config *cfg = NULL; Eina_Bool res; - const char *name; if (!e_comp_gl_get()) return; - name = ecore_evas_engine_name_get(e_comp->ee); - if (!name) return; - if (strcmp(name, "gl_drm")) return; - /* create dummy evas gl to bind wayland display of enlightenment to egl display */ e_main_ts("\tE_Comp_Wl_GL Init"); @@ -5029,6 +5024,7 @@ e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer) if (ref->buffer->resource) { if (!wl_resource_get_client(ref->buffer->resource)) return; + wl_buffer_send_release(ref->buffer->resource); #ifdef HAVE_WAYLAND_TBM wayland_tbm_server_increase_buffer_sync_timeline(e_comp_wl->tbm.server, @@ -5098,21 +5094,21 @@ e_comp_wl_buffer_get(struct wl_resource *resource, E_Client *ec) } else if (tbm_surf) { - tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource); - if (!tbm_surf) - goto err; - - if ((ec) && (ec->comp_data->video_client)) - { - buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO; - buffer->w = buffer->h = 1; - } - else - { - buffer->type = E_COMP_WL_BUFFER_TYPE_TBM; - buffer->w = tbm_surface_get_width(tbm_surf); - buffer->h = tbm_surface_get_height(tbm_surf); - } + tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource); + if (!tbm_surf) + goto err; + + if ((ec) && (ec->comp_data->video_client)) + { + buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO; + buffer->w = buffer->h = 1; + } + else + { + buffer->type = E_COMP_WL_BUFFER_TYPE_TBM; + buffer->w = tbm_surface_get_width(tbm_surf); + buffer->h = tbm_surface_get_height(tbm_surf); + } } else if (e_comp->gl) { diff --git a/src/bin/e_plane.c b/src/bin/e_plane.c index 971562a..8e2f5de 100644 --- a/src/bin/e_plane.c +++ b/src/bin/e_plane.c @@ -7,6 +7,7 @@ # include # include # include +# include # include # ifndef CLEAR @@ -75,6 +76,13 @@ _get_tbm_surface_queue(E_Comp *e_comp) if (info->info.surface) tbm_queue = gbm_tbm_get_surface_queue(info->info.surface); } + else if(!strcmp(name, "gl_drm_tbm")) + { + Evas_Engine_Info_GL_Tbm *info; + info = (Evas_Engine_Info_GL_Tbm *)evas_engine_info_get(e_comp->evas); + EINA_SAFETY_ON_NULL_RETURN_VAL(info, NULL); + tbm_queue = (tbm_surface_queue_h)info->info.tbm_queue; + } else if(!strcmp(name, "drm_tbm")) { Evas_Engine_Info_Software_Tbm *info; @@ -709,6 +717,11 @@ e_plane_setup(E_Plane *plane) einfo->info.hwc_enable = EINA_TRUE; ecore_evas_manual_render_set(e_comp->ee, 1); } + else if(!strcmp("gl_drm_tbm", name)) + { + ecore_evas_manual_render_set(e_comp->ee, 1); + return EINA_TRUE; + } else if(!strcmp("drm_tbm", name)) { ecore_evas_manual_render_set(e_comp->ee, 1); diff --git a/src/bin/e_plane_renderer.c b/src/bin/e_plane_renderer.c index 252e324..7f4d2a2 100644 --- a/src/bin/e_plane_renderer.c +++ b/src/bin/e_plane_renderer.c @@ -7,6 +7,7 @@ # include # include # include +# include # include # include # if HAVE_LIBGOMP @@ -104,6 +105,13 @@ _get_tbm_surface_queue(Ecore_Evas *ee) if (info->info.surface) tbm_queue = gbm_tbm_get_surface_queue(info->info.surface); } + else if(!strcmp(name, "gl_drm_tbm")) + { + Evas_Engine_Info_GL_Tbm *info; + info = (Evas_Engine_Info_GL_Tbm *)evas_engine_info_get(ecore_evas_get(ee)); + EINA_SAFETY_ON_NULL_RETURN_VAL(info, NULL); + tbm_queue = (tbm_surface_queue_h)info->info.tbm_queue; + } else if(!strcmp(name, "drm_tbm")) { Evas_Engine_Info_Software_Tbm *info; @@ -958,14 +966,14 @@ e_plane_renderer_new(E_Plane *plane) renderer->event_hdlr = ecore_main_fd_handler_add(renderer->event_fd, ECORE_FD_READ, _e_plane_renderer_cb_queue_acquirable_event, NULL, NULL, NULL); - tqueue = _get_tbm_surface_queue(renderer->ee); - if (tqueue && !e_plane_renderer_surface_queue_set(renderer, tqueue)) - ERR("fail to e_plane_renderer_queue_set"); - ecore_evas_geometry_get(renderer->ee, NULL, NULL, &ee_width, &ee_height); if (renderer->tqueue_width != ee_width || renderer->tqueue_height != ee_height) ecore_evas_manual_render(renderer->ee); + + tqueue = _get_tbm_surface_queue(renderer->ee); + if (tqueue && !e_plane_renderer_surface_queue_set(renderer, tqueue)) + ERR("fail to e_plane_renderer_queue_set"); } return renderer; @@ -2219,8 +2227,12 @@ e_plane_renderer_show_state(E_Plane_Renderer *renderer) EINA_SAFETY_ON_NULL_RETURN(renderer); - ELOGF("E_PLANE_RENDERER", "Renderer(%p) Plane(%p) ec(%p) state(%d) mode_chage_age(%d)", - NULL, NULL, renderer, renderer->plane, renderer->ec, renderer->state, renderer->mode_change_age); + if (renderer->ec) + ELOGF("E_PLANE_RENDERER", "Renderer(%p) Plane(%p) ec(%p) state(%d) mode_chage_age(%d)", + NULL, NULL, renderer, renderer->plane, renderer->ec, renderer->state, renderer->mode_change_age); + else + ELOGF("E_PLANE_RENDERER", "Renderer(%p) Plane(%p) ee_engine:%s state(%d) mode_chage_age(%d)", + NULL, NULL, renderer, renderer->plane, ecore_evas_engine_name_get(renderer->ee), renderer->state, renderer->mode_change_age); EINA_LIST_FOREACH(renderer->disp_surfaces, l, tmp_tsurface) { -- 2.7.4