diff options
Diffstat (limited to '3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/composite-construct.comp')
-rw-r--r-- | 3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/composite-construct.comp | 95 |
1 files changed, 40 insertions, 55 deletions
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/composite-construct.comp b/3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/composite-construct.comp index 17dbb8fd8ba..09e6fc7d959 100644 --- a/3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/composite-construct.comp +++ b/3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/composite-construct.comp @@ -1,81 +1,66 @@ #pragma clang diagnostic ignored "-Wmissing-prototypes" +#pragma clang diagnostic ignored "-Wmissing-braces" #include <metal_stdlib> #include <simd/simd.h> using namespace metal; -struct SSBO0 -{ - float4 as[1]; -}; - -struct SSBO1 -{ - float4 bs[1]; -}; - -constant uint3 gl_WorkGroupSize [[maybe_unused]] = uint3(1u); - -template<typename T, uint A> -inline void spvArrayCopyFromConstantToStack1(thread T (&dst)[A], constant T (&src)[A]) +template<typename T, size_t Num> +struct spvUnsafeArray { - for (uint i = 0; i < A; i++) + T elements[Num ? Num : 1]; + + thread T& operator [] (size_t pos) thread { - dst[i] = src[i]; + return elements[pos]; } -} - -template<typename T, uint A> -inline void spvArrayCopyFromConstantToThreadGroup1(threadgroup T (&dst)[A], constant T (&src)[A]) -{ - for (uint i = 0; i < A; i++) + constexpr const thread T& operator [] (size_t pos) const thread { - dst[i] = src[i]; + return elements[pos]; } -} - -template<typename T, uint A> -inline void spvArrayCopyFromStackToStack1(thread T (&dst)[A], thread const T (&src)[A]) -{ - for (uint i = 0; i < A; i++) + + device T& operator [] (size_t pos) device { - dst[i] = src[i]; + return elements[pos]; } -} - -template<typename T, uint A> -inline void spvArrayCopyFromStackToThreadGroup1(threadgroup T (&dst)[A], thread const T (&src)[A]) -{ - for (uint i = 0; i < A; i++) + constexpr const device T& operator [] (size_t pos) const device { - dst[i] = src[i]; + return elements[pos]; } -} - -template<typename T, uint A> -inline void spvArrayCopyFromThreadGroupToStack1(thread T (&dst)[A], threadgroup const T (&src)[A]) -{ - for (uint i = 0; i < A; i++) + + constexpr const constant T& operator [] (size_t pos) const constant { - dst[i] = src[i]; + return elements[pos]; } -} - -template<typename T, uint A> -inline void spvArrayCopyFromThreadGroupToThreadGroup1(threadgroup T (&dst)[A], threadgroup const T (&src)[A]) -{ - for (uint i = 0; i < A; i++) + + threadgroup T& operator [] (size_t pos) threadgroup { - dst[i] = src[i]; + return elements[pos]; } -} + constexpr const threadgroup T& operator [] (size_t pos) const threadgroup + { + return elements[pos]; + } +}; + +struct SSBO0 +{ + float4 as[1]; +}; + +struct SSBO1 +{ + float4 bs[1]; +}; + +constant uint3 gl_WorkGroupSize [[maybe_unused]] = uint3(1u); kernel void main0(device SSBO0& _16 [[buffer(0)]], device SSBO1& _32 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint gl_LocalInvocationIndex [[thread_index_in_threadgroup]]) { - float4 _37[2] = { _16.as[gl_GlobalInvocationID.x], _32.bs[gl_GlobalInvocationID.x] }; - float4 values[2]; - spvArrayCopyFromStackToStack1(values, _37); + spvUnsafeArray<float4, 2> _37 = spvUnsafeArray<float4, 2>({ _16.as[gl_GlobalInvocationID.x], _32.bs[gl_GlobalInvocationID.x] }); + spvUnsafeArray<float4, 2> values; + values = _37; _16.as[0] = values[gl_LocalInvocationIndex]; _32.bs[1] = float4(40.0); } |