Skip to content

Commit 4b84207

Browse files
committed
Use vertex shader workaround for Mali GXX GPUs for glow shader
We applied this same workaround to the tonemap shader and DoF, but didn't apply it to glow since the bug didn't manifest on our test devices.
1 parent 17fb6e3 commit 4b84207

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

servers/rendering/renderer_rd/shaders/effects/blur_raster.glsl

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,22 @@ layout(location = 0) out vec2 uv_interp;
1111
/* clang-format on */
1212

1313
void main() {
14-
vec2 base_arr[3] = vec2[](vec2(-1.0, -1.0), vec2(-1.0, 3.0), vec2(3.0, -1.0));
15-
gl_Position = vec4(base_arr[gl_VertexIndex], 0.0, 1.0);
16-
uv_interp = clamp(gl_Position.xy, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
14+
// old code, ARM driver bug on Mali-GXXx GPUs and Vulkan API 1.3.xxx
15+
// https://github.com/godotengine/godot/pull/92817#issuecomment-2168625982
16+
//vec2 base_arr[3] = vec2[](vec2(-1.0, -1.0), vec2(-1.0, 3.0), vec2(3.0, -1.0));
17+
//gl_Position = vec4(base_arr[gl_VertexIndex], 0.0, 1.0);
18+
//uv_interp = clamp(gl_Position.xy, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
19+
20+
vec2 vertex_base;
21+
if (gl_VertexIndex == 0) {
22+
vertex_base = vec2(-1.0, -1.0);
23+
} else if (gl_VertexIndex == 1) {
24+
vertex_base = vec2(-1.0, 3.0);
25+
} else {
26+
vertex_base = vec2(3.0, -1.0);
27+
}
28+
gl_Position = vec4(vertex_base, 0.0, 1.0);
29+
uv_interp = clamp(vertex_base, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
1730
}
1831

1932
/* clang-format off */

0 commit comments

Comments
 (0)