From 73c96193c27f89770315046f909933c1c8acc2a3 Mon Sep 17 00:00:00 2001 From: sumibi-yakitori Date: Thu, 25 May 2023 08:57:41 +0900 Subject: [PATCH] gsk: Fix bug regarding fixed-size array declarations in GLSL ES Fixes to those codes that are in line with the GLSL ES specification that the array size must be written after the variable name --- gsk/gl/resources/border.glsl | 14 ++++++++++++-- gsk/gl/resources/filled_border.glsl | 14 ++++++++++++-- gsk/gl/resources/inset_shadow.glsl | 12 +++++++++++- gsk/gl/resources/outset_shadow.glsl | 10 +++++++++- gsk/gl/resources/preamble.fs.glsl | 6 +++++- gsk/gl/resources/preamble.glsl | 6 +++--- gsk/gl/resources/preamble.vs.glsl | 2 ++ gsk/gl/resources/unblurred_outset_shadow.glsl | 12 +++++++++++- 8 files changed, 65 insertions(+), 11 deletions(-) diff --git a/gsk/gl/resources/border.glsl b/gsk/gl/resources/border.glsl index 0fa3203887a..cf5955f307c 100644 --- a/gsk/gl/resources/border.glsl +++ b/gsk/gl/resources/border.glsl @@ -2,11 +2,16 @@ // border.glsl uniform vec4 u_widths; -uniform vec4[3] u_outline_rect; +uniform vec4 u_outline_rect[3]; _OUT_ vec4 final_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline[3]; +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline[3]; +#else _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,11 +34,16 @@ void main() { // FRAGMENT_SHADER: // border.glsl -uniform vec4[3] u_outline_rect; +uniform vec4 u_outline_rect[3]; _IN_ vec4 final_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline[3]; +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline[3]; +#else _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/filled_border.glsl b/gsk/gl/resources/filled_border.glsl index 23af3aa89c6..e5320cff080 100644 --- a/gsk/gl/resources/filled_border.glsl +++ b/gsk/gl/resources/filled_border.glsl @@ -2,12 +2,17 @@ // filled_border.glsl uniform vec4 u_widths; -uniform vec4[3] u_outline_rect; +uniform vec4 u_outline_rect[3]; _OUT_ vec4 outer_color; _OUT_ vec4 inner_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline[3]; +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline[3]; +#else _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); @@ -31,12 +36,17 @@ void main() { // FRAGMENT_SHADER: // filled_border.glsl -uniform vec4[3] u_outline_rect; +uniform vec4 u_outline_rect[3]; _IN_ vec4 outer_color; _IN_ vec4 inner_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline[3]; +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline[3]; +#else _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 83d4287f130..651587e27a7 100644 --- a/gsk/gl/resources/inset_shadow.glsl +++ b/gsk/gl/resources/inset_shadow.glsl @@ -3,11 +3,16 @@ uniform float u_spread; uniform vec2 u_offset; -uniform vec4[3] u_outline_rect; +uniform vec4 u_outline_rect[3]; _OUT_ vec4 final_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline[3]; +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline[3]; +#else _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); @@ -33,8 +38,13 @@ void main() { // inset_shadow.glsl _IN_ vec4 final_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline[3]; +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline[3]; +#else _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/outset_shadow.glsl b/gsk/gl/resources/outset_shadow.glsl index fac86c0093c..71b49e28b71 100644 --- a/gsk/gl/resources/outset_shadow.glsl +++ b/gsk/gl/resources/outset_shadow.glsl @@ -1,10 +1,14 @@ // VERTEX_SHADER: // outset_shadow.glsl -uniform vec4[3] u_outline_rect; +uniform vec4 u_outline_rect[3]; _OUT_ vec4 final_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outline[3]; +#else _OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outline; +#endif void main() { gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0); @@ -23,7 +27,11 @@ void main() { // outset_shadow.glsl _IN_ vec4 final_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outline[3]; +#else _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 0c366bd8476..56389c16d65 100644 --- a/gsk/gl/resources/preamble.fs.glsl +++ b/gsk/gl/resources/preamble.fs.glsl @@ -3,7 +3,7 @@ uniform mat4 u_projection; uniform mat4 u_modelview; uniform float u_alpha; uniform vec4 u_viewport; -uniform vec4[3] u_clip_rect; +uniform vec4 u_clip_rect[3]; #if defined(GSK_LEGACY) _OUT_ vec4 outputColor; @@ -14,7 +14,11 @@ _OUT_ vec4 outputColor; _IN_ vec2 vUv; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +GskRoundedRect gsk_decode_rect(_GSK_ROUNDED_RECT_UNIFORM_ r[3]) +#else GskRoundedRect gsk_decode_rect(_GSK_ROUNDED_RECT_UNIFORM_ r) +#endif { GskRoundedRect rect; #if defined(GSK_GLES) || defined(GSK_LEGACY) diff --git a/gsk/gl/resources/preamble.glsl b/gsk/gl/resources/preamble.glsl index 46bebc14e04..e93ebeb52b3 100644 --- a/gsk/gl/resources/preamble.glsl +++ b/gsk/gl/resources/preamble.glsl @@ -5,7 +5,7 @@ precision highp float; #if defined(GSK_GLES) || defined(GSK_LEGACY) #define _OUT_ varying #define _IN_ varying -#define _GSK_ROUNDED_RECT_UNIFORM_ vec4[3] +#define _GSK_ROUNDED_RECT_UNIFORM_ vec4 #else #define _OUT_ out #define _IN_ in @@ -73,7 +73,7 @@ void gsk_bounds_normalize (inout vec4 bounds) // Transform from a C GskRoundedRect to what we need. GskRoundedRect -gsk_create_rect(vec4[3] data) +gsk_create_rect(vec4 data[3]) { vec4 bounds = vec4(data[0].xy, data[0].xy + data[0].zw); @@ -90,7 +90,7 @@ gsk_create_rect(vec4[3] data) } vec4 -gsk_get_bounds(vec4[3] data) +gsk_get_bounds(vec4 data[3]) { vec4 bounds = vec4(data[0].xy, data[0].xy + data[0].zw); diff --git a/gsk/gl/resources/preamble.vs.glsl b/gsk/gl/resources/preamble.vs.glsl index 758bca89d20..1b3617e7b56 100644 --- a/gsk/gl/resources/preamble.vs.glsl +++ b/gsk/gl/resources/preamble.vs.glsl @@ -58,6 +58,8 @@ void gsk_rounded_rect_transform(inout GskRoundedRect r, mat4 mat) #if defined(GSK_LEGACY) // Can't have out or inout array parameters... #define gsk_rounded_rect_encode(r, uni) uni[0] = r.bounds; uni[1] = r.corner_points1; uni[2] = r.corner_points2; +#elif defined(GSK_GLES) +void gsk_rounded_rect_encode(GskRoundedRect r, out _GSK_ROUNDED_RECT_UNIFORM_ out_r[3]) #else void gsk_rounded_rect_encode(GskRoundedRect r, out _GSK_ROUNDED_RECT_UNIFORM_ out_r) { diff --git a/gsk/gl/resources/unblurred_outset_shadow.glsl b/gsk/gl/resources/unblurred_outset_shadow.glsl index cd44212c933..694e864f11c 100644 --- a/gsk/gl/resources/unblurred_outset_shadow.glsl +++ b/gsk/gl/resources/unblurred_outset_shadow.glsl @@ -3,11 +3,16 @@ uniform float u_spread; uniform vec2 u_offset; -uniform vec4[3] u_outline_rect; +uniform vec4 u_outline_rect[3]; _OUT_ vec4 final_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline[3]; +_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline[3]; +#else _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,8 +34,13 @@ void main() { // FRAGMENT_SHADER: // unblurred_outset_shadow.glsl _IN_ vec4 final_color; +#if defined(GSK_GLES) || defined(GSK_LEGACY) +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline[3]; +_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline[3]; +#else _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(); -- GitLab