[gtk/wip.win32.fixes: 11/11] gsk/gl/resources/*.glsl: Add GLSL 300 ES items




commit c8c8e75c15e21490bb2004357184e07d817555d9
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Tue Nov 23 12:09:50 2021 +0800

    gsk/gl/resources/*.glsl: Add GLSL 300 ES items
    
    This attempts to make the shaders ready for use with GLSL 300 ES, which
    is necessary for libANGLE support, for EGL/GLES support on Windows.

 gsk/gl/resources/blur.glsl                    | 12 ++++++++++++
 gsk/gl/resources/border.glsl                  | 12 ++++++++++++
 gsk/gl/resources/color.glsl                   |  8 ++++++++
 gsk/gl/resources/coloring.glsl                | 10 ++++++++++
 gsk/gl/resources/conic_gradient.glsl          |  8 ++++++++
 gsk/gl/resources/filled_border.glsl           | 14 ++++++++++++++
 gsk/gl/resources/inset_shadow.glsl            | 12 ++++++++++++
 gsk/gl/resources/linear_gradient.glsl         |  8 ++++++++
 gsk/gl/resources/outset_shadow.glsl           | 10 ++++++++++
 gsk/gl/resources/preamble.fs.glsl             | 12 +++++++++---
 gsk/gl/resources/preamble.vs.glsl             |  8 +++++++-
 gsk/gl/resources/radial_gradient.glsl         |  8 ++++++++
 gsk/gl/resources/unblurred_outset_shadow.glsl | 12 ++++++++++++
 13 files changed, 130 insertions(+), 4 deletions(-)
---
diff --git a/gsk/gl/resources/blur.glsl b/gsk/gl/resources/blur.glsl
index 7e7c1c2518..dc140741b8 100644
--- a/gsk/gl/resources/blur.glsl
+++ b/gsk/gl/resources/blur.glsl
@@ -5,9 +5,15 @@ uniform float u_blur_radius;
 uniform vec2 u_blur_size;
 uniform vec2 u_blur_dir;
 
+#if defined(GSK_GLES3)
+out vec2 pixel_step;
+out float pixels_per_side;
+out vec3 initial_gaussian;
+#else
 _OUT_ vec2 pixel_step;
 _OUT_ float pixels_per_side;
 _OUT_ vec3 initial_gaussian;
+#endif
 
 const float PI = 3.14159265;
 const float RADIUS_MULTIPLIER = 2.0;
@@ -29,9 +35,15 @@ void main() {
 // FRAGMENT_SHADER:
 // blur.glsl
 
+#if defined(GSK_GLES3)
+in vec2 pixel_step;
+in float pixels_per_side;
+in vec3 initial_gaussian;
+#else
 _IN_ vec2 pixel_step;
 _IN_ float pixels_per_side;
 _IN_ vec3 initial_gaussian;
+#endif
 
 // blur_radius 0 is NOT supported and MUST be caught before.
 
diff --git a/gsk/gl/resources/border.glsl b/gsk/gl/resources/border.glsl
index b8653bad49..5d235cccb3 100644
--- a/gsk/gl/resources/border.glsl
+++ b/gsk/gl/resources/border.glsl
@@ -4,9 +4,15 @@
 uniform vec4 u_widths;
 uniform vec4[3] u_outline_rect;
 
+#if defined(GSK_GLES3)
+out vec4 final_color;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#else
 _OUT_ vec4 final_color;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#endif
 
 void main() {
   gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
@@ -28,9 +34,15 @@ void main() {
 
 uniform vec4[3] u_outline_rect;
 
+#if defined(GSK_GLES3)
+in vec4 final_color;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#else
 _IN_ vec4 final_color;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#endif
 
 void main() {
   vec2 frag = gsk_get_frag_coord();
diff --git a/gsk/gl/resources/color.glsl b/gsk/gl/resources/color.glsl
index ba98b1b170..a3a44d72af 100644
--- a/gsk/gl/resources/color.glsl
+++ b/gsk/gl/resources/color.glsl
@@ -1,7 +1,11 @@
 // VERTEX_SHADER:
 // color.glsl
 
+#if defined(GSK_GLES3)
+out vec4 final_color;
+#else
 _OUT_ vec4 final_color;
+#endif
 
 void main() {
   gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
@@ -12,7 +16,11 @@ void main() {
 // FRAGMENT_SHADER:
 // color.glsl
 
+#if defined(GSK_GLES3)
+in vec4 final_color;
+#else
 _IN_ vec4 final_color;
+#endif
 
 void main() {
   gskSetOutputColor(final_color);
diff --git a/gsk/gl/resources/coloring.glsl b/gsk/gl/resources/coloring.glsl
index 007c54d562..9bf0655b43 100644
--- a/gsk/gl/resources/coloring.glsl
+++ b/gsk/gl/resources/coloring.glsl
@@ -1,8 +1,13 @@
 // VERTEX_SHADER:
 // coloring.glsl
 
+#if defined(GSK_GLES3)
+out vec4 final_color;
+out float use_color;
+#else
 _OUT_ vec4 final_color;
 _OUT_ float use_color;
+#endif
 
 void main() {
   gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
@@ -23,8 +28,13 @@ void main() {
 // FRAGMENT_SHADER:
 // coloring.glsl
 
+#if defined(GSK_GLES3)
+in vec4 final_color;
+in float use_color;
+#else
 _IN_ vec4 final_color;
 _IN_ float use_color;
+#endif
 
 void main() {
   vec4 diffuse = GskTexture(u_source, vUv);
diff --git a/gsk/gl/resources/conic_gradient.glsl b/gsk/gl/resources/conic_gradient.glsl
index 3df33bcb11..10ca6860ae 100644
--- a/gsk/gl/resources/conic_gradient.glsl
+++ b/gsk/gl/resources/conic_gradient.glsl
@@ -3,7 +3,11 @@
 
 uniform vec4 u_geometry;
 
+#if defined(GSK_GLES3)
+_NOPERSPECTIVE_ out vec2 coord;
+#else
 _NOPERSPECTIVE_ _OUT_ vec2 coord;
+#endif
 
 void main() {
   gl_Position = u_projection * (u_modelview * vec4(aPosition, 0.0, 1.0));
@@ -29,7 +33,11 @@ uniform highp int u_num_color_stops; // Why? Because it works like this.
 uniform vec4 u_geometry;
 uniform float u_color_stops[MAX_COLOR_STOPS * 5];
 
+#if defined(GSK_GLES3)
+_NOPERSPECTIVE_ in vec2 coord;
+#else
 _NOPERSPECTIVE_ _IN_ vec2 coord;
+#endif
 
 float get_offset(int index) {
   // u_color_stops[5 * index] makes Intel Windows driver crash.
diff --git a/gsk/gl/resources/filled_border.glsl b/gsk/gl/resources/filled_border.glsl
index d503dd0500..9c57207cdd 100644
--- a/gsk/gl/resources/filled_border.glsl
+++ b/gsk/gl/resources/filled_border.glsl
@@ -4,10 +4,17 @@
 uniform vec4 u_widths;
 uniform vec4[3] u_outline_rect;
 
+#if defined(GSK_GLES3)
+out vec4 outer_color;
+out vec4 inner_color;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#else
 _OUT_ vec4 outer_color;
 _OUT_ vec4 inner_color;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#endif
 
 void main() {
   gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
@@ -30,10 +37,17 @@ void main() {
 
 uniform vec4[3] u_outline_rect;
 
+#if defined(GSK_GLES3)
+in vec4 outer_color;
+in vec4 inner_color;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#else
 _IN_ vec4 outer_color;
 _IN_ vec4 inner_color;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#endif
 
 void main() {
   vec2 frag = gsk_get_frag_coord();
diff --git a/gsk/gl/resources/inset_shadow.glsl b/gsk/gl/resources/inset_shadow.glsl
index f052a08580..7f3099655a 100644
--- a/gsk/gl/resources/inset_shadow.glsl
+++ b/gsk/gl/resources/inset_shadow.glsl
@@ -5,9 +5,15 @@ uniform float u_spread;
 uniform vec2 u_offset;
 uniform vec4[3] u_outline_rect;
 
+#if defined(GSK_GLES3)
+out vec4 final_color;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#else
 _OUT_ vec4 final_color;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#endif
 
 void main() {
   gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
@@ -29,9 +35,15 @@ void main() {
 // FRAGMENT_SHADER:
 // inset_shadow.glsl
 
+#if defined(GSK_GLES3)
+in vec4 final_color;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#else
 _IN_ vec4 final_color;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#endif
 
 void main() {
   vec2 frag = gsk_get_frag_coord();
diff --git a/gsk/gl/resources/linear_gradient.glsl b/gsk/gl/resources/linear_gradient.glsl
index 153d7afc98..f91626ffbc 100644
--- a/gsk/gl/resources/linear_gradient.glsl
+++ b/gsk/gl/resources/linear_gradient.glsl
@@ -2,7 +2,11 @@
 // linear_gradient.glsl
 uniform vec4 u_points;
 
+#if defined(GSK_GLES3)
+_NOPERSPECTIVE_ out vec4 info;
+#else
 _NOPERSPECTIVE_ _OUT_ vec4 info;
+#endif
 
 void main() {
   gl_Position = u_projection * (u_modelview * vec4(aPosition, 0.0, 1.0));
@@ -53,7 +57,11 @@ uniform highp int u_num_color_stops; // Why? Because it works like this.
 uniform float u_color_stops[MAX_COLOR_STOPS * 5];
 uniform bool u_repeat;
 
+#if defined(GSK_GLES3)
+_NOPERSPECTIVE_ in vec4 info;
+#else
 _NOPERSPECTIVE_ _IN_ vec4 info;
+#endif
 
 float get_offset(int index) {
   // u_color_stops[5 * index] makes Intel Windows driver crash.
diff --git a/gsk/gl/resources/outset_shadow.glsl b/gsk/gl/resources/outset_shadow.glsl
index 44b05aa152..b33043a515 100644
--- a/gsk/gl/resources/outset_shadow.glsl
+++ b/gsk/gl/resources/outset_shadow.glsl
@@ -3,8 +3,13 @@
 
 uniform vec4[3] u_outline_rect;
 
+#if defined(GSK_GLES3)
+out vec4 final_color;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_outline;
+#else
 _OUT_ vec4 final_color;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outline;
+#endif
 
 void main() {
   gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
@@ -21,8 +26,13 @@ void main() {
 // FRAGMENT_SHADER:
 // outset_shadow.glsl
 
+#if defined(GSK_GLES3)
+in vec4 final_color;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_outline;
+#else
 _IN_ vec4 final_color;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outline;
+#endif
 
 void main() {
   vec2 frag = gsk_get_frag_coord();
diff --git a/gsk/gl/resources/preamble.fs.glsl b/gsk/gl/resources/preamble.fs.glsl
index c1c5a954ee..180e0fa464 100644
--- a/gsk/gl/resources/preamble.fs.glsl
+++ b/gsk/gl/resources/preamble.fs.glsl
@@ -9,9 +9,15 @@ uniform vec4[3] u_clip_rect;
 _OUT_ vec4 outputColor;
 #elif !defined(GSK_GLES)
 _OUT_ vec4 outputColor;
+#elif defined(GSK_GLES3)
+out vec4 outputColor;
 #endif
 
+#if defined(GSK_GLES3)
+in vec2 vUv;
+#else
 _IN_ vec2 vUv;
+#endif
 
 
 GskRoundedRect gsk_decode_rect(_GSK_ROUNDED_RECT_UNIFORM_ r)
@@ -93,7 +99,7 @@ gsk_rect_coverage (vec4 r, vec2 p)
 }
 
 vec4 GskTexture(sampler2D sampler, vec2 texCoords) {
-#if defined(GSK_GLES) || defined(GSK_LEGACY)
+#if (defined(GSK_GLES) || defined(GSK_LEGACY)) && !defined (GSK_GLES3)
   return texture2D(sampler, texCoords);
 #else
   return texture(sampler, texCoords);
@@ -132,7 +138,7 @@ void gskSetOutputColor(vec4 color) {
   result = color * coverage;
 #endif
 
-#if defined(GSK_GLES) || defined(GSK_LEGACY)
+#if (defined(GSK_GLES) || defined(GSK_LEGACY)) && !defined(GSK_GLES3)
   gl_FragColor = result;
 #else
   outputColor = result;
@@ -154,7 +160,7 @@ void gskSetScaledOutputColor(vec4 color, float alpha) {
   result = color * (alpha * coverage);
 #endif
 
-#if defined(GSK_GLES) || defined(GSK_LEGACY)
+#if (defined(GSK_GLES) || defined(GSK_LEGACY)) && !defined(GSK_GLES3)
   gl_FragColor = result;
 #else
   outputColor = result;
diff --git a/gsk/gl/resources/preamble.vs.glsl b/gsk/gl/resources/preamble.vs.glsl
index 758bca89d2..8a46b0d63e 100644
--- a/gsk/gl/resources/preamble.vs.glsl
+++ b/gsk/gl/resources/preamble.vs.glsl
@@ -2,7 +2,13 @@ uniform mat4 u_projection;
 uniform mat4 u_modelview;
 uniform float u_alpha;
 
-#if defined(GSK_GLES) || defined(GSK_LEGACY)
+#if defined (GSK_GLES3)
+in vec2 aPosition;
+in vec2 aUv;
+in vec4 aColor;
+in vec4 aColor2;
+out vec2 vUv;
+#elif defined(GSK_GLES) || defined(GSK_LEGACY)
 attribute vec2 aPosition;
 attribute vec2 aUv;
 attribute vec4 aColor;
diff --git a/gsk/gl/resources/radial_gradient.glsl b/gsk/gl/resources/radial_gradient.glsl
index 4311fc5d63..be44e90f9e 100644
--- a/gsk/gl/resources/radial_gradient.glsl
+++ b/gsk/gl/resources/radial_gradient.glsl
@@ -3,7 +3,11 @@
 
 uniform vec4 u_geometry;
 
+#if defined(GSK_GLES3)
+_NOPERSPECTIVE_ out vec2 coord;
+#else
 _NOPERSPECTIVE_ _OUT_ vec2 coord;
+#endif
 
 void main() {
   gl_Position = u_projection * (u_modelview * vec4(aPosition, 0.0, 1.0));
@@ -32,7 +36,11 @@ uniform bool u_repeat;
 uniform vec2 u_range;
 uniform float u_color_stops[MAX_COLOR_STOPS * 5];
 
+#if defined(GSK_GLES3)
+_NOPERSPECTIVE_ in vec2 coord;
+#else
 _NOPERSPECTIVE_ _IN_ vec2 coord;
+#endif
 
 float get_offset(int index) {
   // u_color_stops[5 * index] makes Intel Windows driver crash.
diff --git a/gsk/gl/resources/unblurred_outset_shadow.glsl b/gsk/gl/resources/unblurred_outset_shadow.glsl
index cd44212c93..4bd943ab51 100644
--- a/gsk/gl/resources/unblurred_outset_shadow.glsl
+++ b/gsk/gl/resources/unblurred_outset_shadow.glsl
@@ -5,9 +5,15 @@ uniform float u_spread;
 uniform vec2 u_offset;
 uniform vec4[3] u_outline_rect;
 
+#if defined(GSK_GLES3)
+out vec4 final_color;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
+out _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#else
 _OUT_ vec4 final_color;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
 _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#endif
 
 void main() {
   gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
@@ -28,9 +34,15 @@ void main() {
 
 // FRAGMENT_SHADER:
 // unblurred_outset_shadow.glsl
+#if defined(GSK_GLES3)
+in vec4 final_color;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
+in _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#else
 _IN_ vec4 final_color;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
 _IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
+#endif
 
 void main() {
   vec2 frag = gsk_get_frag_coord();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]