Implemented frontbuffer rendering mode.
authorJoonbum Ko <joonbum.ko@samsung.com>
Fri, 10 Jul 2020 07:03:43 +0000 (16:03 +0900)
committerXuelian Bai <xuelian.bai@samsung.com>
Tue, 21 Feb 2023 06:32:49 +0000 (14:32 +0800)
Change-Id: I9b562a2b70eae9c1334fea0248906f84ba932e9f
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/egl/drivers/dri2/egl_dri2.h
src/egl/drivers/dri2/platform_tizen.c

index c6d4c04..5c8e7f3 100644 (file)
@@ -371,6 +371,7 @@ struct dri2_egl_surface
    __DRIimage    *dri_image_back;
    __DRIimage    *dri_image_front;
 
+   bool is_frontbuffer_mode;
    int buffer_count;
    bool  valid;
 #endif
index 020b782..eeb87ed 100755 (executable)
@@ -233,6 +233,12 @@ tizen_window_enqueue_buffer_with_damage(_EGLDisplay *disp,
    mtx_unlock(&disp->Mutex);
 
    fence_fd = dri2_surf->out_fence_fd;
+
+   if (fence_fd >= 0 && dri2_surf->is_frontbuffer_mode) {
+      close(fence_fd);
+      fence_fd = -1;
+   }
+
    dri2_surf->out_fence_fd = -1;
 
    ret = tpl_surface_enqueue_buffer_with_damage_and_sync(dri2_surf->tpl_surface,
@@ -316,6 +322,7 @@ tizen_create_surface(_EGLDisplay *disp, EGLint type,
    const __DRIconfig *config;
    tpl_surface_type_t tpl_surf_type = TPL_SURFACE_ERROR;
    tpl_result_t ret = TPL_ERROR_INVALID_PARAMETER;
+   char *env = getenv("EGL_FRONTBUFFER_ENABLE");
 
    dri2_surf = calloc(1, sizeof *dri2_surf);
    if (!dri2_surf) {
@@ -392,6 +399,15 @@ tizen_create_surface(_EGLDisplay *disp, EGLint type,
        goto cleanup_tpl_surface;
    }
 
+   dri2_surf->is_frontbuffer_mode = EGL_FALSE;
+       if (env != NULL && atoi(env))
+       {
+               tpl_result_t tpl_result = TPL_ERROR_NONE;
+               tpl_result = tpl_surface_set_frontbuffer_mode(dri2_surf->tpl_surface, TPL_TRUE);
+      if (tpl_result == TPL_ERROR_NONE)
+         dri2_surf->is_frontbuffer_mode = EGL_TRUE;
+       }
+
    return &dri2_surf->base;
 
 cleanup_tpl_surface: