From 92fc32e48d4ec720a81ca7f1f3c842909caea449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Wed, 9 Sep 2020 19:28:36 +0200 Subject: UI: Fix Icon drawing on MacOS It seems that using a vertex shader using both `gl_InstanceID` and `gl_VertexID` is causing some issues on MacOS + Intel Iris. Regression introduced by rB052538edc1fba109d3427471047611888ed13bea --- .../gpu_shader_2D_image_multi_rect_vert.glsl | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'source') diff --git a/source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl index 640ceb97e5b..bdc0d37a7ae 100644 --- a/source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl +++ b/source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl @@ -11,29 +11,33 @@ uniform vec4 calls_data[MAX_CALLS * 3]; out vec2 texCoord_interp; flat out vec4 finalColor; +in vec2 pos; + void main() { - vec4 pos = calls_data[gl_InstanceID * 3]; + vec4 rect = calls_data[gl_InstanceID * 3]; vec4 tex = calls_data[gl_InstanceID * 3 + 1]; finalColor = calls_data[gl_InstanceID * 3 + 2]; - if (gl_VertexID == 0) { - pos.xy = pos.xz; + /* Use pos to select the right swizzle (instead of gl_VertexID) + * in order to workaround an OSX driver bug. */ + if (pos == vec2(0.0, 0.0)) { + rect.xy = rect.xz; tex.xy = tex.xz; } - else if (gl_VertexID == 1) { - pos.xy = pos.xw; + else if (pos == vec2(0.0, 1.0)) { + rect.xy = rect.xw; tex.xy = tex.xw; } - else if (gl_VertexID == 2) { - pos.xy = pos.yw; + else if (pos == vec2(1.0, 1.0)) { + rect.xy = rect.yw; tex.xy = tex.yw; } else { - pos.xy = pos.yz; + rect.xy = rect.yz; tex.xy = tex.yz; } - gl_Position = vec4(pos.xy, 0.0f, 1.0f); + gl_Position = vec4(rect.xy, 0.0f, 1.0f); texCoord_interp = tex.xy; } -- cgit v1.2.3