diff options
Diffstat (limited to '3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vert/pass-array-by-value.vert')
-rw-r--r-- | 3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vert/pass-array-by-value.vert | 110 |
1 files changed, 48 insertions, 62 deletions
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vert/pass-array-by-value.vert b/3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vert/pass-array-by-value.vert index 5fc73a3a3db..f6e3efbecf7 100644 --- a/3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vert/pass-array-by-value.vert +++ b/3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vert/pass-array-by-value.vert @@ -1,101 +1,87 @@ #pragma clang diagnostic ignored "-Wmissing-prototypes" +#pragma clang diagnostic ignored "-Wmissing-braces" #include <metal_stdlib> #include <simd/simd.h> using namespace metal; -constant float4 _68[4] = { float4(0.0), float4(1.0), float4(2.0), float4(3.0) }; - -struct main0_out -{ - float4 gl_Position [[position]]; -}; - -struct main0_in -{ - int Index1 [[attribute(0)]]; - int Index2 [[attribute(1)]]; -}; - -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]; + } +}; + +constant spvUnsafeArray<float4, 4> _68 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(1.0), float4(2.0), float4(3.0) }); + +struct main0_out +{ + float4 gl_Position [[position]]; +}; + +struct main0_in +{ + int Index1 [[attribute(0)]]; + int Index2 [[attribute(1)]]; +}; -inline float4 consume_constant_arrays2(thread const float4 (&positions)[4], thread const float4 (&positions2)[4], thread int& Index1, thread int& Index2) +static inline __attribute__((always_inline)) +float4 consume_constant_arrays2(spvUnsafeArray<float4, 4> positions, spvUnsafeArray<float4, 4> positions2, thread int& Index1, thread int& Index2) { - float4 indexable[4]; - spvArrayCopyFromStackToStack1(indexable, positions); - float4 indexable_1[4]; - spvArrayCopyFromStackToStack1(indexable_1, positions2); + spvUnsafeArray<float4, 4> indexable; + indexable = positions; + spvUnsafeArray<float4, 4> indexable_1; + indexable_1 = positions2; return indexable[Index1] + indexable_1[Index2]; } -inline float4 consume_constant_arrays(thread const float4 (&positions)[4], thread const float4 (&positions2)[4], thread int& Index1, thread int& Index2) +static inline __attribute__((always_inline)) +float4 consume_constant_arrays(spvUnsafeArray<float4, 4> positions, spvUnsafeArray<float4, 4> positions2, thread int& Index1, thread int& Index2) { return consume_constant_arrays2(positions, positions2, Index1, Index2); } vertex main0_out main0(main0_in in [[stage_in]]) { - float4 _68_array_copy[4] = { float4(0.0), float4(1.0), float4(2.0), float4(3.0) }; main0_out out = {}; - float4 LUT2[4]; + spvUnsafeArray<float4, 4> LUT2; LUT2[0] = float4(10.0); LUT2[1] = float4(11.0); LUT2[2] = float4(12.0); LUT2[3] = float4(13.0); - out.gl_Position = consume_constant_arrays(_68_array_copy, LUT2, in.Index1, in.Index2); + out.gl_Position = consume_constant_arrays(_68, LUT2, in.Index1, in.Index2); return out; } |