diff options
Diffstat (limited to 'src/modules/evas/engines/gl_drm/evas_engine.c')
-rw-r--r-- | src/modules/evas/engines/gl_drm/evas_engine.c | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/modules/evas/engines/gl_drm/evas_engine.c b/src/modules/evas/engines/gl_drm/evas_engine.c index 39f5442218..6877842008 100644 --- a/src/modules/evas/engines/gl_drm/evas_engine.c +++ b/src/modules/evas/engines/gl_drm/evas_engine.c @@ -29,6 +29,7 @@ struct scanout_handle /* external variables */ int _evas_engine_gl_drm_log_dom = -1; int _extn_have_buffer_age = 1; +int _extn_have_context_priority = 0; /* local variables */ static Eina_Bool initted = EINA_FALSE; @@ -57,6 +58,7 @@ Evas_GL_Preload glsym_evas_gl_preload_shutdown = NULL; EVGL_Engine_Call glsym_evgl_engine_shutdown = NULL; EVGL_Current_Native_Context_Get_Call glsym_evgl_current_native_context_get = NULL; Evas_Gl_Symbols glsym_evas_gl_symbols = NULL; +Evas_Gl_Extension_String_Check _ckext = NULL; Evas_GL_Common_Context_New glsym_evas_gl_common_context_new = NULL; Evas_GL_Common_Context_Call glsym_evas_gl_common_context_flush = NULL; @@ -168,6 +170,7 @@ eng_gbm_shutdown(Evas_Engine_Info_GL_Drm *info) static void symbols(void) { + Evas_Gl_Extension_String_Check glsym_evas_gl_extension_string_check = NULL; static Eina_Bool done = EINA_FALSE; if (done) return; @@ -202,15 +205,18 @@ symbols(void) LINK2GENERIC(eglGetProcAddress); LINK2GENERIC(evas_gl_common_eglCreateImage); LINK2GENERIC(evas_gl_common_eglDestroyImage); + LINK2GENERIC(evas_gl_extension_string_check); + + _ckext = glsym_evas_gl_extension_string_check; done = EINA_TRUE; } void -eng_gl_symbols(EGLDisplay edsp) +eng_egl_symbols(EGLDisplay edsp) { static Eina_Bool done = EINA_FALSE; - const char *exts = NULL; + const char *exts; if (done) return; @@ -218,7 +224,6 @@ eng_gl_symbols(EGLDisplay edsp) if (!dst) dst = (typ)glsym_eglGetProcAddress(sym); exts = eglQueryString(edsp, EGL_EXTENSIONS); - glsym_evas_gl_symbols(glsym_eglGetProcAddress, exts); FINDSYM(glsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", glsym_func_void); @@ -236,6 +241,9 @@ eng_gl_symbols(EGLDisplay edsp) FINDSYM(glsym_eglQueryWaylandBufferWL, "eglQueryWaylandBufferWL", glsym_func_uint); + if (evas_gl_extension_string_check(exts, "EGL_IMG_context_priority")) + _extn_have_context_priority = 1; + done = EINA_TRUE; } @@ -259,15 +267,15 @@ gl_extn_veto(Render_Engine *re) glsym_eglSwapBuffersWithDamage = NULL; glsym_eglSetDamageRegionKHR = NULL; } - if (!strstr(str, "EGL_EXT_buffer_age")) + if (!_ckext(str, "EGL_EXT_buffer_age")) _extn_have_buffer_age = 0; - if (!strstr(str, "EGL_KHR_partial_update")) + if (!_ckext(str, "EGL_KHR_partial_update")) glsym_eglSetDamageRegionKHR = NULL; - if (!strstr(str, "EGL_EXT_swap_buffers_with_damage")) + if (!_ckext(str, "EGL_EXT_swap_buffers_with_damage")) glsym_eglSwapBuffersWithDamage = NULL; - if (strstr(str, "EGL_EXT_image_dma_buf_import")) + if (_ckext(str, "EGL_EXT_image_dma_buf_import")) dmabuf_present = EINA_TRUE; } else @@ -1215,19 +1223,14 @@ eng_image_native_set(void *engine, void *image, void *native) } } - if ((!ns) && (!img->native.data)) return img; - evas_outbuf_use(ob); - if (img->native.data) + if (!ns) { - if (img->native.func.free) - img->native.func.free(img); - glsym_evas_gl_common_image_native_disable(img); + glsym_evas_gl_common_image_free(img); + return NULL; } - if (!ns) return img; - if (ns->type == EVAS_NATIVE_SURFACE_WL_DMABUF) { wlid = wl_buf; |