Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2019-12-02 14:13:15 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2019-12-02 15:19:42 +0300
commita3fe9756d280898bc20207a5046d665ebfc1dc3d (patch)
tree8b008a7116616d3b877de76564f1c9a7d93dd18e /reference/opt/shaders-msl/asm
parentea68f3aa7eea3e1bc8fe6bcc12abf310a55d3922 (diff)
MSL: Support ClipDistance as an input stage variable.
MSL does not support this, so we have to emulate it by passing it around as a varying between stages. We use a special "user(clipN)" attribute for this rather than locN which is used for user varyings.
Diffstat (limited to 'reference/opt/shaders-msl/asm')
-rw-r--r--reference/opt/shaders-msl/asm/vert/clip-distance-plain-variable.asm.vert29
1 files changed, 29 insertions, 0 deletions
diff --git a/reference/opt/shaders-msl/asm/vert/clip-distance-plain-variable.asm.vert b/reference/opt/shaders-msl/asm/vert/clip-distance-plain-variable.asm.vert
new file mode 100644
index 00000000..1528c835
--- /dev/null
+++ b/reference/opt/shaders-msl/asm/vert/clip-distance-plain-variable.asm.vert
@@ -0,0 +1,29 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct main0_out
+{
+ float4 gl_Position [[position]];
+ float gl_ClipDistance [[clip_distance]] [2];
+ float gl_ClipDistance_0 [[user(clip0)]];
+ float gl_ClipDistance_1 [[user(clip1)]];
+};
+
+struct main0_in
+{
+ float4 pos [[attribute(0)]];
+};
+
+vertex main0_out main0(main0_in in [[stage_in]])
+{
+ main0_out out = {};
+ out.gl_Position = in.pos;
+ out.gl_ClipDistance[0] = in.pos.x;
+ out.gl_ClipDistance[1] = in.pos.y;
+ out.gl_ClipDistance_0 = out.gl_ClipDistance[0];
+ out.gl_ClipDistance_1 = out.gl_ClipDistance[1];
+ return out;
+}
+