diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-04-09 14:23:09 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-04-19 13:10:49 +0300 |
commit | e32c474911781b7a2e0cc1e70f85b7404fc71a65 (patch) | |
tree | 70a605e0d4f514466d8ab08544c92e5595f446fe /reference | |
parent | dc54f75eec6af6aabefcf95bc9e0851aa1845979 (diff) |
MSL: Handle masking of TESC IO block members.
Diffstat (limited to 'reference')
4 files changed, 180 insertions, 0 deletions
diff --git a/reference/opt/shaders-msl/masking/write-outputs-block.mask-location-0.msl2.tesc b/reference/opt/shaders-msl/masking/write-outputs-block.mask-location-0.msl2.tesc new file mode 100644 index 00000000..a8d1b750 --- /dev/null +++ b/reference/opt/shaders-msl/masking/write-outputs-block.mask-location-0.msl2.tesc @@ -0,0 +1,41 @@ +#include <metal_stdlib> +#include <simd/simd.h> + +using namespace metal; + +struct P +{ + float a; + float b; +}; + +struct C +{ + float a; + float b; +}; + +struct main0_out +{ + float C_a; + float C_b; + float4 gl_Position; +}; + +struct main0_patchOut +{ + float P_b; +}; + +kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_PrimitiveID [[threadgroup_position_in_grid]], device main0_out* spvOut [[buffer(28)]], constant uint* spvIndirectParams [[buffer(29)]], device main0_patchOut* spvPatchOut [[buffer(27)]], device MTLQuadTessellationFactorsHalf* spvTessLevel [[buffer(26)]]) +{ + threadgroup P _11; + device main0_out* gl_out = &spvOut[gl_PrimitiveID * 4]; + device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID]; + _11.a = 1.0; + patchOut.P_b = 2.0; + gl_out[gl_InvocationID].C_a = 3.0; + gl_out[gl_InvocationID].C_b = 4.0; + gl_out[gl_InvocationID].gl_Position = float4(1.0); +} + diff --git a/reference/opt/shaders-msl/masking/write-outputs-block.mask-location-1.msl2.tesc b/reference/opt/shaders-msl/masking/write-outputs-block.mask-location-1.msl2.tesc new file mode 100644 index 00000000..8af75f7b --- /dev/null +++ b/reference/opt/shaders-msl/masking/write-outputs-block.mask-location-1.msl2.tesc @@ -0,0 +1,41 @@ +#include <metal_stdlib> +#include <simd/simd.h> + +using namespace metal; + +struct P +{ + float a; + float b; +}; + +struct C +{ + float a; + float b; +}; + +struct main0_out +{ + float C_b; + float4 gl_Position; +}; + +struct main0_patchOut +{ + float P_a; + float P_b; +}; + +kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_PrimitiveID [[threadgroup_position_in_grid]], device main0_out* spvOut [[buffer(28)]], constant uint* spvIndirectParams [[buffer(29)]], device main0_patchOut* spvPatchOut [[buffer(27)]], device MTLQuadTessellationFactorsHalf* spvTessLevel [[buffer(26)]]) +{ + threadgroup C c[4]; + device main0_out* gl_out = &spvOut[gl_PrimitiveID * 4]; + device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID]; + patchOut.P_a = 1.0; + patchOut.P_b = 2.0; + c[gl_InvocationID].a = 3.0; + gl_out[gl_InvocationID].C_b = 4.0; + gl_out[gl_InvocationID].gl_Position = float4(1.0); +} + diff --git a/reference/shaders-msl/masking/write-outputs-block.mask-location-0.msl2.tesc b/reference/shaders-msl/masking/write-outputs-block.mask-location-0.msl2.tesc new file mode 100644 index 00000000..e0641663 --- /dev/null +++ b/reference/shaders-msl/masking/write-outputs-block.mask-location-0.msl2.tesc @@ -0,0 +1,49 @@ +#pragma clang diagnostic ignored "-Wmissing-prototypes" + +#include <metal_stdlib> +#include <simd/simd.h> + +using namespace metal; + +struct P +{ + float a; + float b; +}; + +struct C +{ + float a; + float b; +}; + +struct main0_out +{ + float C_a; + float C_b; + float4 gl_Position; +}; + +struct main0_patchOut +{ + float P_b; +}; + +static inline __attribute__((always_inline)) +void write_in_function(threadgroup P& _11, device main0_patchOut& patchOut, device main0_out* thread & gl_out, thread uint& gl_InvocationID) +{ + _11.a = 1.0; + patchOut.P_b = 2.0; + gl_out[gl_InvocationID].C_a = 3.0; + gl_out[gl_InvocationID].C_b = 4.0; + gl_out[gl_InvocationID].gl_Position = float4(1.0); +} + +kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_PrimitiveID [[threadgroup_position_in_grid]], device main0_out* spvOut [[buffer(28)]], constant uint* spvIndirectParams [[buffer(29)]], device main0_patchOut* spvPatchOut [[buffer(27)]], device MTLQuadTessellationFactorsHalf* spvTessLevel [[buffer(26)]]) +{ + threadgroup P _11; + device main0_out* gl_out = &spvOut[gl_PrimitiveID * 4]; + device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID]; + write_in_function(_11, patchOut, gl_out, gl_InvocationID); +} + diff --git a/reference/shaders-msl/masking/write-outputs-block.mask-location-1.msl2.tesc b/reference/shaders-msl/masking/write-outputs-block.mask-location-1.msl2.tesc new file mode 100644 index 00000000..e40fa2d6 --- /dev/null +++ b/reference/shaders-msl/masking/write-outputs-block.mask-location-1.msl2.tesc @@ -0,0 +1,49 @@ +#pragma clang diagnostic ignored "-Wmissing-prototypes" + +#include <metal_stdlib> +#include <simd/simd.h> + +using namespace metal; + +struct P +{ + float a; + float b; +}; + +struct C +{ + float a; + float b; +}; + +struct main0_out +{ + float C_b; + float4 gl_Position; +}; + +struct main0_patchOut +{ + float P_a; + float P_b; +}; + +static inline __attribute__((always_inline)) +void write_in_function(device main0_patchOut& patchOut, threadgroup C (&c)[4], device main0_out* thread & gl_out, thread uint& gl_InvocationID) +{ + patchOut.P_a = 1.0; + patchOut.P_b = 2.0; + c[gl_InvocationID].a = 3.0; + gl_out[gl_InvocationID].C_b = 4.0; + gl_out[gl_InvocationID].gl_Position = float4(1.0); +} + +kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_PrimitiveID [[threadgroup_position_in_grid]], device main0_out* spvOut [[buffer(28)]], constant uint* spvIndirectParams [[buffer(29)]], device main0_patchOut* spvPatchOut [[buffer(27)]], device MTLQuadTessellationFactorsHalf* spvTessLevel [[buffer(26)]]) +{ + threadgroup C c[4]; + device main0_out* gl_out = &spvOut[gl_PrimitiveID * 4]; + device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID]; + write_in_function(patchOut, c, gl_out, gl_InvocationID); +} + |