diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2019-12-02 14:13:15 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2019-12-02 15:19:42 +0300 |
commit | a3fe9756d280898bc20207a5046d665ebfc1dc3d (patch) | |
tree | 8b008a7116616d3b877de76564f1c9a7d93dd18e /reference/opt/shaders-msl/asm | |
parent | ea68f3aa7eea3e1bc8fe6bcc12abf310a55d3922 (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.vert | 29 |
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; +} + |