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