[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