e_comp_wl: change the buffer type into E_COMP_WL_BUFFER_TYPE_TBM 51/132251/6
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 1 Jun 2017 23:28:53 +0000 (08:28 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Wed, 7 Jun 2017 06:08:12 +0000 (06:08 +0000)
All committed buffer type of the E_Comp_Wl_buffer was E_COMP_WL_BUFFER_TYPE_NATIVE.
Howerver, the enlightenment set the buffer type into E_COMP_WL_BUFFER_TYPE_TBM
instead E_COMP_WL_BUFFER_TYPE_NATIVE for the client buffers.

So enlightenment make the texture with the EVAS_NATIVE_SURFACE_TBM type of
the Evas_Native_Surface to set the buffer to the evas
through evas_object_image_native_surface_set function.

Change-Id: I49db960fbfabb4800c0054635f188d8097d810eb

src/bin/e_comp.c
src/bin/e_comp_wl.c
src/bin/e_pixmap.c
src/bin/e_plane_renderer.c

index e007de7900dd621f5d60eac1b085dfedd079878e..2606055ea626324cf8f1c4b82c1e4c9df22ed4dd 100644 (file)
@@ -305,8 +305,10 @@ _hwc_available_get(E_Client *ec)
      {
       case E_COMP_WL_BUFFER_TYPE_NATIVE:
          break;
-      case E_COMP_WL_BUFFER_TYPE_SHM:
       case E_COMP_WL_BUFFER_TYPE_TBM:
+         if (cdata->buffer_ref.buffer->resource)
+           break;
+      case E_COMP_WL_BUFFER_TYPE_SHM:
          if (!e_util_strcmp("wl_pointer-cursor", ec->icccm.window_role))
            break;
 
index d0f31cdde25ac8fd220c8907ca1e57aeb757ff68..6c517a2fe9c55cee8d1d591d00a2a84097750d76 100644 (file)
@@ -2516,7 +2516,8 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
         if (!eina_list_count(state->damages) && !eina_list_count(state->buffer_damages))
           {
              if ((ec->comp_data->buffer_ref.buffer) &&
-                 (ec->comp_data->buffer_ref.buffer->type == E_COMP_WL_BUFFER_TYPE_NATIVE))
+                 ((ec->comp_data->buffer_ref.buffer->type == E_COMP_WL_BUFFER_TYPE_NATIVE) ||
+                  (ec->comp_data->buffer_ref.buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)))
                {
                   e_comp_object_damage(ec->frame,
                                        0, 0,
@@ -5025,11 +5026,7 @@ e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
         ref->buffer->busy--;
         if (ref->buffer->busy == 0)
           {
-             if (ref->buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)
-               {
-                  e_comp_wl_tbm_buffer_destroy(ref->buffer);
-               }
-             else
+             if (ref->buffer->resource)
                {
                   if (!wl_resource_get_client(ref->buffer->resource)) return;
                   wl_buffer_send_release(ref->buffer->resource);
@@ -5038,6 +5035,11 @@ e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
                                                                    ref->buffer->resource, 1);
 #endif
                }
+             else
+               {
+                  if (ref->buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)
+                     e_comp_wl_tbm_buffer_destroy(ref->buffer);
+               }
           }
 
         if (ref->destroy_listener_usable)
@@ -5085,6 +5087,7 @@ e_comp_wl_buffer_get(struct wl_resource *resource, E_Client *ec)
    if (!(buffer = E_NEW(E_Comp_Wl_Buffer, 1))) return NULL;
 
    shmbuff = wl_shm_buffer_get(resource);
+   tbm_surf = wayland_tbm_server_get_surface(NULL, resource);
 
    if (shmbuff)
      {
@@ -5093,43 +5096,47 @@ e_comp_wl_buffer_get(struct wl_resource *resource, E_Client *ec)
         buffer->w = wl_shm_buffer_get_width(shmbuff);
         buffer->h = wl_shm_buffer_get_height(shmbuff);
      }
+   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);
+                }
+     }
+   else if (e_comp->gl)
+     {
+         buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
+
+         res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
+                                                             resource,
+                                                             EVAS_GL_WIDTH,
+                                                             &buffer->w);
+         EINA_SAFETY_ON_FALSE_GOTO(res, err);
+
+         res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
+                                                             resource,
+                                                             EVAS_GL_HEIGHT,
+                                                             &buffer->h);
+         EINA_SAFETY_ON_FALSE_GOTO(res, err);
+     }
    else
      {
-        if ((ec) && (ec->comp_data->video_client))
-          {
-             buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
-             buffer->w = buffer->h = 1;
-          }
-        else if (e_comp->gl)
-          {
-             buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
-
-             res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
-                                                                 resource,
-                                                                 EVAS_GL_WIDTH,
-                                                                 &buffer->w);
-             EINA_SAFETY_ON_FALSE_GOTO(res, err);
-
-             res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
-                                                                 resource,
-                                                                 EVAS_GL_HEIGHT,
-                                                                 &buffer->h);
-             EINA_SAFETY_ON_FALSE_GOTO(res, err);
-          }
-        else
-          {
-             tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
-             if (!tbm_surf)
-               goto err;
-
-             buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
-             buffer->w = tbm_surface_get_width(tbm_surf);
-             buffer->h = tbm_surface_get_height(tbm_surf);
-             buffer->tbm_surface = tbm_surf;
-          }
+         goto err;
      }
-   buffer->shm_buffer = shmbuff;
 
+   buffer->shm_buffer = shmbuff;
+   buffer->tbm_surface = tbm_surf;
    buffer->resource = resource;
    wl_signal_init(&buffer->destroy_signal);
    buffer->destroy_listener.notify = _e_comp_wl_buffer_cb_destroy;
index 03d2c14ef3c14153349c8278ea7974b82e8e66b9..c41cd2d81f257f4927f78b35842f4a5da45805d6 100644 (file)
@@ -461,13 +461,13 @@ e_pixmap_refresh(E_Pixmap *cp)
 
    if (shm_buffer)
      format = wl_shm_buffer_get_format(shm_buffer);
+   else if (buffer->tbm_surface)
+     format = tbm_surface_get_format(buffer->tbm_surface);
    else if (e_comp->gl && buffer->resource)
      e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
                                                    buffer->resource,
                                                    EVAS_GL_TEXTURE_FORMAT,
                                                    &format);
-   else if (buffer->tbm_surface)
-      format = tbm_surface_get_format(buffer->tbm_surface);
    else if (buffer->type == E_COMP_WL_BUFFER_TYPE_VIDEO)
       format = 0;
    else
index 7738ddb19298f8c304480d5f25d1879bbe779fe9..252e324d37907ef208035ee482b479f06afa3312 100644 (file)
@@ -692,6 +692,7 @@ _e_plane_renderer_client_surface_flags_get(E_Plane_Renderer_Client *renderer_cli
      {
        case E_COMP_WL_BUFFER_TYPE_NATIVE:
        case E_COMP_WL_BUFFER_TYPE_VIDEO:
+       case E_COMP_WL_BUFFER_TYPE_TBM:
          tsurface = wayland_tbm_server_get_surface(wl_comp_data->tbm.server, buffer->resource);
          EINA_SAFETY_ON_NULL_RETURN_VAL(tsurface, 0);