xref: /OK3568_Linux_fs/buildroot/package/efl/0011-gl_drm-Support-external-dmabuf.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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