summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Hartmann <alex.hart.278@gmail.com>2024-06-05 22:57:24 +0200
committerAlex <alex.hart.278@gmail.com>2024-07-20 22:01:35 +0200
commit78ede4f8b61733b36774ed51e0f237f52cd3eb4c (patch)
tree1fb0699d8cf95607421f0095b1dfc02a2dbc08d7
parent96a386f3c424af96d950ee5098b4b0e4907c9508 (diff)
downloadredot-engine-78ede4f8b61733b36774ed51e0f237f52cd3eb4c.tar.gz
Fix glsl shader for Android Mali-GXXx GPUs and Vulkan API 1.3.xxx
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/bokeh_dof_raster.glsl19
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/tonemap.glsl19
2 files changed, 32 insertions, 6 deletions
diff --git a/servers/rendering/renderer_rd/shaders/effects/bokeh_dof_raster.glsl b/servers/rendering/renderer_rd/shaders/effects/bokeh_dof_raster.glsl
index 2010b58474..f2b93059b0 100644
--- a/servers/rendering/renderer_rd/shaders/effects/bokeh_dof_raster.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/bokeh_dof_raster.glsl
@@ -11,9 +11,22 @@ layout(location = 0) out vec2 uv_interp;
/* clang-format on */
void main() {
- vec2 base_arr[3] = vec2[](vec2(-1.0, -1.0), vec2(-1.0, 3.0), vec2(3.0, -1.0));
- gl_Position = vec4(base_arr[gl_VertexIndex], 0.0, 1.0);
- uv_interp = clamp(gl_Position.xy, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
+ // old code, ARM driver bug on Mali-GXXx GPUs and Vulkan API 1.3.xxx
+ // https://github.com/godotengine/godot/pull/92817#issuecomment-2168625982
+ //vec2 base_arr[3] = vec2[](vec2(-1.0, -1.0), vec2(-1.0, 3.0), vec2(3.0, -1.0));
+ //gl_Position = vec4(base_arr[gl_VertexIndex], 0.0, 1.0);
+ //uv_interp = clamp(gl_Position.xy, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
+
+ vec2 vertex_base;
+ if (gl_VertexIndex == 0) {
+ vertex_base = vec2(-1.0, -1.0);
+ } else if (gl_VertexIndex == 1) {
+ vertex_base = vec2(-1.0, 3.0);
+ } else {
+ vertex_base = vec2(3.0, -1.0);
+ }
+ gl_Position = vec4(vertex_base, 0.0, 1.0);
+ uv_interp = clamp(vertex_base, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
}
/* clang-format off */
diff --git a/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl b/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl
index 38eec2b61a..841f02f673 100644
--- a/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl
@@ -13,9 +13,22 @@
layout(location = 0) out vec2 uv_interp;
void main() {
- vec2 base_arr[3] = vec2[](vec2(-1.0, -1.0), vec2(-1.0, 3.0), vec2(3.0, -1.0));
- gl_Position = vec4(base_arr[gl_VertexIndex], 0.0, 1.0);
- uv_interp = clamp(gl_Position.xy, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
+ // old code, ARM driver bug on Mali-GXXx GPUs and Vulkan API 1.3.xxx
+ // https://github.com/godotengine/godot/pull/92817#issuecomment-2168625982
+ //vec2 base_arr[3] = vec2[](vec2(-1.0, -1.0), vec2(-1.0, 3.0), vec2(3.0, -1.0));
+ //gl_Position = vec4(base_arr[gl_VertexIndex], 0.0, 1.0);
+ //uv_interp = clamp(gl_Position.xy, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
+
+ vec2 vertex_base;
+ if (gl_VertexIndex == 0) {
+ vertex_base = vec2(-1.0, -1.0);
+ } else if (gl_VertexIndex == 1) {
+ vertex_base = vec2(-1.0, 3.0);
+ } else {
+ vertex_base = vec2(3.0, -1.0);
+ }
+ gl_Position = vec4(vertex_base, 0.0, 1.0);
+ uv_interp = clamp(vertex_base, vec2(0.0, 0.0), vec2(1.0, 1.0)) * 2.0; // saturate(x) * 2.0
}
#[fragment]