e_comp_wl_buffer: Use E_Tbm_Gbm_Server for E_Comp_Wl_Buffer 62/301262/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 6 Nov 2023 05:26:28 +0000 (14:26 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 13 Nov 2023 06:02:47 +0000 (15:02 +0900)
Now that the `E_Tbm_Gbm_Server` implements tbm and gbm backend for
ds_buffer, we can take advantage of it when we create E_Comp_Wl_Buffer
for wl_buffer resources.

Change-Id: I990945cc99cbb4f6cce76d13ff4bd49054f961b0

src/bin/e_comp_wl_buffer.c

index e0a0b06..c3bdad6 100644 (file)
@@ -1,5 +1,6 @@
 #include <libds/single_pixel_buffer_v1.h>
 
+#include "e_tbm_gbm_server.h"
 #include "e_comp_wl_private.h"
 
 typedef struct _E_Buffer E_Buffer;
@@ -204,41 +205,16 @@ _e_comp_wl_buffer_native_type_get(E_Comp_Wl_Buffer *base, struct wl_resource *re
 }
 
 static Eina_Bool
-_e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *base, struct wl_resource *resource,
+_e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *base, struct ds_buffer *ds_buffer,
                                E_Client *ec)
 {
    tbm_surface_h tsurface;
-   struct gbm_bo *gbo;
 
-   if (!base || !resource || !ec) return EINA_FALSE;
-
-   tsurface = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
-   if (tsurface)
-     {
-        tbm_surface_internal_ref(tsurface);
-     }
-   else
-     {
-        if (!e_comp->e_comp_screen->gdevice) return EINA_FALSE;
-
-        gbo = gbm_bo_import(e_comp->e_comp_screen->gdevice, GBM_BO_IMPORT_WL_BUFFER,
-                            resource, GBM_BO_USE_RENDERING);
-        if (!gbo) return EINA_FALSE;
+   if (!base || !ds_buffer || !ec) return EINA_FALSE;
 
-        tsurface = e_comp_wl_tbm_import_gbm_bo(gbo);
-        if (!tsurface)
-          {
-             gbm_bo_destroy(gbo);
-             return EINA_FALSE;
-          }
-
-        if (!e_comp_wl_tbm_gbm_bo_user_data_set(tsurface, gbo))
-          {
-             tbm_surface_destroy(tsurface);
-             gbm_bo_destroy(gbo);
-             return EINA_FALSE;
-          }
-     }
+   tsurface = e_tbm_gbm_server_tbm_surface_get_from_buffer(ds_buffer);
+   if (!tsurface)
+     return EINA_FALSE;
 
    if ((ec) && (ec->comp_data->video_client))
      {
@@ -308,13 +284,13 @@ _e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct ds_buffer *ds_buffer, E_Cl
                }
              else
                {
-                  res = _e_comp_wl_buffer_tbm_type_get(base, resource, ec);
+                  res = _e_comp_wl_buffer_tbm_type_get(base, ds_buffer, ec);
                   EINA_SAFETY_ON_FALSE_GOTO(res, err);
                }
           }
         else
           {
-             res = _e_comp_wl_buffer_tbm_type_get(base, resource, ec);
+             res = _e_comp_wl_buffer_tbm_type_get(base, ds_buffer, ec);
              if (!res && e_comp->gl)
                res = _e_comp_wl_buffer_native_type_get(base,resource, ec);
 
@@ -350,8 +326,6 @@ _e_comp_wl_buffer_finish(E_Comp_Wl_Buffer *base)
    /* remove debug info */
    eina_stringshare_del(base->debug_info.owner_name);
 
-   if (base->tbm_surface) tbm_surface_internal_unref(base->tbm_surface);
-
    if (base->buffer_release)
      e_explicit_sync_buffer_release_destroy(base->buffer_release);