From fca9390051e563e29f6b864dbd9932f38c33d3d9 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 24 Apr 2020 21:26:25 +0900 Subject: [PATCH] canvas gl: fix nutty code of partial rendering toggle. clean up partial rendering code for maintaining and makei it work properly while toggling. Change-Id: I8827c2526397fb73c961a0f4449f2bacd6525418 --- src/modules/evas/engines/eglfs/evas_engine.c | 8 ++-- src/modules/evas/engines/eglfs/evas_engine.h | 2 +- src/modules/evas/engines/gl_common/evas_gl_core.c | 6 +-- .../evas/engines/gl_common/evas_gl_core_private.h | 8 +--- src/modules/evas/engines/gl_drm/evas_engine.c | 9 ++-- src/modules/evas/engines/gl_drm/evas_engine.h | 2 +- src/modules/evas/engines/gl_drm/evas_outbuf.c | 2 +- src/modules/evas/engines/gl_sdl/evas_engine.c | 1 - src/modules/evas/engines/gl_tbm/evas_engine.c | 9 ++-- src/modules/evas/engines/gl_tbm/evas_engine.h | 2 +- src/modules/evas/engines/gl_tbm/evas_tbm_main.c | 2 +- src/modules/evas/engines/gl_x11/evas_engine.c | 13 +++--- src/modules/evas/engines/gl_x11/evas_engine.h | 2 +- src/modules/evas/engines/gl_x11/evas_x_main.c | 2 +- src/modules/evas/engines/wayland_egl/evas_engine.c | 53 +++++++++++----------- src/modules/evas/engines/wayland_egl/evas_engine.h | 2 +- .../evas/engines/wayland_egl/evas_wl_main.c | 2 +- 17 files changed, 59 insertions(+), 66 deletions(-) diff --git a/src/modules/evas/engines/eglfs/evas_engine.c b/src/modules/evas/engines/eglfs/evas_engine.c index 641114b..8380922 100644 --- a/src/modules/evas/engines/eglfs/evas_engine.c +++ b/src/modules/evas/engines/eglfs/evas_engine.c @@ -19,7 +19,7 @@ /* external variables */ int _evas_engine_eglfs_log_dom = -1; -int _extn_have_buffer_age = 1; +Eina_Bool _support_partial_render = EINA_TRUE; /* local variables */ static Eina_Bool initted = EINA_FALSE; @@ -229,10 +229,10 @@ gl_extn_veto(Render_Engine *re) s = getenv("EVAS_GL_PARTIAL_DISABLE"); if ((s) && (atoi(s))) { - _extn_have_buffer_age = 0; + _support_partial_render = EINA_FALSE; glsym_eglSwapBuffersWithDamage = NULL; } - if (!strstr(str, "EGL_EXT_buffer_age")) _extn_have_buffer_age = 0; + if (!strstr(str, "EGL_EXT_buffer_age")) _support_partial_render = EINA_FALSE; if ((!strstr(str, "EGL_EXT_swap_buffers_with_damage")) && (!strstr(str, "EGL_KHR_swap_buffers_with_damage"))) glsym_eglSwapBuffersWithDamage = NULL; @@ -240,7 +240,7 @@ gl_extn_veto(Render_Engine *re) else { if (getenv("EVAS_GL_INFO")) printf("NO EGL EXTN!\n"); - _extn_have_buffer_age = 0; + _support_partial_render = EINA_FALSE; } } diff --git a/src/modules/evas/engines/eglfs/evas_engine.h b/src/modules/evas/engines/eglfs/evas_engine.h index e3ad5ba..7161694 100644 --- a/src/modules/evas/engines/eglfs/evas_engine.h +++ b/src/modules/evas/engines/eglfs/evas_engine.h @@ -21,7 +21,7 @@ # include "../gl_generic/Evas_Engine_GL_Generic.h" extern int _evas_engine_eglfs_log_dom; -extern int _extn_have_buffer_age; +extern Eina_Bool _support_partial_render; # ifdef ERR # undef ERR diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.c b/src/modules/evas/engines/gl_common/evas_gl_core.c index 2e14db3..3e132b5 100755 --- a/src/modules/evas/engines/gl_common/evas_gl_core.c +++ b/src/modules/evas/engines/gl_common/evas_gl_core.c @@ -2232,8 +2232,8 @@ evgl_surface_create(void *eng_data, Evas_GL_Config *cfg, int w, int h) _surface_context_list_print(); // TIZEN_ONLY(20171206) : Disable Partial Rendering On EvasGL - if (evgl_engine->funcs->partial_rendering_disable) - evgl_engine->funcs->partial_rendering_disable(); + if (evgl_engine->funcs->partial_rendering_enable) + evgl_engine->funcs->partial_rendering_enable(EINA_FALSE); return sfc; } @@ -2447,7 +2447,7 @@ evgl_surface_destroy(void *eng_data, EVGL_Surface *sfc) // TIZEN_ONLY(20171206) : Disable Partial Rendering On EvasGL if (evgl_engine->funcs->partial_rendering_enable) - evgl_engine->funcs->partial_rendering_enable(); + evgl_engine->funcs->partial_rendering_enable(EINA_TRUE); return 1; diff --git a/src/modules/evas/engines/gl_common/evas_gl_core_private.h b/src/modules/evas/engines/gl_common/evas_gl_core_private.h index 76d0a0c..648e3ef 100755 --- a/src/modules/evas/engines/gl_common/evas_gl_core_private.h +++ b/src/modules/evas/engines/gl_common/evas_gl_core_private.h @@ -358,12 +358,8 @@ struct _EVGL_Interface int (*native_win_prerotation_set)(void *data); - // TIZEN_ONLY(20171206) : Disable Partial Rendering On EvasGL - // partial rendering enable - void (*partial_rendering_enable)(); - - // partial rendering disable - void (*partial_rendering_disable)(); + // TIZEN_ONLY(20171206) : Toggling Partial Rendering On EvasGL + void (*partial_rendering_enable)(Eina_Bool on); }; struct _EVGL_Surface diff --git a/src/modules/evas/engines/gl_drm/evas_engine.c b/src/modules/evas/engines/gl_drm/evas_engine.c index 8981f62..e2ce530 100755 --- a/src/modules/evas/engines/gl_drm/evas_engine.c +++ b/src/modules/evas/engines/gl_drm/evas_engine.c @@ -63,7 +63,7 @@ struct scanout_handle /* external variables */ int _evas_engine_gl_drm_log_dom = -1; -int _extn_have_buffer_age = 1; +Eina_Bool _support_partial_render = EINA_TRUE; int _extn_have_context_priority = 0; /* local variables */ @@ -158,7 +158,6 @@ static const EVGL_Interface evgl_funcs = NULL, // native_win_surface_config_get NULL, // native_win_prerotation_set NULL, //partial_rendering_enable - NULL, //partial_rendering_disable }; Eina_Bool @@ -301,12 +300,12 @@ gl_extn_veto(Render_Engine *re) s = getenv("EVAS_GL_PARTIAL_DISABLE"); if ((s) && (atoi(s))) { - _extn_have_buffer_age = 0; + _support_partial_render = EINA_FALSE; glsym_eglSwapBuffersWithDamage = NULL; glsym_eglSetDamageRegionKHR = NULL; } if (!_ckext(str, "EGL_EXT_buffer_age")) - _extn_have_buffer_age = 0; + _support_partial_render = EINA_FALSE; if (!_ckext(str, "EGL_KHR_partial_update")) glsym_eglSetDamageRegionKHR = NULL; @@ -320,7 +319,7 @@ gl_extn_veto(Render_Engine *re) else { if (getenv("EVAS_GL_INFO")) printf("NO EGL EXTN!\n"); - _extn_have_buffer_age = 0; + _support_partial_render = EINA_FALSE; } } diff --git a/src/modules/evas/engines/gl_drm/evas_engine.h b/src/modules/evas/engines/gl_drm/evas_engine.h index 705d565..c8a965d 100644 --- a/src/modules/evas/engines/gl_drm/evas_engine.h +++ b/src/modules/evas/engines/gl_drm/evas_engine.h @@ -27,7 +27,7 @@ # include "../gl_generic/Evas_Engine_GL_Generic.h" extern int _evas_engine_gl_drm_log_dom; -extern int _extn_have_buffer_age; +extern Eina_Bool _support_partial_render; extern int _extn_have_context_priority; # ifdef ERR diff --git a/src/modules/evas/engines/gl_drm/evas_outbuf.c b/src/modules/evas/engines/gl_drm/evas_outbuf.c index ce3d656..40d815f 100755 --- a/src/modules/evas/engines/gl_drm/evas_outbuf.c +++ b/src/modules/evas/engines/gl_drm/evas_outbuf.c @@ -576,7 +576,7 @@ evas_outbuf_buffer_state_get(Outbuf *ob) ecore_drm2_fb_release(ob->priv.output, EINA_FALSE); - if (ob->swap_mode == MODE_AUTO && _extn_have_buffer_age) + if (ob->swap_mode == MODE_AUTO && _support_partial_render) { Render_Output_Swap_Mode swap_mode; EGLint age = 0; diff --git a/src/modules/evas/engines/gl_sdl/evas_engine.c b/src/modules/evas/engines/gl_sdl/evas_engine.c index eabfe77..6d4cb3b 100755 --- a/src/modules/evas/engines/gl_sdl/evas_engine.c +++ b/src/modules/evas/engines/gl_sdl/evas_engine.c @@ -261,7 +261,6 @@ static const EVGL_Interface evgl_funcs = NULL, // native_win_surface_config_get NULL, // native_win_prerotation_set NULL, //partial_rendering_enable - NULL, //partial_rendering_disable }; static void * diff --git a/src/modules/evas/engines/gl_tbm/evas_engine.c b/src/modules/evas/engines/gl_tbm/evas_engine.c index 411c08a..15dfbfb 100755 --- a/src/modules/evas/engines/gl_tbm/evas_engine.c +++ b/src/modules/evas/engines/gl_tbm/evas_engine.c @@ -110,7 +110,7 @@ static Eina_Bool useHash = EINA_FALSE; /* external variables */ int _evas_engine_gl_tbm_log_dom = -1; -Eina_Bool extn_have_buffer_age = EINA_TRUE; +Eina_Bool support_partial_render = EINA_TRUE; Eina_Bool extn_have_y_inverted = EINA_TRUE; /* local function prototypes */ @@ -294,14 +294,14 @@ gl_extn_veto(Render_Engine *re) // Disable Partial Rendering if ((s = getenv("EVAS_GL_PARTIAL_DISABLE")) && atoi(s)) { - extn_have_buffer_age = EINA_FALSE; + support_partial_render = EINA_FALSE; glsym_eglSwapBuffersWithDamage = NULL; glsym_eglSetDamageRegionKHR = NULL; } if (!strstr(str, "EGL_EXT_buffer_age")) { if (!strstr(str, "EGL_KHR_partial_update")) - extn_have_buffer_age = EINA_FALSE; + support_partial_render = EINA_FALSE; } if (!strstr(str, "EGL_KHR_partial_update")) { @@ -339,7 +339,7 @@ gl_extn_veto(Render_Engine *re) { if (getenv("EVAS_GL_INFO")) printf("NO EGL EXTN!\n"); - extn_have_buffer_age = EINA_FALSE; + support_partial_render = EINA_FALSE; } } @@ -901,7 +901,6 @@ static const EVGL_Interface evgl_funcs = evgl_eng_native_win_surface_config_get, NULL, // native_win_prerotation_set NULL, //partial_rendering_enable - NULL, //partial_rendering_disable }; /* engine functions */ diff --git a/src/modules/evas/engines/gl_tbm/evas_engine.h b/src/modules/evas/engines/gl_tbm/evas_engine.h index e97072c..38977c3 100755 --- a/src/modules/evas/engines/gl_tbm/evas_engine.h +++ b/src/modules/evas/engines/gl_tbm/evas_engine.h @@ -105,7 +105,7 @@ struct _Render_Engine Render_Output_GL_Generic generic; }; -extern Eina_Bool extn_have_buffer_age; +extern Eina_Bool support_partial_render; extern Eina_Bool extn_have_y_inverted; extern Evas_GL_Common_Context_New glsym_evas_gl_common_context_new; diff --git a/src/modules/evas/engines/gl_tbm/evas_tbm_main.c b/src/modules/evas/engines/gl_tbm/evas_tbm_main.c index a40e1b4..bd76cf9 100755 --- a/src/modules/evas/engines/gl_tbm/evas_tbm_main.c +++ b/src/modules/evas/engines/gl_tbm/evas_tbm_main.c @@ -483,7 +483,7 @@ eng_outbuf_rotation_get(Outbuf *ob) Render_Output_Swap_Mode eng_outbuf_swap_mode_get(Outbuf *ob) { - if ((ob->swap_mode == MODE_AUTO) && (extn_have_buffer_age)) + if ((ob->swap_mode == MODE_AUTO) && (support_partial_render)) { Render_Output_Swap_Mode swap_mode; EGLint age = 0; diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c b/src/modules/evas/engines/gl_x11/evas_engine.c index 60001d2..29009bd 100755 --- a/src/modules/evas/engines/gl_x11/evas_engine.c +++ b/src/modules/evas/engines/gl_x11/evas_engine.c @@ -25,7 +25,7 @@ const char *debug_dir; int swap_buffer_debug_mode = -1; int swap_buffer_debug = 0; int partial_render_debug = -1; -int extn_have_buffer_age = 1; +Eina_Bool support_partial_render = EINA_TRUE; static int initted = 0; static int gl_wins = 0; @@ -1259,7 +1259,6 @@ static const EVGL_Interface evgl_funcs = evgl_eng_native_win_surface_config_get, NULL, // native_win_prerotation_set NULL, //partial_rendering_enable - NULL, //partial_rendering_disable }; //----------------------------------------------------------// @@ -1443,14 +1442,14 @@ gl_extn_veto(Render_Engine *re) // Disable Partial Rendering if ((s = getenv("EVAS_GL_PARTIAL_DISABLE")) && atoi(s)) { - extn_have_buffer_age = 0; + support_partial_render = EINA_FALSE; glsym_eglSwapBuffersWithDamage = NULL; glsym_eglSetDamageRegionKHR = NULL; } if (!strstr(str, "EGL_EXT_buffer_age")) { if (!strstr(str, "EGL_KHR_partial_update")) - extn_have_buffer_age = 0; + support_partial_render = EINA_FALSE; } if (!strstr(str, "EGL_KHR_partial_update")) { @@ -1493,7 +1492,7 @@ gl_extn_veto(Render_Engine *re) { if (getenv("EVAS_GL_INFO")) printf("NO EGL EXTN!\n"); - extn_have_buffer_age = 0; + support_partial_render = EINA_FALSE; } #else str = glXQueryExtensionsString(eng_get_ob(re)->info->info.display, @@ -1529,7 +1528,7 @@ gl_extn_veto(Render_Engine *re) } if (!strstr(tmpstr, "GLX_EXT_buffer_age")) { - extn_have_buffer_age = 0; + support_partial_render = EINA_FALSE; } if (!strstr(tmpstr, "GLX_EXT_swap_control")) { @@ -1552,7 +1551,7 @@ gl_extn_veto(Render_Engine *re) glsym_glXReleaseTexImage = NULL; glsym_glXGetVideoSync = NULL; glsym_glXWaitVideoSync = NULL; - extn_have_buffer_age = 0; + support_partial_render = EINA_FALSE; glsym_glXSwapIntervalEXT = NULL; glsym_glXSwapIntervalSGI = NULL; glsym_glXReleaseBuffersMESA = NULL; diff --git a/src/modules/evas/engines/gl_x11/evas_engine.h b/src/modules/evas/engines/gl_x11/evas_engine.h index 78af5be..7db4e58 100644 --- a/src/modules/evas/engines/gl_x11/evas_engine.h +++ b/src/modules/evas/engines/gl_x11/evas_engine.h @@ -125,7 +125,7 @@ struct _Context_3D #endif }; -extern int extn_have_buffer_age; +extern Eina_Bool support_partial_render; extern int partial_render_debug; extern int swap_buffer_debug_mode; extern int swap_buffer_debug; diff --git a/src/modules/evas/engines/gl_x11/evas_x_main.c b/src/modules/evas/engines/gl_x11/evas_x_main.c index 209ee1d..b8558d7 100755 --- a/src/modules/evas/engines/gl_x11/evas_x_main.c +++ b/src/modules/evas/engines/gl_x11/evas_x_main.c @@ -1419,7 +1419,7 @@ eng_outbuf_get_rot(Outbuf *ob) Render_Output_Swap_Mode eng_outbuf_swap_mode(Outbuf *ob) { - if (ob->swap_mode == MODE_AUTO && extn_have_buffer_age) + if (ob->swap_mode == MODE_AUTO && support_partial_render) { Render_Output_Swap_Mode swap_mode; eina_evlog("+gl_query_surf_swap_mode", ob, 0.0, NULL); diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c b/src/modules/evas/engines/wayland_egl/evas_engine.c index e5062a8..2bede82 100755 --- a/src/modules/evas/engines/wayland_egl/evas_engine.c +++ b/src/modules/evas/engines/wayland_egl/evas_engine.c @@ -85,13 +85,13 @@ static Evas_Func func, pfunc; /* external variables */ int _evas_engine_wl_egl_log_dom = -1; -Eina_Bool extn_have_buffer_age = EINA_TRUE; //partial rendering support Eina_Bool extn_have_y_inverted = EINA_TRUE; -/* backup for partail update */ +/* partial rendering support */ +Eina_Bool support_partial_render = EINA_TRUE; +Eina_Bool partial_render = EINA_TRUE; unsigned int (*glsym_prev_eglSwapBuffersWithDamage) (EGLDisplay a, void *b, const EGLint *d, EGLint c) = NULL; unsigned int (*glsym_prev_eglSetDamageRegionKHR) (EGLDisplay a, EGLSurface b, EGLint *c, EGLint d) = NULL; -Eina_Bool prev_extn_have_buffer_age = EINA_TRUE; /* local functions */ static inline Outbuf * @@ -209,14 +209,14 @@ gl_extn_veto(Render_Engine *re) // Disable Partial Rendering if ((s = getenv("EVAS_GL_PARTIAL_DISABLE")) && atoi(s)) { - extn_have_buffer_age = EINA_FALSE; + support_partial_render = EINA_FALSE; glsym_eglSwapBuffersWithDamage = NULL; glsym_eglSetDamageRegionKHR = NULL; } if (!strstr(str, "EGL_EXT_buffer_age")) { if (!strstr(str, "EGL_KHR_partial_update")) - extn_have_buffer_age = EINA_FALSE; + support_partial_render = EINA_FALSE; } if (!strstr(str, "EGL_KHR_partial_update")) { @@ -259,7 +259,7 @@ gl_extn_veto(Render_Engine *re) { if (getenv("EVAS_GL_INFO")) printf("NO EGL EXTN!\n"); - extn_have_buffer_age = EINA_FALSE; + support_partial_render = EINA_FALSE; } } @@ -790,32 +790,34 @@ evgl_eng_native_win_surface_config_get(void *data, int *win_depth, eng_get_ob(re)->detected.msaa); } -// TIZEN_ONLY(20171206) : Disable Partial Rendering On EvasGL +// TIZEN_ONLY(20171206) : Enable Partial Rendering On EvasGL static void -evgl_eng_partial_rendering_enable() +evgl_eng_partial_rendering_enable(Eina_Bool on) { - if (extn_have_buffer_age) return; + if (!support_partial_render) return; - extn_have_buffer_age = prev_extn_have_buffer_age; - prev_extn_have_buffer_age = EINA_FALSE; + if (on) + { + if (partial_render) return; //already turned on - glsym_eglSwapBuffersWithDamage = glsym_prev_eglSwapBuffersWithDamage; - glsym_eglSetDamageRegionKHR = glsym_prev_eglSetDamageRegionKHR; -} + //backup restore + glsym_eglSwapBuffersWithDamage = glsym_prev_eglSwapBuffersWithDamage; + glsym_eglSetDamageRegionKHR = glsym_prev_eglSetDamageRegionKHR; + partial_render = EINA_TRUE; + } + else + { + if (!partial_render) return; //already turned off -// TIZEN_ONLY(20171206) : Disable Partial Rendering On EvasGL -static void -evgl_eng_partial_rendering_disable() -{ - if (!extn_have_buffer_age) return; + //backup + glsym_prev_eglSwapBuffersWithDamage = glsym_eglSwapBuffersWithDamage; + glsym_prev_eglSetDamageRegionKHR = glsym_eglSetDamageRegionKHR; - prev_extn_have_buffer_age = extn_have_buffer_age; - glsym_prev_eglSwapBuffersWithDamage = glsym_eglSwapBuffersWithDamage; - glsym_prev_eglSetDamageRegionKHR = glsym_eglSetDamageRegionKHR; + glsym_eglSwapBuffersWithDamage = NULL; + glsym_eglSetDamageRegionKHR = NULL; - extn_have_buffer_age = EINA_FALSE; - glsym_eglSwapBuffersWithDamage = NULL; - glsym_eglSetDamageRegionKHR = NULL; + partial_render = EINA_FALSE; + } } static const EVGL_Interface evgl_funcs = @@ -840,7 +842,6 @@ static const EVGL_Interface evgl_funcs = evgl_eng_native_win_surface_config_get, evgl_eng_native_win_prerotation_set, evgl_eng_partial_rendering_enable, - evgl_eng_partial_rendering_disable, }; /* engine functions */ diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.h b/src/modules/evas/engines/wayland_egl/evas_engine.h index 889163d..3794a7d 100755 --- a/src/modules/evas/engines/wayland_egl/evas_engine.h +++ b/src/modules/evas/engines/wayland_egl/evas_engine.h @@ -105,7 +105,7 @@ struct _Context_3D EGLSurface surface; }; -extern Eina_Bool extn_have_buffer_age; +extern Eina_Bool support_partial_render; extern Eina_Bool extn_have_y_inverted; extern Evas_GL_Common_Context_New glsym_evas_gl_common_context_new; diff --git a/src/modules/evas/engines/wayland_egl/evas_wl_main.c b/src/modules/evas/engines/wayland_egl/evas_wl_main.c index b700b39..c9a9f9f 100755 --- a/src/modules/evas/engines/wayland_egl/evas_wl_main.c +++ b/src/modules/evas/engines/wayland_egl/evas_wl_main.c @@ -601,7 +601,7 @@ eng_outbuf_rotation_get(Outbuf *ob) Render_Output_Swap_Mode eng_outbuf_swap_mode_get(Outbuf *ob) { - if ((ob->swap_mode == MODE_AUTO) && (extn_have_buffer_age)) + if ((ob->swap_mode == MODE_AUTO) && (support_partial_render)) { Render_Output_Swap_Mode swap_mode; EGLint age = 0; -- 2.7.4