• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#pragma clang diagnostic ignored "-Wmissing-prototypes"
2#pragma clang diagnostic ignored "-Wmissing-braces"
3
4#include <metal_stdlib>
5#include <simd/simd.h>
6
7using namespace metal;
8
9template<typename T, size_t Num>
10struct spvUnsafeArray
11{
12    T elements[Num ? Num : 1];
13
14    thread T& operator [] (size_t pos) thread
15    {
16        return elements[pos];
17    }
18    constexpr const thread T& operator [] (size_t pos) const thread
19    {
20        return elements[pos];
21    }
22
23    device T& operator [] (size_t pos) device
24    {
25        return elements[pos];
26    }
27    constexpr const device T& operator [] (size_t pos) const device
28    {
29        return elements[pos];
30    }
31
32    constexpr const constant T& operator [] (size_t pos) const constant
33    {
34        return elements[pos];
35    }
36
37    threadgroup T& operator [] (size_t pos) threadgroup
38    {
39        return elements[pos];
40    }
41    constexpr const threadgroup T& operator [] (size_t pos) const threadgroup
42    {
43        return elements[pos];
44    }
45};
46
47struct _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex
48{
49    float4 _RESERVED_IDENTIFIER_FIXUP_gl_Position;
50    float _RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
51    spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
52    spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
53};
54
55constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
56constant spvUnsafeArray<float, 1> _45 = spvUnsafeArray<float, 1>({ 0.0 });
57constant spvUnsafeArray<float, 1> _46 = spvUnsafeArray<float, 1>({ 0.0 });
58
59struct main0_out
60{
61    float4 gl_Position;
62    float gl_PointSize;
63    spvUnsafeArray<float, 1> gl_ClipDistance;
64    spvUnsafeArray<float, 1> gl_CullDistance;
65};
66
67struct main0_patchOut
68{
69    float4 foo_patch;
70};
71
72kernel void main0(uint3 gl_GlobalInvocationID [[thread_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)]])
73{
74    spvUnsafeArray<_RESERVED_IDENTIFIER_FIXUP_gl_PerVertex, 4> _29 = spvUnsafeArray<_RESERVED_IDENTIFIER_FIXUP_gl_PerVertex, 4>({ _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex{ float4(0.0), 0.0, spvUnsafeArray<float, 1>({ 0.0 }), spvUnsafeArray<float, 1>({ 0.0 }) }, _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex{ float4(0.0), 0.0, spvUnsafeArray<float, 1>({ 0.0 }), spvUnsafeArray<float, 1>({ 0.0 }) }, _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex{ float4(0.0), 0.0, spvUnsafeArray<float, 1>({ 0.0 }), spvUnsafeArray<float, 1>({ 0.0 }) }, _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex{ float4(0.0), 0.0, spvUnsafeArray<float, 1>({ 0.0 }), spvUnsafeArray<float, 1>({ 0.0 }) } });
75
76    device main0_out* gl_out = &spvOut[gl_GlobalInvocationID.x - gl_GlobalInvocationID.x % 4];
77    threadgroup float4 spvStoragefoo[8][4];
78    threadgroup float4 (&foo)[4] = spvStoragefoo[(gl_GlobalInvocationID.x / 4) % 8];
79    foo[gl_GlobalInvocationID.x % 4] = _15[gl_GlobalInvocationID.x % 4];
80    gl_out[gl_GlobalInvocationID.x % 4].gl_Position = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_Position;
81    gl_out[gl_GlobalInvocationID.x % 4].gl_PointSize = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
82    gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
83    gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
84    device main0_patchOut& patchOut = spvPatchOut[gl_GlobalInvocationID.x / 4];
85    patchOut.foo_patch = float4(0.0);
86    uint gl_InvocationID = gl_GlobalInvocationID.x % 4;
87    uint gl_PrimitiveID = min(gl_GlobalInvocationID.x / 4, spvIndirectParams[1] - 1);
88    foo[gl_InvocationID] = float4(1.0);
89    patchOut.foo_patch = float4(2.0);
90    gl_out[gl_InvocationID].gl_Position = float4(3.0);
91    gl_out[gl_InvocationID].gl_PointSize = 4.0;
92}
93
94