[Bf-blender-cvs] [320659068ab] temp-vulkan-shader: Wortk around shaderc issue by converting view macros to functions.

Jeroen Bakker noreply at git.blender.org
Tue Dec 6 10:45:40 CET 2022


Commit: 320659068abc5ca6c383e0993ef8a3a2f4eff84f
Author: Jeroen Bakker
Date:   Tue Dec 6 10:45:34 2022 +0100
Branches: temp-vulkan-shader
https://developer.blender.org/rB320659068abc5ca6c383e0993ef8a3a2f4eff84f

Wortk around shaderc issue by converting view macros to functions.

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

M	source/blender/draw/engines/overlay/shaders/overlay_edit_gpencil_guide_vert.glsl
M	source/blender/draw/intern/shaders/common_gpencil_lib.glsl
M	source/blender/draw/intern/shaders/common_view_lib.glsl

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

diff --git a/source/blender/draw/engines/overlay/shaders/overlay_edit_gpencil_guide_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_edit_gpencil_guide_vert.glsl
index 263a60e3968..a5091345539 100644
--- a/source/blender/draw/engines/overlay/shaders/overlay_edit_gpencil_guide_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/overlay_edit_gpencil_guide_vert.glsl
@@ -6,11 +6,9 @@ void main()
 {
   GPU_INTEL_VERTEX_SHADER_WORKAROUND
 
-  /* Use local variable to workaround macro unrolling issue in shaderc. */
-  vec3 pos = pPosition;
-  gl_Position = point_world_to_ndc(pos);
+  gl_Position = point_world_to_ndc(pPosition);
   finalColor = pColor;
   gl_PointSize = pSize;
 
-  view_clipping_distances(pos);
+  view_clipping_distances(pPosition);
 }
diff --git a/source/blender/draw/intern/shaders/common_gpencil_lib.glsl b/source/blender/draw/intern/shaders/common_gpencil_lib.glsl
index 06b57f34190..def841b07aa 100644
--- a/source/blender/draw/intern/shaders/common_gpencil_lib.glsl
+++ b/source/blender/draw/intern/shaders/common_gpencil_lib.glsl
@@ -253,10 +253,7 @@ vec4 gpencil_vertex(vec4 viewport_size,
         x_axis = vec2(1.0, 0.0);
       }
       else { /* GP_STROKE_ALIGNMENT_OBJECT */
-
-        /* Use local variable to workaround macro unrolling issue in shaderc. */
-        vec3 wpos = wpos1 + ModelMatrix[0].xyz;
-        vec4 ndc_x = point_world_to_ndc(wpos);
+        vec4 ndc_x = point_world_to_ndc(wpos1 + ModelMatrix[0].xyz);
         vec2 ss_x = gpencil_project_to_screenspace(ndc_x, viewport_size);
         x_axis = safe_normalize(ss_x - ss1);
       }
diff --git a/source/blender/draw/intern/shaders/common_view_lib.glsl b/source/blender/draw/intern/shaders/common_view_lib.glsl
index 6ae58f71a1b..4ea1cb947af 100644
--- a/source/blender/draw/intern/shaders/common_view_lib.glsl
+++ b/source/blender/draw/intern/shaders/common_view_lib.glsl
@@ -252,12 +252,28 @@ uniform mat4 ModelMatrixInverse;
   (ProjectionMatrix * (ViewMatrix * vec4((ModelMatrix * vec4(p, 1.0)).xyz, 1.0)))
 #define point_object_to_view(p) ((ViewMatrix * vec4((ModelMatrix * vec4(p, 1.0)).xyz, 1.0)).xyz)
 #define point_object_to_world(p) ((ModelMatrix * vec4(p, 1.0)).xyz)
-#define point_view_to_ndc(p) (ProjectionMatrix * vec4(p, 1.0))
 #define point_view_to_object(p) ((ModelMatrixInverse * (ViewMatrixInverse * vec4(p, 1.0))).xyz)
-#define point_view_to_world(p) ((ViewMatrixInverse * vec4(p, 1.0)).xyz)
-#define point_world_to_ndc(p) (ProjectionMatrix * (ViewMatrix * vec4(p, 1.0)))
 #define point_world_to_object(p) ((ModelMatrixInverse * vec4(p, 1.0)).xyz)
-#define point_world_to_view(p) ((ViewMatrix * vec4(p, 1.0)).xyz)
+
+vec4 point_view_to_ndc(vec3 p)
+{
+  return ProjectionMatrix * vec4(p, 1.0);
+}
+
+vec3 point_view_to_world(vec3 p)
+{
+  return (ViewMatrixInverse * vec4(p, 1.0)).xyz;
+}
+
+vec4 point_world_to_ndc(vec3 p)
+{
+  return ProjectionMatrix * (ViewMatrix * vec4(p, 1.0));
+}
+
+vec3 point_world_to_view(vec3 p)
+{
+  return (ViewMatrix * vec4(p, 1.0)).xyz;
+}
 
 /* Due to some shader compiler bug, we somewhat need to access gl_VertexID
  * to make vertex shaders work. even if it's actually dead code. */



More information about the Bf-blender-cvs mailing list