1*4882a593SmuzhiyunFrom 75b3b3fba88f13d1bf4ffe1091af061758561000 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Mon, 11 Jul 2022 19:19:56 +0800 4*4882a593SmuzhiyunSubject: [PATCH 11/11] gl_drm: Support external dmabuf 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunTested with gstreamer mppvideodec + waylandsink. 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 9*4882a593Smuzhiyun--- 10*4882a593Smuzhiyun src/lib/ector/gl/shader/ector_gl_shaders.x | 8 ++++---- 11*4882a593Smuzhiyun src/lib/ector/gl/shader/include.glsl | 8 ++++---- 12*4882a593Smuzhiyun src/modules/evas/engines/gl_common/evas_gl_shader.c | 4 ++-- 13*4882a593Smuzhiyun .../evas/engines/gl_common/shader/evas_gl_shaders.x | 8 ++++---- 14*4882a593Smuzhiyun src/modules/evas/engines/gl_common/shader/include.glsl | 8 ++++---- 15*4882a593Smuzhiyun src/modules/evas/engines/gl_drm/evas_engine.c | 4 ++-- 16*4882a593Smuzhiyun 6 files changed, 20 insertions(+), 20 deletions(-) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyundiff --git a/src/lib/ector/gl/shader/ector_gl_shaders.x b/src/lib/ector/gl/shader/ector_gl_shaders.x 19*4882a593Smuzhiyunindex 19120e26c3..a6dc50415b 100644 20*4882a593Smuzhiyun--- a/src/lib/ector/gl/shader/ector_gl_shaders.x 21*4882a593Smuzhiyun+++ b/src/lib/ector/gl/shader/ector_gl_shaders.x 22*4882a593Smuzhiyun@@ -8,15 +8,15 @@ static const char fragment_glsl[] = 23*4882a593Smuzhiyun " * through cpp first (in which case the precision must be manually added).\n" 24*4882a593Smuzhiyun " */\n" 25*4882a593Smuzhiyun "#ifdef GL_ES\n" 26*4882a593Smuzhiyun+ "# ifdef SHD_EXTERNAL\n" 27*4882a593Smuzhiyun+ "#extension GL_OES_EGL_image_external : require\n" 28*4882a593Smuzhiyun+ "# define SAMPLER_EXTERNAL_OES samplerExternalOES\n" 29*4882a593Smuzhiyun+ "# endif\n" 30*4882a593Smuzhiyun "# ifdef GL_FRAGMENT_PRECISION_HIGH\n" 31*4882a593Smuzhiyun "precision highp float;\n" 32*4882a593Smuzhiyun "# else\n" 33*4882a593Smuzhiyun "precision mediump float;\n" 34*4882a593Smuzhiyun "# endif\n" 35*4882a593Smuzhiyun- "# ifdef SHD_EXTERNAL\n" 36*4882a593Smuzhiyun- "extension GL_OES_EGL_image_external : require\n" 37*4882a593Smuzhiyun- "# define SAMPLER_EXTERNAL_OES samplerExternalOES\n" 38*4882a593Smuzhiyun- "# endif\n" 39*4882a593Smuzhiyun "#else\n" 40*4882a593Smuzhiyun "# define SAMPLER_EXTERNAL_OES sampler2D\n" 41*4882a593Smuzhiyun "#endif\n" 42*4882a593Smuzhiyundiff --git a/src/lib/ector/gl/shader/include.glsl b/src/lib/ector/gl/shader/include.glsl 43*4882a593Smuzhiyunindex b8f8ac115e..f987544080 100644 44*4882a593Smuzhiyun--- a/src/lib/ector/gl/shader/include.glsl 45*4882a593Smuzhiyun+++ b/src/lib/ector/gl/shader/include.glsl 46*4882a593Smuzhiyun@@ -1,14 +1,14 @@ 47*4882a593Smuzhiyun define(`FRAGMENT_SHADER',` 48*4882a593Smuzhiyun #ifdef GL_ES 49*4882a593Smuzhiyun+# ifdef SHD_EXTERNAL 50*4882a593Smuzhiyun+#extension GL_OES_EGL_image_external : require 51*4882a593Smuzhiyun+# define SAMPLER_EXTERNAL_OES samplerExternalOES 52*4882a593Smuzhiyun+# endif 53*4882a593Smuzhiyun # ifdef GL_FRAGMENT_PRECISION_HIGH 54*4882a593Smuzhiyun precision highp float; 55*4882a593Smuzhiyun # else 56*4882a593Smuzhiyun precision mediump float; 57*4882a593Smuzhiyun # endif 58*4882a593Smuzhiyun-# ifdef SHD_EXTERNAL 59*4882a593Smuzhiyun-extension GL_OES_EGL_image_external : require 60*4882a593Smuzhiyun-# define SAMPLER_EXTERNAL_OES samplerExternalOES 61*4882a593Smuzhiyun-# endif 62*4882a593Smuzhiyun #else 63*4882a593Smuzhiyun # define SAMPLER_EXTERNAL_OES sampler2D 64*4882a593Smuzhiyun #endif 65*4882a593Smuzhiyundiff --git a/src/modules/evas/engines/gl_common/evas_gl_shader.c b/src/modules/evas/engines/gl_common/evas_gl_shader.c 66*4882a593Smuzhiyunindex 5d84504817..65dd25800f 100644 67*4882a593Smuzhiyun--- a/src/modules/evas/engines/gl_common/evas_gl_shader.c 68*4882a593Smuzhiyun+++ b/src/modules/evas/engines/gl_common/evas_gl_shader.c 69*4882a593Smuzhiyun@@ -896,8 +896,8 @@ evas_gl_common_shader_flags_get(Evas_GL_Shared *shared, Shader_Type type, 70*4882a593Smuzhiyun { 71*4882a593Smuzhiyun if (tex->im && tex->im->native.target == GL_TEXTURE_EXTERNAL_OES) 72*4882a593Smuzhiyun flags |= SHADER_FLAG_EXTERNAL; 73*4882a593Smuzhiyun- else 74*4882a593Smuzhiyun- bgra = 1; 75*4882a593Smuzhiyun+ 76*4882a593Smuzhiyun+ bgra = 1; 77*4882a593Smuzhiyun } 78*4882a593Smuzhiyun else 79*4882a593Smuzhiyun bgra = shared->info.bgra; 80*4882a593Smuzhiyundiff --git a/src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x b/src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x 81*4882a593Smuzhiyunindex 411a680e78..abde490e0b 100644 82*4882a593Smuzhiyun--- a/src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x 83*4882a593Smuzhiyun+++ b/src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x 84*4882a593Smuzhiyun@@ -8,15 +8,15 @@ static const char fragment_glsl[] = 85*4882a593Smuzhiyun " * through cpp first (in which case the precision must be manually added).\n" 86*4882a593Smuzhiyun " */\n" 87*4882a593Smuzhiyun "#ifdef GL_ES\n" 88*4882a593Smuzhiyun+ "# ifdef SHD_EXTERNAL\n" 89*4882a593Smuzhiyun+ "#extension GL_OES_EGL_image_external : require\n" 90*4882a593Smuzhiyun+ "# define SAMPLER_EXTERNAL_OES samplerExternalOES\n" 91*4882a593Smuzhiyun+ "# endif\n" 92*4882a593Smuzhiyun "# ifdef GL_FRAGMENT_PRECISION_HIGH\n" 93*4882a593Smuzhiyun "precision highp float;\n" 94*4882a593Smuzhiyun "# else\n" 95*4882a593Smuzhiyun "precision mediump float;\n" 96*4882a593Smuzhiyun "# endif\n" 97*4882a593Smuzhiyun- "# ifdef SHD_EXTERNAL\n" 98*4882a593Smuzhiyun- "extension GL_OES_EGL_image_external : require\n" 99*4882a593Smuzhiyun- "# define SAMPLER_EXTERNAL_OES samplerExternalOES\n" 100*4882a593Smuzhiyun- "# endif\n" 101*4882a593Smuzhiyun "#else\n" 102*4882a593Smuzhiyun "# define SAMPLER_EXTERNAL_OES sampler2D\n" 103*4882a593Smuzhiyun "#endif\n" 104*4882a593Smuzhiyundiff --git a/src/modules/evas/engines/gl_common/shader/include.glsl b/src/modules/evas/engines/gl_common/shader/include.glsl 105*4882a593Smuzhiyunindex b8f8ac115e..f987544080 100644 106*4882a593Smuzhiyun--- a/src/modules/evas/engines/gl_common/shader/include.glsl 107*4882a593Smuzhiyun+++ b/src/modules/evas/engines/gl_common/shader/include.glsl 108*4882a593Smuzhiyun@@ -1,14 +1,14 @@ 109*4882a593Smuzhiyun define(`FRAGMENT_SHADER',` 110*4882a593Smuzhiyun #ifdef GL_ES 111*4882a593Smuzhiyun+# ifdef SHD_EXTERNAL 112*4882a593Smuzhiyun+#extension GL_OES_EGL_image_external : require 113*4882a593Smuzhiyun+# define SAMPLER_EXTERNAL_OES samplerExternalOES 114*4882a593Smuzhiyun+# endif 115*4882a593Smuzhiyun # ifdef GL_FRAGMENT_PRECISION_HIGH 116*4882a593Smuzhiyun precision highp float; 117*4882a593Smuzhiyun # else 118*4882a593Smuzhiyun precision mediump float; 119*4882a593Smuzhiyun # endif 120*4882a593Smuzhiyun-# ifdef SHD_EXTERNAL 121*4882a593Smuzhiyun-extension GL_OES_EGL_image_external : require 122*4882a593Smuzhiyun-# define SAMPLER_EXTERNAL_OES samplerExternalOES 123*4882a593Smuzhiyun-# endif 124*4882a593Smuzhiyun #else 125*4882a593Smuzhiyun # define SAMPLER_EXTERNAL_OES sampler2D 126*4882a593Smuzhiyun #endif 127*4882a593Smuzhiyundiff --git a/src/modules/evas/engines/gl_drm/evas_engine.c b/src/modules/evas/engines/gl_drm/evas_engine.c 128*4882a593Smuzhiyunindex d59f762160..7ebde60c6f 100644 129*4882a593Smuzhiyun--- a/src/modules/evas/engines/gl_drm/evas_engine.c 130*4882a593Smuzhiyun+++ b/src/modules/evas/engines/gl_drm/evas_engine.c 131*4882a593Smuzhiyun@@ -808,7 +808,7 @@ _native_cb_bind(void *image) 132*4882a593Smuzhiyun return; 133*4882a593Smuzhiyun } 134*4882a593Smuzhiyun img->native.invalid = EINA_FALSE; 135*4882a593Smuzhiyun- glsym_glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, n->ns_data.wl_surface_dmabuf.image); 136*4882a593Smuzhiyun+ glsym_glEGLImageTargetTexture2DOES(img->native.target, n->ns_data.wl_surface_dmabuf.image); 137*4882a593Smuzhiyun } 138*4882a593Smuzhiyun else if (n->ns.type == EVAS_NATIVE_SURFACE_WL) 139*4882a593Smuzhiyun { 140*4882a593Smuzhiyun@@ -1400,7 +1400,7 @@ eng_image_native_set(void *engine, void *image, void *native) 141*4882a593Smuzhiyun img->native.func.bind = _native_cb_bind; 142*4882a593Smuzhiyun img->native.func.unbind = _native_cb_unbind; 143*4882a593Smuzhiyun img->native.func.free = _native_cb_free; 144*4882a593Smuzhiyun- img->native.target = GL_TEXTURE_2D; 145*4882a593Smuzhiyun+ img->native.target = GL_TEXTURE_EXTERNAL_OES; 146*4882a593Smuzhiyun img->native.mipmap = 0; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun glsym_evas_gl_common_image_native_enable(img); 149*4882a593Smuzhiyun-- 150*4882a593Smuzhiyun2.20.1 151*4882a593Smuzhiyun 152