diff --git a/deps/SPIRV-Cross/checkout_glslang_spirv_tools.sh b/deps/SPIRV-Cross/checkout_glslang_spirv_tools.sh old mode 100644 new mode 100755 diff --git a/deps/SPIRV-Cross/reference/opt/shaders-hlsl/frag/constant-composites.frag b/deps/SPIRV-Cross/reference/opt/shaders-hlsl/frag/constant-composites.frag new file mode 100644 index 0000000000..0514eef1ee --- /dev/null +++ b/deps/SPIRV-Cross/reference/opt/shaders-hlsl/frag/constant-composites.frag @@ -0,0 +1,43 @@ +struct Foo +{ + float a; + float b; +}; + +static const float _16[4] = { 1.0f, 4.0f, 3.0f, 2.0f }; +static const Foo _24 = { 10.0f, 20.0f }; +static const Foo _27 = { 30.0f, 40.0f }; +static const Foo _28[2] = { { 10.0f, 20.0f }, { 30.0f, 40.0f } }; + +static float4 FragColor; +static int _line; + +struct SPIRV_Cross_Input +{ + nointerpolation int _line : TEXCOORD0; +}; + +struct SPIRV_Cross_Output +{ + float4 FragColor : SV_Target0; +}; + +static float lut[4]; +static Foo foos[2]; + +void frag_main() +{ + lut = _16; + foos = _28; + FragColor = lut[_line].xxxx; + FragColor += (foos[_line].a * (foos[1 - _line].a)).xxxx; +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) +{ + _line = stage_input._line; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.FragColor = FragColor; + return stage_output; +} diff --git a/deps/SPIRV-Cross/reference/opt/shaders-hlsl/frag/texture-size-combined-image-sampler.frag b/deps/SPIRV-Cross/reference/opt/shaders-hlsl/frag/texture-size-combined-image-sampler.frag new file mode 100644 index 0000000000..d5c373746d --- /dev/null +++ b/deps/SPIRV-Cross/reference/opt/shaders-hlsl/frag/texture-size-combined-image-sampler.frag @@ -0,0 +1,30 @@ +Texture2D uTex : register(t0); +SamplerState uSampler : register(s1); + +static int2 FooOut; + +struct SPIRV_Cross_Output +{ + int2 FooOut : SV_Target0; +}; + +uint2 SPIRV_Cross_textureSize(Texture2D Tex, uint Level, out uint Param) +{ + uint2 ret; + Tex.GetDimensions(Level, ret.x, ret.y, Param); + return ret; +} + +void frag_main() +{ + uint _23_dummy_parameter; + FooOut = int2(SPIRV_Cross_textureSize(uTex, uint(0), _23_dummy_parameter)); +} + +SPIRV_Cross_Output main() +{ + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.FooOut = FooOut; + return stage_output; +} diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/comp/storage-buffer-basic.asm.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/comp/storage-buffer-basic.asm.comp index 1dff618b3a..3df6161fc2 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/comp/storage-buffer-basic.asm.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/comp/storage-buffer-basic.asm.comp @@ -14,7 +14,7 @@ struct _6 float _m0[1]; }; -kernel void main0(uint3 gl_WorkGroupID [[threadgroup_position_in_grid]], device _6& _8 [[buffer(0)]], device _6& _9 [[buffer(1)]]) +kernel void main0(device _6& _8 [[buffer(0)]], device _6& _9 [[buffer(1)]], uint3 gl_WorkGroupID [[threadgroup_position_in_grid]]) { _8._m0[gl_WorkGroupID.x] = _9._m0[gl_WorkGroupID.x] + _8._m0[gl_WorkGroupID.x]; } diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/frag/inliner-dominator-inside-loop.asm.frag b/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/frag/inliner-dominator-inside-loop.asm.frag index 98a1674865..2ac8cbe015 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/frag/inliner-dominator-inside-loop.asm.frag +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/frag/inliner-dominator-inside-loop.asm.frag @@ -101,7 +101,7 @@ struct main0_out float4 _entryPointOutput [[color(0)]]; }; -fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[position]], constant CB0& _19 [[buffer(0)]], texture3d LightMapTexture [[texture(0)]], sampler LightMapSampler [[sampler(0)]], sampler ShadowMapSampler [[sampler(1)]], texture2d ShadowMapTexture [[texture(1)]], texturecube EnvironmentMapTexture [[texture(2)]], sampler EnvironmentMapSampler [[sampler(2)]], sampler DiffuseMapSampler [[sampler(3)]], texture2d DiffuseMapTexture [[texture(3)]], sampler NormalMapSampler [[sampler(4)]], texture2d NormalMapTexture [[texture(4)]], texture2d NormalDetailMapTexture [[texture(5)]], sampler NormalDetailMapSampler [[sampler(5)]], texture2d StudsMapTexture [[texture(6)]], sampler StudsMapSampler [[sampler(6)]], sampler SpecularMapSampler [[sampler(7)]], texture2d SpecularMapTexture [[texture(7)]]) +fragment main0_out main0(main0_in in [[stage_in]], constant CB0& _19 [[buffer(0)]], texture3d LightMapTexture [[texture(0)]], texture2d ShadowMapTexture [[texture(1)]], texturecube EnvironmentMapTexture [[texture(2)]], texture2d DiffuseMapTexture [[texture(3)]], texture2d NormalMapTexture [[texture(4)]], texture2d NormalDetailMapTexture [[texture(5)]], texture2d StudsMapTexture [[texture(6)]], texture2d SpecularMapTexture [[texture(7)]], sampler LightMapSampler [[sampler(0)]], sampler ShadowMapSampler [[sampler(1)]], sampler EnvironmentMapSampler [[sampler(2)]], sampler DiffuseMapSampler [[sampler(3)]], sampler NormalMapSampler [[sampler(4)]], sampler NormalDetailMapSampler [[sampler(5)]], sampler StudsMapSampler [[sampler(6)]], sampler SpecularMapSampler [[sampler(7)]], float4 gl_FragCoord [[position]]) { main0_out out = {}; VertexOutput _128 = _121; diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag b/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag index 17cd528d41..97daea5d90 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag @@ -95,7 +95,7 @@ struct main0_out float4 m_5 [[color(0)]]; }; -fragment main0_out main0(float4 gl_FragCoord [[position]], constant _6& _7 [[buffer(0)]], texture2d _8 [[texture(0)]], sampler _9 [[sampler(0)]], constant _10& _11 [[buffer(1)]], texture2d _12 [[texture(1)]], sampler _13 [[sampler(1)]], texture2d _14 [[texture(2)]], sampler _15 [[sampler(2)]], constant _18& _19 [[buffer(2)]]) +fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buffer(1)]], constant _18& _19 [[buffer(2)]], texture2d _8 [[texture(0)]], texture2d _12 [[texture(1)]], texture2d _14 [[texture(2)]], sampler _9 [[sampler(0)]], sampler _13 [[sampler(1)]], sampler _15 [[sampler(2)]], float4 gl_FragCoord [[position]]) { main0_out out = {}; _28 _77 = _74; diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/basic.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/basic.comp index 363c207186..c41f7c0acf 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/basic.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/basic.comp @@ -21,7 +21,7 @@ struct SSBO3 uint counter; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _23 [[buffer(0)]], device SSBO2& _45 [[buffer(1)]], device SSBO3& _48 [[buffer(2)]]) +kernel void main0(device SSBO& _23 [[buffer(0)]], device SSBO2& _45 [[buffer(1)]], device SSBO3& _48 [[buffer(2)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { float4 _29 = _23.in_data[gl_GlobalInvocationID.x]; if (dot(_29, float4(1.0, 5.0, 6.0, 2.0)) > 8.19999980926513671875) diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/culling.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/culling.comp index 64127d2c26..b20480bb45 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/culling.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/culling.comp @@ -23,7 +23,7 @@ struct SSBO3 uint count; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _22 [[buffer(0)]], device SSBO2& _38 [[buffer(1)]], device SSBO3& _41 [[buffer(2)]]) +kernel void main0(device SSBO& _22 [[buffer(0)]], device SSBO2& _38 [[buffer(1)]], device SSBO3& _41 [[buffer(2)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { float _28 = _22.in_data[gl_GlobalInvocationID.x]; if (_28 > 12.0) diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/dowhile.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/dowhile.comp index fca434d9a4..d76ca819c4 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/dowhile.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/dowhile.comp @@ -14,7 +14,7 @@ struct SSBO2 float4 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _28 [[buffer(0)]], device SSBO2& _52 [[buffer(1)]]) +kernel void main0(device SSBO& _28 [[buffer(0)]], device SSBO2& _52 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { int i = 0; float4 _56; diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/image.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/image.comp index edccd31bc9..d615fb2736 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/image.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/image.comp @@ -3,7 +3,7 @@ using namespace metal; -kernel void main0(texture2d uImageIn [[texture(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], texture2d uImageOut [[texture(1)]]) +kernel void main0(texture2d uImageIn [[texture(0)]], texture2d uImageOut [[texture(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uImageOut.write(uImageIn.read(uint2((int2(gl_GlobalInvocationID.xy) + int2(uImageIn.get_width(), uImageIn.get_height())))), uint2(int2(gl_GlobalInvocationID.xy))); } diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/loop.noopt.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/loop.noopt.comp index 55d850d191..00ed570b31 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/loop.noopt.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/loop.noopt.comp @@ -14,7 +14,7 @@ struct SSBO2 float4 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _24 [[buffer(0)]], device SSBO2& _177 [[buffer(1)]]) +kernel void main0(device SSBO& _24 [[buffer(0)]], device SSBO2& _177 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; float4 idat = _24.in_data[ident]; diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/mat3.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/mat3.comp index e466d25f97..72f08dd85e 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/mat3.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/mat3.comp @@ -8,7 +8,7 @@ struct SSBO2 float3x3 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO2& _22 [[buffer(0)]]) +kernel void main0(device SSBO2& _22 [[buffer(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { _22.out_data[gl_GlobalInvocationID.x] = float3x3(float3(10.0), float3(20.0), float3(40.0)); } diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/mod.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/mod.comp index 01dc6726ed..86bde9c27d 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/mod.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/mod.comp @@ -22,7 +22,7 @@ Tx mod(Tx x, Ty y) return x - y * floor(x / y); } -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _23 [[buffer(0)]], device SSBO2& _33 [[buffer(1)]]) +kernel void main0(device SSBO& _23 [[buffer(0)]], device SSBO2& _33 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { _33.out_data[gl_GlobalInvocationID.x] = mod(_23.in_data[gl_GlobalInvocationID.x], _33.out_data[gl_GlobalInvocationID.x]); _33.out_data[gl_GlobalInvocationID.x] = as_type(as_type(_23.in_data[gl_GlobalInvocationID.x]) % as_type(_33.out_data[gl_GlobalInvocationID.x])); diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/modf.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/modf.comp index 3a4cfd6975..40cbb40cea 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/modf.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/modf.comp @@ -13,7 +13,7 @@ struct SSBO2 float4 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _23 [[buffer(0)]], device SSBO2& _35 [[buffer(1)]]) +kernel void main0(device SSBO& _23 [[buffer(0)]], device SSBO2& _35 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { float4 i; float4 _31 = modf(_23.in_data[gl_GlobalInvocationID.x], i); diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/return.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/return.comp index eaa25c5c7b..06ce8d7662 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/return.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/return.comp @@ -10,7 +10,7 @@ struct SSBO2 constant int _69 = {}; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO2& _27 [[buffer(0)]]) +kernel void main0(device SSBO2& _27 [[buffer(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { if (gl_GlobalInvocationID.x == 2u) { diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/shared-array-of-arrays.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/shared-array-of-arrays.comp new file mode 100644 index 0000000000..db1ffebf2b --- /dev/null +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/shared-array-of-arrays.comp @@ -0,0 +1,20 @@ +#include +#include + +using namespace metal; + +constant uint3 gl_WorkGroupSize = uint3(4u, 4u, 1u); + +struct SSBO +{ + float out_data[1]; +}; + +kernel void main0(device SSBO& _67 [[buffer(0)]], uint3 gl_LocalInvocationID [[thread_position_in_threadgroup]], uint gl_LocalInvocationIndex [[thread_index_in_threadgroup]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) +{ + threadgroup float foo[4][4]; + foo[gl_LocalInvocationID.x][gl_LocalInvocationID.y] = float(gl_LocalInvocationIndex); + threadgroup_barrier(mem_flags::mem_threadgroup); + _67.out_data[gl_GlobalInvocationID.x] = (((0.0 + foo[gl_LocalInvocationID.x][0]) + foo[gl_LocalInvocationID.x][1]) + foo[gl_LocalInvocationID.x][2]) + foo[gl_LocalInvocationID.x][3]; +} + diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/shared.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/shared.comp index 7408e3ecb1..ef82961e2b 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/shared.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/shared.comp @@ -15,7 +15,7 @@ struct SSBO2 float out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _22 [[buffer(0)]], uint gl_LocalInvocationIndex [[thread_index_in_threadgroup]], device SSBO2& _44 [[buffer(1)]]) +kernel void main0(device SSBO& _22 [[buffer(0)]], device SSBO2& _44 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint gl_LocalInvocationIndex [[thread_index_in_threadgroup]]) { threadgroup float sShared[4]; sShared[gl_LocalInvocationIndex] = _22.in_data[gl_GlobalInvocationID.x]; diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/struct-layout.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/struct-layout.comp index 28e81e7361..aa11cc966a 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/struct-layout.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/struct-layout.comp @@ -18,7 +18,7 @@ struct SSBO Foo in_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO2& _23 [[buffer(0)]], device SSBO& _30 [[buffer(1)]]) +kernel void main0(device SSBO2& _23 [[buffer(0)]], device SSBO& _30 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { _23.out_data[gl_GlobalInvocationID.x].m = _30.in_data[gl_GlobalInvocationID.x].m * _30.in_data[gl_GlobalInvocationID.x].m; } diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/torture-loop.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/torture-loop.comp index 47acff93b0..1b239550e1 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/torture-loop.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/torture-loop.comp @@ -16,15 +16,15 @@ struct SSBO2 constant uint _98 = {}; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _24 [[buffer(0)]], device SSBO2& _89 [[buffer(1)]]) +kernel void main0(device SSBO& _24 [[buffer(0)]], device SSBO2& _89 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { float4 _93; int _94; _93 = _24.in_data[gl_GlobalInvocationID.x]; _94 = 0; - int _48; int _40; float4 _46; + int _48; for (;;) { _40 = _94 + 1; diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/type-alias.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/type-alias.comp index 167d4370c0..02e23e733e 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/type-alias.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/type-alias.comp @@ -28,7 +28,7 @@ struct SSBO2 float4 outputs[1]; }; -kernel void main0(device SSBO0& _36 [[buffer(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO1& _55 [[buffer(1)]], device SSBO2& _66 [[buffer(2)]]) +kernel void main0(device SSBO0& _36 [[buffer(0)]], device SSBO1& _55 [[buffer(1)]], device SSBO2& _66 [[buffer(2)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { _66.outputs[gl_GlobalInvocationID.x] = _36.s0s[gl_GlobalInvocationID.x].a + _55.s1s[gl_GlobalInvocationID.x].a; } diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/udiv.comp b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/udiv.comp index ed82369b99..32874ad787 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/udiv.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/comp/udiv.comp @@ -13,7 +13,7 @@ struct SSBO uint inputs[1]; }; -kernel void main0(device SSBO2& _10 [[buffer(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _23 [[buffer(1)]]) +kernel void main0(device SSBO2& _10 [[buffer(0)]], device SSBO& _23 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { _10.outputs[gl_GlobalInvocationID.x] = _23.inputs[gl_GlobalInvocationID.x] / 29u; } diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag b/deps/SPIRV-Cross/reference/opt/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag index 4d2eee11c5..937e27465e 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag @@ -8,7 +8,7 @@ struct main0_out float4 FragColor [[color(0)]]; }; -fragment main0_out main0(texture2d_ms uSampler [[texture(0)]], sampler uSamplerSmplr [[sampler(0)]], texture2d_ms uSamplerArray [[texture(1)]], sampler uSamplerArraySmplr [[sampler(1)]], texture2d_ms uImage [[texture(2)]], texture2d_ms uImageArray [[texture(3)]]) +fragment main0_out main0(texture2d_ms uSampler [[texture(0)]], texture2d_ms uSamplerArray [[texture(1)]], texture2d_ms uImage [[texture(2)]], texture2d_ms uImageArray [[texture(3)]], sampler uSamplerSmplr [[sampler(0)]], sampler uSamplerArraySmplr [[sampler(1)]]) { main0_out out = {}; out.FragColor = float4(float(((int(uSampler.get_num_samples()) + int(uSamplerArray.get_num_samples())) + int(uImage.get_num_samples())) + int(uImageArray.get_num_samples()))); diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/bitcasting.frag b/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/bitcasting.frag index 8a7f750f90..659d320e9f 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/bitcasting.frag +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/bitcasting.frag @@ -14,7 +14,7 @@ struct main0_out float4 FragColor1 [[color(1)]]; }; -fragment main0_out main0(main0_in in [[stage_in]], texture2d TextureBase [[texture(0)]], sampler TextureBaseSmplr [[sampler(0)]], texture2d TextureDetail [[texture(1)]], sampler TextureDetailSmplr [[sampler(1)]]) +fragment main0_out main0(main0_in in [[stage_in]], texture2d TextureBase [[texture(0)]], texture2d TextureDetail [[texture(1)]], sampler TextureBaseSmplr [[sampler(0)]], sampler TextureDetailSmplr [[sampler(1)]]) { main0_out out = {}; float4 _20 = TextureBase.sample(TextureBaseSmplr, in.VertGeom.xy); diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/constant-composites.frag b/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/constant-composites.frag new file mode 100644 index 0000000000..1962db1752 --- /dev/null +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/constant-composites.frag @@ -0,0 +1,31 @@ +#include +#include + +using namespace metal; + +struct Foo +{ + float a; + float b; +}; + +struct main0_in +{ + int line [[user(locn0)]]; +}; + +struct main0_out +{ + float4 FragColor [[color(0)]]; +}; + +fragment main0_out main0(main0_in in [[stage_in]]) +{ + main0_out out = {}; + float lut[4] = {1.0, 4.0, 3.0, 2.0}; + Foo foos[2] = {{10.0, 20.0}, {30.0, 40.0}}; + out.FragColor = float4(lut[in.line]); + out.FragColor += float4(foos[in.line].a * (foos[1 - in.line].a)); + return out; +} + diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/sampler-ms.frag b/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/sampler-ms.frag index 5fcb3bcbfb..8245ed8263 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/sampler-ms.frag +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/sampler-ms.frag @@ -8,7 +8,7 @@ struct main0_out float4 FragColor [[color(0)]]; }; -fragment main0_out main0(float4 gl_FragCoord [[position]], texture2d_ms uSampler [[texture(0)]], sampler uSamplerSmplr [[sampler(0)]]) +fragment main0_out main0(texture2d_ms uSampler [[texture(0)]], sampler uSamplerSmplr [[sampler(0)]], float4 gl_FragCoord [[position]]) { main0_out out = {}; int2 _17 = int2(gl_FragCoord.xy); diff --git a/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/texture-proj-shadow.frag b/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/texture-proj-shadow.frag index c31e6d9623..8b9b03a59e 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/texture-proj-shadow.frag +++ b/deps/SPIRV-Cross/reference/opt/shaders-msl/frag/texture-proj-shadow.frag @@ -15,7 +15,7 @@ struct main0_out float FragColor [[color(0)]]; }; -fragment main0_out main0(main0_in in [[stage_in]], depth2d uShadow2D [[texture(0)]], sampler uShadow2DSmplr [[sampler(0)]], texture1d uSampler1D [[texture(1)]], sampler uSampler1DSmplr [[sampler(1)]], texture2d uSampler2D [[texture(2)]], sampler uSampler2DSmplr [[sampler(2)]], texture3d uSampler3D [[texture(3)]], sampler uSampler3DSmplr [[sampler(3)]]) +fragment main0_out main0(main0_in in [[stage_in]], depth2d uShadow2D [[texture(0)]], texture1d uSampler1D [[texture(1)]], texture2d uSampler2D [[texture(2)]], texture3d uSampler3D [[texture(3)]], sampler uShadow2DSmplr [[sampler(0)]], sampler uSampler1DSmplr [[sampler(1)]], sampler uSampler2DSmplr [[sampler(2)]], sampler uSampler3DSmplr [[sampler(3)]]) { main0_out out = {}; float4 _20 = in.vClip4; diff --git a/deps/SPIRV-Cross/reference/opt/shaders/asm/frag/loop-header-to-continue.asm.frag b/deps/SPIRV-Cross/reference/opt/shaders/asm/frag/loop-header-to-continue.asm.frag new file mode 100644 index 0000000000..f3a6b4eceb --- /dev/null +++ b/deps/SPIRV-Cross/reference/opt/shaders/asm/frag/loop-header-to-continue.asm.frag @@ -0,0 +1,39 @@ +#version 450 + +struct Params +{ + vec4 TextureSize; + vec4 Params1; + vec4 Params2; + vec4 Params3; + vec4 Params4; + vec4 Bloom; +}; + +layout(binding = 1, std140) uniform CB1 +{ + Params CB1; +} _8; + +uniform sampler2D SPIRV_Cross_CombinedmapTexturemapSampler; + +layout(location = 0) in vec2 IN_uv; +layout(location = 0) out vec4 _entryPointOutput; + +void main() +{ + vec4 _49 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv); + float _50 = _49.y; + float _55; + float _58; + _55 = 0.0; + _58 = 0.0; + float _64; + vec4 _72; + float _78; + for (int _60 = -3; _60 <= 3; _64 = float(_60), _72 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv + (vec2(0.0, _8.CB1.TextureSize.w) * _64)), _78 = exp(((-_64) * _64) * 0.2222220003604888916015625) * float(abs(_72.y - _50) < clamp((_50 * 80.0) * 0.0007999999797903001308441162109375, 7.999999797903001308441162109375e-05, 0.008000000379979610443115234375)), _55 += (_72.x * _78), _58 += _78, _60++) + { + } + _entryPointOutput = vec4(_55 / _58, _50, 0.0, 1.0); +} + diff --git a/deps/SPIRV-Cross/reference/opt/shaders/comp/torture-loop.comp b/deps/SPIRV-Cross/reference/opt/shaders/comp/torture-loop.comp index 8002984f18..640142b30a 100644 --- a/deps/SPIRV-Cross/reference/opt/shaders/comp/torture-loop.comp +++ b/deps/SPIRV-Cross/reference/opt/shaders/comp/torture-loop.comp @@ -20,9 +20,9 @@ void main() int _94; _93 = _24.in_data[gl_GlobalInvocationID.x]; _94 = 0; - int _48; int _40; vec4 _46; + int _48; for (;;) { _40 = _94 + 1; diff --git a/deps/SPIRV-Cross/reference/opt/shaders/frag/constant-composites.frag b/deps/SPIRV-Cross/reference/opt/shaders/frag/constant-composites.frag new file mode 100644 index 0000000000..ab0816c3d2 --- /dev/null +++ b/deps/SPIRV-Cross/reference/opt/shaders/frag/constant-composites.frag @@ -0,0 +1,23 @@ +#version 310 es +precision mediump float; +precision highp int; + +struct Foo +{ + float a; + float b; +}; + +layout(location = 0) out vec4 FragColor; +layout(location = 0) flat in mediump int _line; +float lut[4]; +Foo foos[2]; + +void main() +{ + lut = float[](1.0, 4.0, 3.0, 2.0); + foos = Foo[](Foo(10.0, 20.0), Foo(30.0, 40.0)); + FragColor = vec4(lut[_line]); + FragColor += vec4(foos[_line].a * (foos[1 - _line].a)); +} + diff --git a/deps/SPIRV-Cross/reference/shaders-hlsl/frag/constant-composites.frag b/deps/SPIRV-Cross/reference/shaders-hlsl/frag/constant-composites.frag new file mode 100644 index 0000000000..0514eef1ee --- /dev/null +++ b/deps/SPIRV-Cross/reference/shaders-hlsl/frag/constant-composites.frag @@ -0,0 +1,43 @@ +struct Foo +{ + float a; + float b; +}; + +static const float _16[4] = { 1.0f, 4.0f, 3.0f, 2.0f }; +static const Foo _24 = { 10.0f, 20.0f }; +static const Foo _27 = { 30.0f, 40.0f }; +static const Foo _28[2] = { { 10.0f, 20.0f }, { 30.0f, 40.0f } }; + +static float4 FragColor; +static int _line; + +struct SPIRV_Cross_Input +{ + nointerpolation int _line : TEXCOORD0; +}; + +struct SPIRV_Cross_Output +{ + float4 FragColor : SV_Target0; +}; + +static float lut[4]; +static Foo foos[2]; + +void frag_main() +{ + lut = _16; + foos = _28; + FragColor = lut[_line].xxxx; + FragColor += (foos[_line].a * (foos[1 - _line].a)).xxxx; +} + +SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) +{ + _line = stage_input._line; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.FragColor = FragColor; + return stage_output; +} diff --git a/deps/SPIRV-Cross/reference/shaders-hlsl/frag/partial-write-preserve.frag b/deps/SPIRV-Cross/reference/shaders-hlsl/frag/partial-write-preserve.frag index 4ed4d42747..402c8108c1 100644 --- a/deps/SPIRV-Cross/reference/shaders-hlsl/frag/partial-write-preserve.frag +++ b/deps/SPIRV-Cross/reference/shaders-hlsl/frag/partial-write-preserve.frag @@ -4,6 +4,8 @@ struct B float b; }; +static const B _80 = { 10.0f, 20.0f }; + cbuffer _42 : register(b0) { int _42_some_value : packoffset(c0); @@ -61,7 +63,7 @@ void frag_main() float4 param_3; branchy_inout_2(param_3); a = param_3; - B b = { 10.0f, 20.0f }; + B b = _80; B param_4 = b; partial_inout(param_4); b = param_4; diff --git a/deps/SPIRV-Cross/reference/shaders-hlsl/frag/texture-size-combined-image-sampler.frag b/deps/SPIRV-Cross/reference/shaders-hlsl/frag/texture-size-combined-image-sampler.frag new file mode 100644 index 0000000000..d5c373746d --- /dev/null +++ b/deps/SPIRV-Cross/reference/shaders-hlsl/frag/texture-size-combined-image-sampler.frag @@ -0,0 +1,30 @@ +Texture2D uTex : register(t0); +SamplerState uSampler : register(s1); + +static int2 FooOut; + +struct SPIRV_Cross_Output +{ + int2 FooOut : SV_Target0; +}; + +uint2 SPIRV_Cross_textureSize(Texture2D Tex, uint Level, out uint Param) +{ + uint2 ret; + Tex.GetDimensions(Level, ret.x, ret.y, Param); + return ret; +} + +void frag_main() +{ + uint _23_dummy_parameter; + FooOut = int2(SPIRV_Cross_textureSize(uTex, uint(0), _23_dummy_parameter)); +} + +SPIRV_Cross_Output main() +{ + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.FooOut = FooOut; + return stage_output; +} diff --git a/deps/SPIRV-Cross/reference/shaders-msl-no-opt/vert/functions_nested.vert b/deps/SPIRV-Cross/reference/shaders-msl-no-opt/vert/functions_nested.vert index ff0f60dbef..aa66304682 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl-no-opt/vert/functions_nested.vert +++ b/deps/SPIRV-Cross/reference/shaders-msl-no-opt/vert/functions_nested.vert @@ -167,7 +167,7 @@ void vs_adjust(thread float4& dst_reg0, thread float4& dst_reg1, thread float4& dst_reg0.x = float4(dot(float4(tmp0.xyz, 1.0), v_309.vc[0])).x; } -vertex main0_out main0(constant VertexBuffer& v_227 [[buffer(0)]], uint gl_VertexIndex [[vertex_id]], texture2d buff_in_2 [[texture(0)]], texture2d buff_in_1 [[texture(1)]], constant VertexConstantsBuffer& v_309 [[buffer(1)]]) +vertex main0_out main0(constant VertexBuffer& v_227 [[buffer(0)]], constant VertexConstantsBuffer& v_309 [[buffer(1)]], texture2d buff_in_2 [[texture(0)]], texture2d buff_in_1 [[texture(1)]], uint gl_VertexIndex [[vertex_id]]) { main0_out out = {}; float4 dst_reg0 = float4(0.0, 0.0, 0.0, 1.0); diff --git a/deps/SPIRV-Cross/reference/shaders-msl/asm/comp/storage-buffer-basic.asm.comp b/deps/SPIRV-Cross/reference/shaders-msl/asm/comp/storage-buffer-basic.asm.comp index 19d753afa7..9e37362dbd 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/asm/comp/storage-buffer-basic.asm.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/asm/comp/storage-buffer-basic.asm.comp @@ -14,7 +14,7 @@ struct _6 float _m0[1]; }; -kernel void main0(uint3 gl_WorkGroupID [[threadgroup_position_in_grid]], device _6& _8 [[buffer(0)]], device _6& _9 [[buffer(1)]]) +kernel void main0(device _6& _8 [[buffer(0)]], device _6& _9 [[buffer(1)]], uint3 gl_WorkGroupID [[threadgroup_position_in_grid]]) { uint3 _23 = gl_WorkGroupSize; _8._m0[gl_WorkGroupID.x] = _9._m0[gl_WorkGroupID.x] + _8._m0[gl_WorkGroupID.x]; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/asm/frag/inliner-dominator-inside-loop.asm.frag b/deps/SPIRV-Cross/reference/shaders-msl/asm/frag/inliner-dominator-inside-loop.asm.frag index 98a1674865..2ac8cbe015 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/asm/frag/inliner-dominator-inside-loop.asm.frag +++ b/deps/SPIRV-Cross/reference/shaders-msl/asm/frag/inliner-dominator-inside-loop.asm.frag @@ -101,7 +101,7 @@ struct main0_out float4 _entryPointOutput [[color(0)]]; }; -fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[position]], constant CB0& _19 [[buffer(0)]], texture3d LightMapTexture [[texture(0)]], sampler LightMapSampler [[sampler(0)]], sampler ShadowMapSampler [[sampler(1)]], texture2d ShadowMapTexture [[texture(1)]], texturecube EnvironmentMapTexture [[texture(2)]], sampler EnvironmentMapSampler [[sampler(2)]], sampler DiffuseMapSampler [[sampler(3)]], texture2d DiffuseMapTexture [[texture(3)]], sampler NormalMapSampler [[sampler(4)]], texture2d NormalMapTexture [[texture(4)]], texture2d NormalDetailMapTexture [[texture(5)]], sampler NormalDetailMapSampler [[sampler(5)]], texture2d StudsMapTexture [[texture(6)]], sampler StudsMapSampler [[sampler(6)]], sampler SpecularMapSampler [[sampler(7)]], texture2d SpecularMapTexture [[texture(7)]]) +fragment main0_out main0(main0_in in [[stage_in]], constant CB0& _19 [[buffer(0)]], texture3d LightMapTexture [[texture(0)]], texture2d ShadowMapTexture [[texture(1)]], texturecube EnvironmentMapTexture [[texture(2)]], texture2d DiffuseMapTexture [[texture(3)]], texture2d NormalMapTexture [[texture(4)]], texture2d NormalDetailMapTexture [[texture(5)]], texture2d StudsMapTexture [[texture(6)]], texture2d SpecularMapTexture [[texture(7)]], sampler LightMapSampler [[sampler(0)]], sampler ShadowMapSampler [[sampler(1)]], sampler EnvironmentMapSampler [[sampler(2)]], sampler DiffuseMapSampler [[sampler(3)]], sampler NormalMapSampler [[sampler(4)]], sampler NormalDetailMapSampler [[sampler(5)]], sampler StudsMapSampler [[sampler(6)]], sampler SpecularMapSampler [[sampler(7)]], float4 gl_FragCoord [[position]]) { main0_out out = {}; VertexOutput _128 = _121; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag b/deps/SPIRV-Cross/reference/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag index 17cd528d41..97daea5d90 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag +++ b/deps/SPIRV-Cross/reference/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag @@ -95,7 +95,7 @@ struct main0_out float4 m_5 [[color(0)]]; }; -fragment main0_out main0(float4 gl_FragCoord [[position]], constant _6& _7 [[buffer(0)]], texture2d _8 [[texture(0)]], sampler _9 [[sampler(0)]], constant _10& _11 [[buffer(1)]], texture2d _12 [[texture(1)]], sampler _13 [[sampler(1)]], texture2d _14 [[texture(2)]], sampler _15 [[sampler(2)]], constant _18& _19 [[buffer(2)]]) +fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buffer(1)]], constant _18& _19 [[buffer(2)]], texture2d _8 [[texture(0)]], texture2d _12 [[texture(1)]], texture2d _14 [[texture(2)]], sampler _9 [[sampler(0)]], sampler _13 [[sampler(1)]], sampler _15 [[sampler(2)]], float4 gl_FragCoord [[position]]) { main0_out out = {}; _28 _77 = _74; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/basic.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/basic.comp index 2c34c3543c..732b1cb257 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/basic.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/basic.comp @@ -21,7 +21,7 @@ struct SSBO3 uint counter; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _23 [[buffer(0)]], device SSBO2& _45 [[buffer(1)]], device SSBO3& _48 [[buffer(2)]]) +kernel void main0(device SSBO& _23 [[buffer(0)]], device SSBO2& _45 [[buffer(1)]], device SSBO3& _48 [[buffer(2)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; float4 idata = _23.in_data[ident]; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/culling.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/culling.comp index 7eb6fe864e..ef84f1d19d 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/culling.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/culling.comp @@ -23,7 +23,7 @@ struct SSBO3 uint count; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _22 [[buffer(0)]], device SSBO2& _38 [[buffer(1)]], device SSBO3& _41 [[buffer(2)]]) +kernel void main0(device SSBO& _22 [[buffer(0)]], device SSBO2& _38 [[buffer(1)]], device SSBO3& _41 [[buffer(2)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; float idata = _22.in_data[ident]; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/dowhile.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/dowhile.comp index ff772941a4..5decd415ff 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/dowhile.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/dowhile.comp @@ -14,7 +14,7 @@ struct SSBO2 float4 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _28 [[buffer(0)]], device SSBO2& _52 [[buffer(1)]]) +kernel void main0(device SSBO& _28 [[buffer(0)]], device SSBO2& _52 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; int i = 0; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/functions.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/functions.comp index 6127a39ca7..d8f6e55a46 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/functions.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/functions.comp @@ -5,7 +5,7 @@ using namespace metal; -void myfunc(threadgroup int* foo) +void myfunc(threadgroup int (&foo)[1337]) { foo[0] = 13; } diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/image.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/image.comp index 85b48da797..f3bc1455db 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/image.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/image.comp @@ -3,7 +3,7 @@ using namespace metal; -kernel void main0(texture2d uImageIn [[texture(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], texture2d uImageOut [[texture(1)]]) +kernel void main0(texture2d uImageIn [[texture(0)]], texture2d uImageOut [[texture(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { float4 v = uImageIn.read(uint2((int2(gl_GlobalInvocationID.xy) + int2(uImageIn.get_width(), uImageIn.get_height())))); uImageOut.write(v, uint2(int2(gl_GlobalInvocationID.xy))); diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/loop.noopt.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/loop.noopt.comp index 55d850d191..00ed570b31 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/loop.noopt.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/loop.noopt.comp @@ -14,7 +14,7 @@ struct SSBO2 float4 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _24 [[buffer(0)]], device SSBO2& _177 [[buffer(1)]]) +kernel void main0(device SSBO& _24 [[buffer(0)]], device SSBO2& _177 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; float4 idat = _24.in_data[ident]; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/mat3.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/mat3.comp index 4a315ce72c..c2d9a7c838 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/mat3.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/mat3.comp @@ -8,7 +8,7 @@ struct SSBO2 float3x3 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO2& _22 [[buffer(0)]]) +kernel void main0(device SSBO2& _22 [[buffer(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; _22.out_data[ident] = float3x3(float3(10.0), float3(20.0), float3(40.0)); diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/mod.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/mod.comp index 9d13a2edd2..1a8c5c5fef 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/mod.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/mod.comp @@ -22,7 +22,7 @@ Tx mod(Tx x, Ty y) return x - y * floor(x / y); } -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _23 [[buffer(0)]], device SSBO2& _33 [[buffer(1)]]) +kernel void main0(device SSBO& _23 [[buffer(0)]], device SSBO2& _33 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; float4 v = mod(_23.in_data[ident], _33.out_data[ident]); diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/modf.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/modf.comp index b358e9478c..9abd457cad 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/modf.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/modf.comp @@ -13,7 +13,7 @@ struct SSBO2 float4 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _23 [[buffer(0)]], device SSBO2& _35 [[buffer(1)]]) +kernel void main0(device SSBO& _23 [[buffer(0)]], device SSBO2& _35 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; float4 i; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/return.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/return.comp index 24e498c1f4..71fcfbe391 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/return.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/return.comp @@ -8,7 +8,7 @@ struct SSBO2 float4 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO2& _27 [[buffer(0)]]) +kernel void main0(device SSBO2& _27 [[buffer(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; if (ident == 2u) diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/shared-array-of-arrays.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/shared-array-of-arrays.comp new file mode 100644 index 0000000000..3133e5f294 --- /dev/null +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/shared-array-of-arrays.comp @@ -0,0 +1,32 @@ +#pragma clang diagnostic ignored "-Wmissing-prototypes" + +#include +#include + +using namespace metal; + +constant uint3 gl_WorkGroupSize = uint3(4u, 4u, 1u); + +struct SSBO +{ + float out_data[1]; +}; + +void work(threadgroup float (&foo)[4][4], thread uint3& gl_LocalInvocationID, thread uint& gl_LocalInvocationIndex, device SSBO& v_67, thread uint3& gl_GlobalInvocationID) +{ + foo[gl_LocalInvocationID.x][gl_LocalInvocationID.y] = float(gl_LocalInvocationIndex); + threadgroup_barrier(mem_flags::mem_threadgroup); + float x = 0.0; + x += foo[gl_LocalInvocationID.x][0]; + x += foo[gl_LocalInvocationID.x][1]; + x += foo[gl_LocalInvocationID.x][2]; + x += foo[gl_LocalInvocationID.x][3]; + v_67.out_data[gl_GlobalInvocationID.x] = x; +} + +kernel void main0(device SSBO& v_67 [[buffer(0)]], uint3 gl_LocalInvocationID [[thread_position_in_threadgroup]], uint gl_LocalInvocationIndex [[thread_index_in_threadgroup]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) +{ + threadgroup float foo[4][4]; + work(foo, gl_LocalInvocationID, gl_LocalInvocationIndex, v_67, gl_GlobalInvocationID); +} + diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/shared.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/shared.comp index 20f9538bd2..5aeaa4f8c1 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/shared.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/shared.comp @@ -15,7 +15,7 @@ struct SSBO2 float out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _22 [[buffer(0)]], uint gl_LocalInvocationIndex [[thread_index_in_threadgroup]], device SSBO2& _44 [[buffer(1)]]) +kernel void main0(device SSBO& _22 [[buffer(0)]], device SSBO2& _44 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint gl_LocalInvocationIndex [[thread_index_in_threadgroup]]) { uint ident = gl_GlobalInvocationID.x; float idata = _22.in_data[ident]; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/struct-layout.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/struct-layout.comp index 27714ef09c..6c0f929480 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/struct-layout.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/struct-layout.comp @@ -18,7 +18,7 @@ struct SSBO Foo in_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO2& _23 [[buffer(0)]], device SSBO& _30 [[buffer(1)]]) +kernel void main0(device SSBO2& _23 [[buffer(0)]], device SSBO& _30 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; _23.out_data[ident].m = _30.in_data[ident].m * _30.in_data[ident].m; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/torture-loop.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/torture-loop.comp index 759af12685..9257088161 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/torture-loop.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/torture-loop.comp @@ -14,7 +14,7 @@ struct SSBO2 float4 out_data[1]; }; -kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _24 [[buffer(0)]], device SSBO2& _89 [[buffer(1)]]) +kernel void main0(device SSBO& _24 [[buffer(0)]], device SSBO2& _89 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { uint ident = gl_GlobalInvocationID.x; float4 idat = _24.in_data[ident]; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/type-alias.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/type-alias.comp index e47c2ba946..d842132995 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/type-alias.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/type-alias.comp @@ -40,7 +40,7 @@ float4 overload(thread const S1& s1) return s1.a; } -kernel void main0(device SSBO0& _36 [[buffer(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO1& _55 [[buffer(1)]], device SSBO2& _66 [[buffer(2)]]) +kernel void main0(device SSBO0& _36 [[buffer(0)]], device SSBO1& _55 [[buffer(1)]], device SSBO2& _66 [[buffer(2)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { S0 s0; s0.a = _36.s0s[gl_GlobalInvocationID.x].a; diff --git a/deps/SPIRV-Cross/reference/shaders-msl/comp/udiv.comp b/deps/SPIRV-Cross/reference/shaders-msl/comp/udiv.comp index ed82369b99..32874ad787 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/comp/udiv.comp +++ b/deps/SPIRV-Cross/reference/shaders-msl/comp/udiv.comp @@ -13,7 +13,7 @@ struct SSBO uint inputs[1]; }; -kernel void main0(device SSBO2& _10 [[buffer(0)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _23 [[buffer(1)]]) +kernel void main0(device SSBO2& _10 [[buffer(0)]], device SSBO& _23 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { _10.outputs[gl_GlobalInvocationID.x] = _23.inputs[gl_GlobalInvocationID.x] / 29u; } diff --git a/deps/SPIRV-Cross/reference/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag b/deps/SPIRV-Cross/reference/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag index 4d2eee11c5..937e27465e 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag +++ b/deps/SPIRV-Cross/reference/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag @@ -8,7 +8,7 @@ struct main0_out float4 FragColor [[color(0)]]; }; -fragment main0_out main0(texture2d_ms uSampler [[texture(0)]], sampler uSamplerSmplr [[sampler(0)]], texture2d_ms uSamplerArray [[texture(1)]], sampler uSamplerArraySmplr [[sampler(1)]], texture2d_ms uImage [[texture(2)]], texture2d_ms uImageArray [[texture(3)]]) +fragment main0_out main0(texture2d_ms uSampler [[texture(0)]], texture2d_ms uSamplerArray [[texture(1)]], texture2d_ms uImage [[texture(2)]], texture2d_ms uImageArray [[texture(3)]], sampler uSamplerSmplr [[sampler(0)]], sampler uSamplerArraySmplr [[sampler(1)]]) { main0_out out = {}; out.FragColor = float4(float(((int(uSampler.get_num_samples()) + int(uSamplerArray.get_num_samples())) + int(uImage.get_num_samples())) + int(uImageArray.get_num_samples()))); diff --git a/deps/SPIRV-Cross/reference/shaders-msl/frag/bitcasting.frag b/deps/SPIRV-Cross/reference/shaders-msl/frag/bitcasting.frag index fcbced0efe..a2d624510f 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/frag/bitcasting.frag +++ b/deps/SPIRV-Cross/reference/shaders-msl/frag/bitcasting.frag @@ -14,7 +14,7 @@ struct main0_out float4 FragColor1 [[color(1)]]; }; -fragment main0_out main0(main0_in in [[stage_in]], texture2d TextureBase [[texture(0)]], sampler TextureBaseSmplr [[sampler(0)]], texture2d TextureDetail [[texture(1)]], sampler TextureDetailSmplr [[sampler(1)]]) +fragment main0_out main0(main0_in in [[stage_in]], texture2d TextureBase [[texture(0)]], texture2d TextureDetail [[texture(1)]], sampler TextureBaseSmplr [[sampler(0)]], sampler TextureDetailSmplr [[sampler(1)]]) { main0_out out = {}; float4 texSample0 = TextureBase.sample(TextureBaseSmplr, in.VertGeom.xy); diff --git a/deps/SPIRV-Cross/reference/shaders-msl/frag/constant-composites.frag b/deps/SPIRV-Cross/reference/shaders-msl/frag/constant-composites.frag new file mode 100644 index 0000000000..1962db1752 --- /dev/null +++ b/deps/SPIRV-Cross/reference/shaders-msl/frag/constant-composites.frag @@ -0,0 +1,31 @@ +#include +#include + +using namespace metal; + +struct Foo +{ + float a; + float b; +}; + +struct main0_in +{ + int line [[user(locn0)]]; +}; + +struct main0_out +{ + float4 FragColor [[color(0)]]; +}; + +fragment main0_out main0(main0_in in [[stage_in]]) +{ + main0_out out = {}; + float lut[4] = {1.0, 4.0, 3.0, 2.0}; + Foo foos[2] = {{10.0, 20.0}, {30.0, 40.0}}; + out.FragColor = float4(lut[in.line]); + out.FragColor += float4(foos[in.line].a * (foos[1 - in.line].a)); + return out; +} + diff --git a/deps/SPIRV-Cross/reference/shaders-msl/frag/sampler-ms.frag b/deps/SPIRV-Cross/reference/shaders-msl/frag/sampler-ms.frag index 6b5e20d720..1ceb3f96bd 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/frag/sampler-ms.frag +++ b/deps/SPIRV-Cross/reference/shaders-msl/frag/sampler-ms.frag @@ -8,7 +8,7 @@ struct main0_out float4 FragColor [[color(0)]]; }; -fragment main0_out main0(float4 gl_FragCoord [[position]], texture2d_ms uSampler [[texture(0)]], sampler uSamplerSmplr [[sampler(0)]]) +fragment main0_out main0(texture2d_ms uSampler [[texture(0)]], sampler uSamplerSmplr [[sampler(0)]], float4 gl_FragCoord [[position]]) { main0_out out = {}; int2 coord = int2(gl_FragCoord.xy); diff --git a/deps/SPIRV-Cross/reference/shaders-msl/frag/texture-proj-shadow.frag b/deps/SPIRV-Cross/reference/shaders-msl/frag/texture-proj-shadow.frag index c31e6d9623..8b9b03a59e 100644 --- a/deps/SPIRV-Cross/reference/shaders-msl/frag/texture-proj-shadow.frag +++ b/deps/SPIRV-Cross/reference/shaders-msl/frag/texture-proj-shadow.frag @@ -15,7 +15,7 @@ struct main0_out float FragColor [[color(0)]]; }; -fragment main0_out main0(main0_in in [[stage_in]], depth2d uShadow2D [[texture(0)]], sampler uShadow2DSmplr [[sampler(0)]], texture1d uSampler1D [[texture(1)]], sampler uSampler1DSmplr [[sampler(1)]], texture2d uSampler2D [[texture(2)]], sampler uSampler2DSmplr [[sampler(2)]], texture3d uSampler3D [[texture(3)]], sampler uSampler3DSmplr [[sampler(3)]]) +fragment main0_out main0(main0_in in [[stage_in]], depth2d uShadow2D [[texture(0)]], texture1d uSampler1D [[texture(1)]], texture2d uSampler2D [[texture(2)]], texture3d uSampler3D [[texture(3)]], sampler uShadow2DSmplr [[sampler(0)]], sampler uSampler1DSmplr [[sampler(1)]], sampler uSampler2DSmplr [[sampler(2)]], sampler uSampler3DSmplr [[sampler(3)]]) { main0_out out = {}; float4 _20 = in.vClip4; diff --git a/deps/SPIRV-Cross/reference/shaders/asm/frag/loop-header-to-continue.asm.frag b/deps/SPIRV-Cross/reference/shaders/asm/frag/loop-header-to-continue.asm.frag new file mode 100644 index 0000000000..f3a6b4eceb --- /dev/null +++ b/deps/SPIRV-Cross/reference/shaders/asm/frag/loop-header-to-continue.asm.frag @@ -0,0 +1,39 @@ +#version 450 + +struct Params +{ + vec4 TextureSize; + vec4 Params1; + vec4 Params2; + vec4 Params3; + vec4 Params4; + vec4 Bloom; +}; + +layout(binding = 1, std140) uniform CB1 +{ + Params CB1; +} _8; + +uniform sampler2D SPIRV_Cross_CombinedmapTexturemapSampler; + +layout(location = 0) in vec2 IN_uv; +layout(location = 0) out vec4 _entryPointOutput; + +void main() +{ + vec4 _49 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv); + float _50 = _49.y; + float _55; + float _58; + _55 = 0.0; + _58 = 0.0; + float _64; + vec4 _72; + float _78; + for (int _60 = -3; _60 <= 3; _64 = float(_60), _72 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv + (vec2(0.0, _8.CB1.TextureSize.w) * _64)), _78 = exp(((-_64) * _64) * 0.2222220003604888916015625) * float(abs(_72.y - _50) < clamp((_50 * 80.0) * 0.0007999999797903001308441162109375, 7.999999797903001308441162109375e-05, 0.008000000379979610443115234375)), _55 += (_72.x * _78), _58 += _78, _60++) + { + } + _entryPointOutput = vec4(_55 / _58, _50, 0.0, 1.0); +} + diff --git a/deps/SPIRV-Cross/reference/shaders/frag/constant-composites.frag b/deps/SPIRV-Cross/reference/shaders/frag/constant-composites.frag new file mode 100644 index 0000000000..ab0816c3d2 --- /dev/null +++ b/deps/SPIRV-Cross/reference/shaders/frag/constant-composites.frag @@ -0,0 +1,23 @@ +#version 310 es +precision mediump float; +precision highp int; + +struct Foo +{ + float a; + float b; +}; + +layout(location = 0) out vec4 FragColor; +layout(location = 0) flat in mediump int _line; +float lut[4]; +Foo foos[2]; + +void main() +{ + lut = float[](1.0, 4.0, 3.0, 2.0); + foos = Foo[](Foo(10.0, 20.0), Foo(30.0, 40.0)); + FragColor = vec4(lut[_line]); + FragColor += vec4(foos[_line].a * (foos[1 - _line].a)); +} + diff --git a/deps/SPIRV-Cross/shaders-hlsl/frag/constant-composites.frag b/deps/SPIRV-Cross/shaders-hlsl/frag/constant-composites.frag new file mode 100644 index 0000000000..a12e22ff4f --- /dev/null +++ b/deps/SPIRV-Cross/shaders-hlsl/frag/constant-composites.frag @@ -0,0 +1,20 @@ +#version 310 es +precision mediump float; + +float lut[4] = float[](1.0, 4.0, 3.0, 2.0); + +struct Foo +{ + float a; + float b; +}; +Foo foos[2] = Foo[](Foo(10.0, 20.0), Foo(30.0, 40.0)); + +layout(location = 0) out vec4 FragColor; +layout(location = 0) flat in int line; + +void main() +{ + FragColor = vec4(lut[line]); + FragColor += foos[line].a * foos[1 - line].a; +} diff --git a/deps/SPIRV-Cross/shaders-hlsl/frag/texture-size-combined-image-sampler.frag b/deps/SPIRV-Cross/shaders-hlsl/frag/texture-size-combined-image-sampler.frag new file mode 100644 index 0000000000..9488059595 --- /dev/null +++ b/deps/SPIRV-Cross/shaders-hlsl/frag/texture-size-combined-image-sampler.frag @@ -0,0 +1,9 @@ +#version 450 +layout(set = 0, binding = 0) uniform texture2D uTex; +layout(set = 0, binding = 1) uniform sampler uSampler; +layout(location = 0) out ivec2 FooOut; + +void main() +{ + FooOut = textureSize(sampler2D(uTex, uSampler), 0); +} diff --git a/deps/SPIRV-Cross/shaders-msl/comp/shared-array-of-arrays.comp b/deps/SPIRV-Cross/shaders-msl/comp/shared-array-of-arrays.comp new file mode 100644 index 0000000000..009b4e41d4 --- /dev/null +++ b/deps/SPIRV-Cross/shaders-msl/comp/shared-array-of-arrays.comp @@ -0,0 +1,29 @@ +#version 310 es +layout(local_size_x = 4, local_size_y = 4) in; + +shared float foo[4][4]; + +layout(binding = 0, std430) buffer SSBO +{ + float out_data[]; +}; + +void work() +{ + foo[gl_LocalInvocationID.x][gl_LocalInvocationID.y] = float(gl_LocalInvocationIndex); + memoryBarrierShared(); + barrier(); + + float x = 0.0; + x += foo[gl_LocalInvocationID.x][0]; + x += foo[gl_LocalInvocationID.x][1]; + x += foo[gl_LocalInvocationID.x][2]; + x += foo[gl_LocalInvocationID.x][3]; + out_data[gl_GlobalInvocationID.x] = x; +} + +void main() +{ + work(); +} + diff --git a/deps/SPIRV-Cross/shaders-msl/frag/constant-composites.frag b/deps/SPIRV-Cross/shaders-msl/frag/constant-composites.frag new file mode 100644 index 0000000000..a12e22ff4f --- /dev/null +++ b/deps/SPIRV-Cross/shaders-msl/frag/constant-composites.frag @@ -0,0 +1,20 @@ +#version 310 es +precision mediump float; + +float lut[4] = float[](1.0, 4.0, 3.0, 2.0); + +struct Foo +{ + float a; + float b; +}; +Foo foos[2] = Foo[](Foo(10.0, 20.0), Foo(30.0, 40.0)); + +layout(location = 0) out vec4 FragColor; +layout(location = 0) flat in int line; + +void main() +{ + FragColor = vec4(lut[line]); + FragColor += foos[line].a * foos[1 - line].a; +} diff --git a/deps/SPIRV-Cross/shaders/asm/frag/loop-header-to-continue.asm.frag b/deps/SPIRV-Cross/shaders/asm/frag/loop-header-to-continue.asm.frag new file mode 100644 index 0000000000..54807d911c --- /dev/null +++ b/deps/SPIRV-Cross/shaders/asm/frag/loop-header-to-continue.asm.frag @@ -0,0 +1,132 @@ +; SPIR-V +; Version: 1.0 +; Generator: Khronos Glslang Reference Front End; 3 +; Bound: 279 +; Schema: 0 + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %main "main" %IN_p %IN_uv %_entryPointOutput + OpExecutionMode %main OriginUpperLeft + OpSource HLSL 500 + OpName %main "main" + OpName %Params "Params" + OpMemberName %Params 0 "TextureSize" + OpMemberName %Params 1 "Params1" + OpMemberName %Params 2 "Params2" + OpMemberName %Params 3 "Params3" + OpMemberName %Params 4 "Params4" + OpMemberName %Params 5 "Bloom" + OpName %CB1 "CB1" + OpMemberName %CB1 0 "CB1" + OpName %_ "" + OpName %mapSampler "mapSampler" + OpName %mapTexture "mapTexture" + OpName %IN_p "IN.p" + OpName %IN_uv "IN.uv" + OpName %_entryPointOutput "@entryPointOutput" + OpMemberDecorate %Params 0 Offset 0 + OpMemberDecorate %Params 1 Offset 16 + OpMemberDecorate %Params 2 Offset 32 + OpMemberDecorate %Params 3 Offset 48 + OpMemberDecorate %Params 4 Offset 64 + OpMemberDecorate %Params 5 Offset 80 + OpMemberDecorate %CB1 0 Offset 0 + OpDecorate %CB1 Block + OpDecorate %_ DescriptorSet 0 + OpDecorate %_ Binding 1 + OpDecorate %mapSampler DescriptorSet 1 + OpDecorate %mapSampler Binding 2 + OpDecorate %mapTexture DescriptorSet 1 + OpDecorate %mapTexture Binding 2 + OpDecorate %IN_p BuiltIn FragCoord + OpDecorate %IN_uv Location 0 + OpDecorate %_entryPointOutput Location 0 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %v2float = OpTypeVector %float 2 + %9 = OpTypeSampler + %11 = OpTypeImage %float 2D 0 0 0 1 Unknown + %v4float = OpTypeVector %float 4 +%float_0_222222 = OpConstant %float 0.222222 + %33 = OpTypeSampledImage %11 + %uint = OpTypeInt 32 0 + %float_80 = OpConstant %float 80 +%float_0_0008 = OpConstant %float 0.0008 +%float_8en05 = OpConstant %float 8e-05 +%float_0_008 = OpConstant %float 0.008 + %float_0 = OpConstant %float 0 + %int = OpTypeInt 32 1 + %int_n3 = OpConstant %int -3 + %int_3 = OpConstant %int 3 + %bool = OpTypeBool + %float_1 = OpConstant %float 1 + %int_1 = OpConstant %int 1 + %Params = OpTypeStruct %v4float %v4float %v4float %v4float %v4float %v4float + %CB1 = OpTypeStruct %Params +%_ptr_Uniform_CB1 = OpTypePointer Uniform %CB1 + %_ = OpVariable %_ptr_Uniform_CB1 Uniform + %int_0 = OpConstant %int 0 + %uint_3 = OpConstant %uint 3 +%_ptr_Uniform_float = OpTypePointer Uniform %float +%_ptr_UniformConstant_9 = OpTypePointer UniformConstant %9 + %mapSampler = OpVariable %_ptr_UniformConstant_9 UniformConstant +%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11 + %mapTexture = OpVariable %_ptr_UniformConstant_11 UniformConstant +%_ptr_Input_v4float = OpTypePointer Input %v4float + %IN_p = OpVariable %_ptr_Input_v4float Input +%_ptr_Input_v2float = OpTypePointer Input %v2float + %IN_uv = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput = OpVariable %_ptr_Output_v4float Output + %main = OpFunction %void None %3 + %5 = OpLabel + %158 = OpLoad %v2float %IN_uv + %178 = OpAccessChain %_ptr_Uniform_float %_ %int_0 %int_0 %uint_3 + %179 = OpLoad %float %178 + %180 = OpCompositeConstruct %v2float %float_0 %179 + %184 = OpLoad %9 %mapSampler + %185 = OpLoad %11 %mapTexture + %204 = OpSampledImage %33 %185 %184 + %206 = OpImageSampleImplicitLod %v4float %204 %158 + %207 = OpCompositeExtract %float %206 1 + %209 = OpFMul %float %207 %float_80 + %210 = OpFMul %float %209 %float_0_0008 + %211 = OpExtInst %float %1 FClamp %210 %float_8en05 %float_0_008 + OpBranch %212 + %212 = OpLabel + %276 = OpPhi %float %float_0 %5 %252 %218 + %277 = OpPhi %float %float_0 %5 %255 %218 + %278 = OpPhi %int %int_n3 %5 %257 %218 + %217 = OpSLessThanEqual %bool %278 %int_3 + OpLoopMerge %213 %218 None + OpBranchConditional %217 %218 %213 + %218 = OpLabel + %220 = OpConvertSToF %float %278 + %222 = OpFNegate %float %220 + %224 = OpFMul %float %222 %220 + %226 = OpFMul %float %224 %float_0_222222 + %227 = OpExtInst %float %1 Exp %226 + %230 = OpSampledImage %33 %185 %184 + %234 = OpVectorTimesScalar %v2float %180 %220 + %235 = OpFAdd %v2float %158 %234 + %236 = OpImageSampleImplicitLod %v4float %230 %235 + %273 = OpCompositeExtract %float %236 1 + %241 = OpFSub %float %273 %207 + %242 = OpExtInst %float %1 FAbs %241 + %244 = OpFOrdLessThan %bool %242 %211 + %245 = OpSelect %float %244 %float_1 %float_0 + %246 = OpFMul %float %227 %245 + %275 = OpCompositeExtract %float %236 0 + %250 = OpFMul %float %275 %246 + %252 = OpFAdd %float %276 %250 + %255 = OpFAdd %float %277 %246 + %257 = OpIAdd %int %278 %int_1 + OpBranch %212 + %213 = OpLabel + %260 = OpFDiv %float %276 %277 + %190 = OpCompositeConstruct %v4float %260 %207 %float_0 %float_1 + OpStore %_entryPointOutput %190 + OpReturn + OpFunctionEnd diff --git a/deps/SPIRV-Cross/shaders/frag/constant-composites.frag b/deps/SPIRV-Cross/shaders/frag/constant-composites.frag new file mode 100644 index 0000000000..a12e22ff4f --- /dev/null +++ b/deps/SPIRV-Cross/shaders/frag/constant-composites.frag @@ -0,0 +1,20 @@ +#version 310 es +precision mediump float; + +float lut[4] = float[](1.0, 4.0, 3.0, 2.0); + +struct Foo +{ + float a; + float b; +}; +Foo foos[2] = Foo[](Foo(10.0, 20.0), Foo(30.0, 40.0)); + +layout(location = 0) out vec4 FragColor; +layout(location = 0) flat in int line; + +void main() +{ + FragColor = vec4(lut[line]); + FragColor += foos[line].a * foos[1 - line].a; +} diff --git a/deps/SPIRV-Cross/spirv_cfg.cpp b/deps/SPIRV-Cross/spirv_cfg.cpp index 815fdee682..c76698a740 100644 --- a/deps/SPIRV-Cross/spirv_cfg.cpp +++ b/deps/SPIRV-Cross/spirv_cfg.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 ARM Limited + * Copyright 2016-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/deps/SPIRV-Cross/spirv_cfg.hpp b/deps/SPIRV-Cross/spirv_cfg.hpp index 3f7ec01d33..104e494c22 100644 --- a/deps/SPIRV-Cross/spirv_cfg.hpp +++ b/deps/SPIRV-Cross/spirv_cfg.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 ARM Limited + * Copyright 2016-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/deps/SPIRV-Cross/spirv_common.hpp b/deps/SPIRV-Cross/spirv_common.hpp index eeb8532542..c4829f4643 100644 --- a/deps/SPIRV-Cross/spirv_common.hpp +++ b/deps/SPIRV-Cross/spirv_common.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 ARM Limited + * Copyright 2015-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/deps/SPIRV-Cross/spirv_cpp.cpp b/deps/SPIRV-Cross/spirv_cpp.cpp index 45f6d6a273..69ef138e43 100644 --- a/deps/SPIRV-Cross/spirv_cpp.cpp +++ b/deps/SPIRV-Cross/spirv_cpp.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 ARM Limited + * Copyright 2015-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/deps/SPIRV-Cross/spirv_cpp.hpp b/deps/SPIRV-Cross/spirv_cpp.hpp index a2576feb9d..57f815f3c0 100644 --- a/deps/SPIRV-Cross/spirv_cpp.hpp +++ b/deps/SPIRV-Cross/spirv_cpp.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 ARM Limited + * Copyright 2015-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/deps/SPIRV-Cross/spirv_cross.cpp b/deps/SPIRV-Cross/spirv_cross.cpp index 26983a4358..996c0205c3 100644 --- a/deps/SPIRV-Cross/spirv_cross.cpp +++ b/deps/SPIRV-Cross/spirv_cross.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 ARM Limited + * Copyright 2015-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/deps/SPIRV-Cross/spirv_cross.hpp b/deps/SPIRV-Cross/spirv_cross.hpp index ce928f7eb9..c477ea952f 100644 --- a/deps/SPIRV-Cross/spirv_cross.hpp +++ b/deps/SPIRV-Cross/spirv_cross.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 ARM Limited + * Copyright 2015-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/deps/SPIRV-Cross/spirv_glsl.cpp b/deps/SPIRV-Cross/spirv_glsl.cpp index ea80c20ce4..10c61b82d4 100644 --- a/deps/SPIRV-Cross/spirv_glsl.cpp +++ b/deps/SPIRV-Cross/spirv_glsl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 ARM Limited + * Copyright 2015-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1634,10 +1634,10 @@ void CompilerGLSL::replace_illegal_names() "iimageCubeArray", "image1D", "image1DArray", "image2D", "image2DArray", "image2DMS", "image2DMSArray", "image2DRect", "image3D", "imageBuffer", "imageCube", "imageCubeArray", "in", "inline", "inout", "input", "int", "interface", "invariant", "isampler1D", "isampler1DArray", "isampler2D", "isampler2DArray", "isampler2DMS", "isampler2DMSArray", "isampler2DRect", - "isampler3D", "isamplerBuffer", "isamplerCube", "isamplerCubeArray", "ivec2", "ivec3", "ivec4", "layout", "long", "lowp", - "mat2", "mat2x2", "mat2x3", "mat2x4", "mat3", "mat3x2", "mat3x3", "mat3x4", "mat4", "mat4x2", "mat4x3", "mat4x4", "mediump", - "namespace", "noinline", "noperspective", "out", "output", "packed", "partition", "patch", "precision", "public", "readonly", - "resource", "restrict", "return", "row_major", "sample", "sampler1D", "sampler1DArray", "sampler1DArrayShadow", + "isampler3D", "isamplerBuffer", "isamplerCube", "isamplerCubeArray", "ivec2", "ivec3", "ivec4", "layout", "line", "linear", "long", "lowp", + "mat2", "mat2x2", "mat2x3", "mat2x4", "mat3", "mat3x2", "mat3x3", "mat3x4", "mat4", "mat4x2", "mat4x3", "mat4x4", "matrix", "mediump", + "namespace", "noinline", "noperspective", "out", "output", "packed", "partition", "patch", "point", "precision", "public", "readonly", + "resource", "restrict", "return", "row_major", "sample", "sampler", "sampler1D", "sampler1DArray", "sampler1DArrayShadow", "sampler1DShadow", "sampler2D", "sampler2DArray", "sampler2DArrayShadow", "sampler2DMS", "sampler2DMSArray", "sampler2DRect", "sampler2DRectShadow", "sampler2DShadow", "sampler3D", "sampler3DRect", "samplerBuffer", "samplerCube", "samplerCubeArray", "samplerCubeArrayShadow", "samplerCubeShadow", "short", "sizeof", "smooth", "static", @@ -2256,6 +2256,7 @@ string CompilerGLSL::to_expression(uint32_t id) case TypeConstant: { auto &c = get(id); + auto &type = get(c.constant_type); // WorkGroupSize may be a constant. auto &dec = meta[c.self].decoration; @@ -2263,6 +2264,10 @@ string CompilerGLSL::to_expression(uint32_t id) return builtin_to_glsl(dec.builtin_type, StorageClassGeneric); else if (c.specialization && options.vulkan_semantics) return to_name(id); + else if (type.basetype == SPIRType::Struct && !backend.can_declare_struct_inline) + return to_name(id); + else if (!type.array.empty() && !backend.can_declare_arrays_inline) + return to_name(id); else return constant_expression(c); } @@ -5497,6 +5502,8 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) if (out_type.basetype == SPIRType::Struct && !backend.can_declare_struct_inline) forward = false; + if (!out_type.array.empty() && !backend.can_declare_arrays_inline) + forward = false; string constructor_op; if (backend.use_initializer_list && composite) @@ -7881,11 +7888,29 @@ void CompilerGLSL::branch(uint32_t from, uint32_t to) else { auto &from_block = get(from); - auto &dominator = get(from_block.loop_dominator); + bool outside_control_flow = false; + uint32_t loop_dominator = 0; - // For non-complex continue blocks, we implicitly branch to the continue block - // by having the continue block be part of the loop header in for (; ; continue-block). - bool outside_control_flow = block_is_outside_flow_control_from_block(dominator, from_block); + // FIXME: Refactor this to not use the old loop_dominator tracking. + if (from_block.merge_block) + { + // If we are a loop header, we don't set the loop dominator, + // so just use "self" here. + loop_dominator = from; + } + else if (from_block.loop_dominator != -1u) + { + loop_dominator = from_block.loop_dominator; + } + + if (loop_dominator != 0) + { + auto &dominator = get(loop_dominator); + + // For non-complex continue blocks, we implicitly branch to the continue block + // by having the continue block be part of the loop header in for (; ; continue-block). + outside_control_flow = block_is_outside_flow_control_from_block(dominator, from_block); + } // Some simplification for for-loops. We always end up with a useless continue; // statement since we branch to a loop block. @@ -8265,6 +8290,10 @@ void CompilerGLSL::emit_block_chain(SPIRBlock &block) bool emitted_for_loop_header = false; // If we need to force temporaries for certain IDs due to continue blocks, do it before starting loop header. + // Need to sort these to ensure that reference output is stable. + sort(begin(block.declare_temporary), end(block.declare_temporary), + [](const pair &a, const pair &b) { return a.second < b.second; }); + for (auto &tmp : block.declare_temporary) { auto flags = meta[tmp.second].decoration.decoration_flags; diff --git a/deps/SPIRV-Cross/spirv_glsl.hpp b/deps/SPIRV-Cross/spirv_glsl.hpp index 5421f258e9..0cae70c09b 100644 --- a/deps/SPIRV-Cross/spirv_glsl.hpp +++ b/deps/SPIRV-Cross/spirv_glsl.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 ARM Limited + * Copyright 2015-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -323,6 +323,7 @@ protected: bool use_initializer_list = false; bool use_typed_initializer_list = false; bool can_declare_struct_inline = true; + bool can_declare_arrays_inline = true; bool native_row_major_matrix = true; bool use_constructor_splatting = true; bool boolean_mix_support = true; diff --git a/deps/SPIRV-Cross/spirv_hlsl.cpp b/deps/SPIRV-Cross/spirv_hlsl.cpp index 09c6a502aa..3f2227cfea 100644 --- a/deps/SPIRV-Cross/spirv_hlsl.cpp +++ b/deps/SPIRV-Cross/spirv_hlsl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 Robert Konrad + * Copyright 2016-2018 Robert Konrad * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -841,6 +841,34 @@ void CompilerHLSL::emit_builtin_variables() } } +void CompilerHLSL::emit_composite_constants() +{ + // HLSL cannot declare structs or arrays inline, so we must move them out to + // global constants directly. + bool emitted = false; + + for (auto &id : ids) + { + if (id.get_type() == TypeConstant) + { + auto &c = id.get(); + if (c.specialization) + continue; + + auto &type = get(c.constant_type); + if (type.basetype == SPIRType::Struct || !type.array.empty()) + { + auto name = to_name(c.self); + statement("static const ", variable_decl(type, name), " = ", constant_expression(c), ";"); + emitted = true; + } + } + } + + if (emitted) + statement(""); +} + void CompilerHLSL::emit_specialization_constants() { bool emitted = false; @@ -880,6 +908,8 @@ void CompilerHLSL::emit_resources() { auto &execution = get_entry_point(); + replace_illegal_names(); + emit_specialization_constants(); // Output all basic struct types which are not Block or BufferBlock as these are declared inplace @@ -898,6 +928,8 @@ void CompilerHLSL::emit_resources() } } + emit_composite_constants(); + bool emitted = false; // Output UBOs and SSBOs @@ -3088,8 +3120,11 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) { uint32_t result_type = ops[0]; uint32_t id = ops[1]; - emit_op(result_type, id, to_expression(ops[2]), true, true); - // TODO: Maybe change this when separate samplers/images are supported + auto *combined = maybe_get(ops[2]); + if (combined) + emit_op(result_type, id, to_expression(combined->image), true, true); + else + emit_op(result_type, id, to_expression(ops[2]), true, true); break; } @@ -3645,6 +3680,7 @@ string CompilerHLSL::compile() backend.boolean_mix_support = false; backend.can_swizzle_scalar = true; backend.can_declare_struct_inline = false; + backend.can_declare_arrays_inline = false; update_active_builtins(); analyze_sampler_comparison_states(); diff --git a/deps/SPIRV-Cross/spirv_hlsl.hpp b/deps/SPIRV-Cross/spirv_hlsl.hpp index 7144b5cdca..9b3261737c 100644 --- a/deps/SPIRV-Cross/spirv_hlsl.hpp +++ b/deps/SPIRV-Cross/spirv_hlsl.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 Robert Konrad + * Copyright 2016-2018 Robert Konrad * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -91,6 +91,7 @@ private: void emit_modern_uniform(const SPIRVariable &var); void emit_legacy_uniform(const SPIRVariable &var); void emit_specialization_constants(); + void emit_composite_constants(); void emit_fixup() override; std::string builtin_to_glsl(spv::BuiltIn builtin, spv::StorageClass storage) override; std::string layout_for_member(const SPIRType &type, uint32_t index) override; diff --git a/deps/SPIRV-Cross/spirv_msl.cpp b/deps/SPIRV-Cross/spirv_msl.cpp index 70e9b4108f..a85b38c2eb 100644 --- a/deps/SPIRV-Cross/spirv_msl.cpp +++ b/deps/SPIRV-Cross/spirv_msl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 The Brenwill Workshop Ltd. + * Copyright 2016-2018 The Brenwill Workshop Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -2692,7 +2692,19 @@ string CompilerMSL::entry_point_args(bool append_comma) convert_to_string(nsi_var.first) + ")]]"; } - // Uniforms + // Output resources, sorted by resource index & type + // We need to sort to work around a bug on macOS 10.13 with NVidia drivers where switching between shaders + // with different order of buffers can result in issues with buffer assignments inside the driver. + struct Resource + { + Variant *id; + string name; + SPIRType::BaseType basetype; + uint32_t index; + }; + + vector resources; + for (auto &id : ids) { if (id.get_type() == TypeVariable) @@ -2706,48 +2718,75 @@ string CompilerMSL::entry_point_args(bool append_comma) var.storage == StorageClassPushConstant || var.storage == StorageClassStorageBuffer) && !is_hidden_variable(var)) { - switch (type.basetype) + if (type.basetype == SPIRType::SampledImage) { - case SPIRType::Struct: - { - auto &m = meta.at(type.self); - if (m.members.size() == 0) - break; - if (!ep_args.empty()) - ep_args += ", "; - ep_args += get_argument_address_space(var) + " " + type_to_glsl(type) + "& " + to_name(var_id); - ep_args += " [[buffer(" + convert_to_string(get_metal_resource_index(var, type.basetype)) + ")]]"; - break; - } - case SPIRType::Sampler: - if (!ep_args.empty()) - ep_args += ", "; - ep_args += type_to_glsl(type) + " " + to_name(var_id); - ep_args += " [[sampler(" + convert_to_string(get_metal_resource_index(var, type.basetype)) + ")]]"; - break; - case SPIRType::Image: - if (!ep_args.empty()) - ep_args += ", "; - ep_args += type_to_glsl(type, var_id) + " " + to_name(var_id); - ep_args += " [[texture(" + convert_to_string(get_metal_resource_index(var, type.basetype)) + ")]]"; - break; - case SPIRType::SampledImage: - if (!ep_args.empty()) - ep_args += ", "; - ep_args += type_to_glsl(type, var_id) + " " + to_name(var_id); - ep_args += - " [[texture(" + convert_to_string(get_metal_resource_index(var, SPIRType::Image)) + ")]]"; + resources.push_back( + { &id, to_name(var_id), SPIRType::Image, get_metal_resource_index(var, SPIRType::Image) }); + if (type.image.dim != DimBuffer) - { - ep_args += ", sampler " + to_sampler_expression(var_id); - ep_args += - " [[sampler(" + convert_to_string(get_metal_resource_index(var, SPIRType::Sampler)) + ")]]"; - } - break; - default: - break; + resources.push_back({ &id, to_sampler_expression(var_id), SPIRType::Sampler, + get_metal_resource_index(var, SPIRType::Sampler) }); + } + else + { + resources.push_back( + { &id, to_name(var_id), type.basetype, get_metal_resource_index(var, type.basetype) }); } } + } + } + + std::sort(resources.begin(), resources.end(), [](const Resource &lhs, const Resource &rhs) { + return tie(lhs.basetype, lhs.index) < tie(rhs.basetype, rhs.index); + }); + + for (auto &r : resources) + { + auto &var = r.id->get(); + auto &type = get(var.basetype); + + uint32_t var_id = var.self; + + switch (r.basetype) + { + case SPIRType::Struct: + { + auto &m = meta.at(type.self); + if (m.members.size() == 0) + break; + if (!ep_args.empty()) + ep_args += ", "; + ep_args += get_argument_address_space(var) + " " + type_to_glsl(type) + "& " + r.name; + ep_args += " [[buffer(" + convert_to_string(r.index) + ")]]"; + break; + } + case SPIRType::Sampler: + if (!ep_args.empty()) + ep_args += ", "; + ep_args += "sampler " + r.name; + ep_args += " [[sampler(" + convert_to_string(r.index) + ")]]"; + break; + case SPIRType::Image: + if (!ep_args.empty()) + ep_args += ", "; + ep_args += type_to_glsl(type, var_id) + " " + r.name; + ep_args += " [[texture(" + convert_to_string(r.index) + ")]]"; + break; + default: + SPIRV_CROSS_THROW("Unexpected resource type"); + break; + } + } + + // Builtin variables + for (auto &id : ids) + { + if (id.get_type() == TypeVariable) + { + auto &var = id.get(); + + uint32_t var_id = var.self; + if (var.storage == StorageClassInput && is_builtin_variable(var)) { if (!ep_args.empty()) @@ -2837,17 +2876,28 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg) decl += "const "; if (is_builtin_variable(var)) - decl += builtin_type_decl((BuiltIn)get_decoration(arg.id, DecorationBuiltIn)); + decl += builtin_type_decl(static_cast(get_decoration(arg.id, DecorationBuiltIn))); else decl += type_to_glsl(type, arg.id); if (is_array(type)) - decl += "*"; + { + decl += " (&"; + decl += to_name(var.self); + decl += ")"; + decl += type_to_array_glsl(type); + } else if (!pointer) + { decl += "&"; - - decl += " "; - decl += to_name(var.self); + decl += " "; + decl += to_name(var.self); + } + else + { + decl += " "; + decl += to_name(var.self); + } return decl; } diff --git a/deps/SPIRV-Cross/spirv_msl.hpp b/deps/SPIRV-Cross/spirv_msl.hpp index fbc8dadf40..6f66f3122e 100644 --- a/deps/SPIRV-Cross/spirv_msl.hpp +++ b/deps/SPIRV-Cross/spirv_msl.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 The Brenwill Workshop Ltd. + * Copyright 2016-2018 The Brenwill Workshop Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/deps/SPIRV-Cross/test_shaders.sh b/deps/SPIRV-Cross/test_shaders.sh old mode 100644 new mode 100755 diff --git a/deps/SPIRV-Cross/update_test_shaders.sh b/deps/SPIRV-Cross/update_test_shaders.sh old mode 100644 new mode 100755 diff --git a/gfx/drivers_shader/glslang_util.cpp b/gfx/drivers_shader/glslang_util.cpp index 3094fb00ae..abae49db0f 100644 --- a/gfx/drivers_shader/glslang_util.cpp +++ b/gfx/drivers_shader/glslang_util.cpp @@ -30,7 +30,7 @@ #endif #include "glslang_util.h" -#ifdef HAVE_VULKAN +#if defined(HAVE_GLSLANG) && !defined(HAVE_GRIFFIN) #include "glslang.hpp" #endif #include "../../verbosity.h" diff --git a/gfx/drivers_shader/slang_process.cpp b/gfx/drivers_shader/slang_process.cpp index af54e3b8b5..f61e3d52b3 100644 --- a/gfx/drivers_shader/slang_process.cpp +++ b/gfx/drivers_shader/slang_process.cpp @@ -372,49 +372,10 @@ bool slang_process( vs->set_options(options); ps->set_options(options); - std::vector vs_attrib_remap; - /* not exactly a vertex attribute but this remaps * float2 FragCoord :TEXCOORD# to float4 FragCoord : SV_POSITION */ std::vector ps_attrib_remap; - /* "line" is a reserved keyword in hlsl - * maybe there is an easier way to rename a variable ? */ - - int id = 0; - while (true) - { - try - { - string name = vs->get_name(id); - - if (name == "line" || name == "point" || name == "linear") - vs->set_name(id, string("var_") + name); - - id++; - } catch (const std::exception& e) - { - break; - } - } - - id = 0; - while (true) - { - try - { - string name = ps->get_name(id); - - if (name == "line" || name == "point" || name == "linear") - ps->set_name(id, string("var_") + name); - - id++; - } catch (const std::exception& e) - { - break; - } - } - VariableTypeRemapCallback ps_var_remap_cb = [&](const SPIRType& type, const std::string& var_name, std::string& name_of_type) { @@ -433,8 +394,7 @@ bool slang_process( } } - - vs_code = vs->compile(vs_attrib_remap); + vs_code = vs->compile(); ps_code = ps->compile(ps_attrib_remap); } else if (shader_info->type == RARCH_SHADER_GLSL)