e_comp: change to use gl_drm_tbm. 52/132252/7 accepted/tizen/unified/20170608.072604 submit/tizen/20170608.043915
authorSangjin Lee <lsj119@samsung.com>
Tue, 30 May 2017 05:02:27 +0000 (14:02 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Wed, 7 Jun 2017 06:08:34 +0000 (06:08 +0000)
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
src/bin/e_comp_wl.c
src/bin/e_plane.c
src/bin/e_plane_renderer.c

index 0641fe8..4baf8cf 100644 (file)
@@ -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 */
index 6c517a2..ad13bbe 100644 (file)
@@ -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)
      {
index 971562a..8e2f5de 100644 (file)
@@ -7,6 +7,7 @@
 # include <tbm_surface_internal.h>
 # include <wayland-tbm-server.h>
 # include <Evas_Engine_GL_Drm.h>
+# include <Evas_Engine_GL_Tbm.h>
 # include <Evas_Engine_Software_Tbm.h>
 
 # 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);
index 252e324..7f4d2a2 100644 (file)
@@ -7,6 +7,7 @@
 # include <tbm_surface_internal.h>
 # include <wayland-tbm-server.h>
 # include <Evas_Engine_GL_Drm.h>
+# include <Evas_Engine_GL_Tbm.h>
 # include <Evas_Engine_Software_Tbm.h>
 # include <sys/eventfd.h>
 # 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)
      {