[Bf-blender-cvs] [92fc32e48d4] master: UI: Fix Icon drawing on MacOS

Clément Foucault noreply at git.blender.org
Wed Sep 9 19:32:21 CEST 2020


Commit: 92fc32e48d4ec720a81ca7f1f3c842909caea449
Author: Clément Foucault
Date:   Wed Sep 9 19:28:36 2020 +0200
Branches: master
https://developer.blender.org/rB92fc32e48d4ec720a81ca7f1f3c842909caea449

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

===================================================================

M	source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl

===================================================================

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;
 }



More information about the Bf-blender-cvs mailing list