[gtk/wip.win32.fixes: 11/11] gsk/gl/resources/*.glsl: Add GLSL 300 ES items
- From: Chun-wei Fan <fanchunwei src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip.win32.fixes: 11/11] gsk/gl/resources/*.glsl: Add GLSL 300 ES items
- Date: Tue, 23 Nov 2021 04:12:11 +0000 (UTC)
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]