diff options
65 files changed, 150 insertions, 131 deletions
diff --git a/checkout_glslang_spirv_tools.sh b/checkout_glslang_spirv_tools.sh index c90d1daa..2ccc6c89 100755 --- a/checkout_glslang_spirv_tools.sh +++ b/checkout_glslang_spirv_tools.sh @@ -1,8 +1,8 @@ #!/bin/bash -GLSLANG_REV=91ac4290bcf2cb930b4fb0981f09c00c0b6797e1 -SPIRV_TOOLS_REV=9bfe0eb25e3dfdf4f3fd86ab6c0cda009c9bd661 -SPIRV_HEADERS_REV=d5b2e1255f706ce1f88812217e9a554f299848af +GLSLANG_REV=c9e03360e2a78a95a8571292aefa5ddbdbf66daf +SPIRV_TOOLS_REV=e2279da7148d19bd21c6d47ffc96ee4176f43dba +SPIRV_HEADERS_REV=8bea0a266ac9b718aa0818d9e3a47c0b77c2cb23 if [ -d external/glslang ]; then echo "Updating glslang to revision $GLSLANG_REV." diff --git a/reference/opt/shaders-hlsl/asm/frag/unreachable.asm.frag b/reference/opt/shaders-hlsl/asm/frag/unreachable.asm.frag index ee3e4672..4a024c8e 100644 --- a/reference/opt/shaders-hlsl/asm/frag/unreachable.asm.frag +++ b/reference/opt/shaders-hlsl/asm/frag/unreachable.asm.frag @@ -13,21 +13,21 @@ struct SPIRV_Cross_Output void frag_main() { - bool _29; + float4 _33; for (;;) { - _29 = counter == 10; - if (_29) + if (counter == 10) { + _33 = 10.0f.xxxx; break; } else { + _33 = 30.0f.xxxx; break; } } - bool4 _35 = _29.xxxx; - FragColor = float4(_35.x ? 10.0f.xxxx.x : 30.0f.xxxx.x, _35.y ? 10.0f.xxxx.y : 30.0f.xxxx.y, _35.z ? 10.0f.xxxx.z : 30.0f.xxxx.z, _35.w ? 10.0f.xxxx.w : 30.0f.xxxx.w); + FragColor = _33; } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) diff --git a/reference/opt/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert b/reference/opt/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert index 8d5e771f..48b2df20 100644 --- a/reference/opt/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert +++ b/reference/opt/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert @@ -1,10 +1,10 @@ static float4 gl_Position; -static int gl_VertexID; -static int gl_InstanceID; +static int gl_VertexIndex; +static int gl_InstanceIndex; struct SPIRV_Cross_Input { - uint gl_VertexID : SV_VertexID; - uint gl_InstanceID : SV_InstanceID; + uint gl_VertexIndex : SV_VertexID; + uint gl_InstanceIndex : SV_InstanceID; }; struct SPIRV_Cross_Output @@ -14,13 +14,13 @@ struct SPIRV_Cross_Output void vert_main() { - gl_Position = float(gl_VertexID + gl_InstanceID).xxxx; + gl_Position = float(gl_VertexIndex + gl_InstanceIndex).xxxx; } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { - gl_VertexID = int(stage_input.gl_VertexID); - gl_InstanceID = int(stage_input.gl_InstanceID); + gl_VertexIndex = int(stage_input.gl_VertexIndex); + gl_InstanceIndex = int(stage_input.gl_InstanceIndex); vert_main(); SPIRV_Cross_Output stage_output; stage_output.gl_Position = gl_Position; diff --git a/reference/opt/shaders-hlsl/comp/spec-constant-op-member-array.comp b/reference/opt/shaders-hlsl/comp/spec-constant-op-member-array.comp index c35031b8..c4537db0 100644 --- a/reference/opt/shaders-hlsl/comp/spec-constant-op-member-array.comp +++ b/reference/opt/shaders-hlsl/comp/spec-constant-op-member-array.comp @@ -23,7 +23,7 @@ struct B #define SPIRV_CROSS_CONSTANT_ID_2 300 #endif static const int c = SPIRV_CROSS_CONSTANT_ID_2; -static const int _18 = (c + 50); +static const int d = (c + 50); #ifndef SPIRV_CROSS_CONSTANT_ID_3 #define SPIRV_CROSS_CONSTANT_ID_3 400 #endif diff --git a/reference/opt/shaders-hlsl/frag/spec-constant-ternary.frag b/reference/opt/shaders-hlsl/frag/spec-constant-ternary.frag index 58735aad..942da54f 100644 --- a/reference/opt/shaders-hlsl/frag/spec-constant-ternary.frag +++ b/reference/opt/shaders-hlsl/frag/spec-constant-ternary.frag @@ -3,7 +3,7 @@ #endif static const uint s = SPIRV_CROSS_CONSTANT_ID_0; static const bool _13 = (s > 20u); -static const uint _16 = _13 ? 30u : 50u; +static const uint f = _13 ? 30u : 50u; static float FragColor; @@ -14,7 +14,7 @@ struct SPIRV_Cross_Output void frag_main() { - FragColor = float(_16); + FragColor = float(f); } SPIRV_Cross_Output main() diff --git a/reference/opt/shaders-hlsl/vert/basic.vert b/reference/opt/shaders-hlsl/vert/basic.vert index f357d907..e0bcebf7 100644 --- a/reference/opt/shaders-hlsl/vert/basic.vert +++ b/reference/opt/shaders-hlsl/vert/basic.vert @@ -1,4 +1,4 @@ -cbuffer UBO +cbuffer UBO : register(b0) { row_major float4x4 _16_uMVP : packoffset(c0); }; diff --git a/reference/opt/shaders-msl/asm/frag/unreachable.asm.frag b/reference/opt/shaders-msl/asm/frag/unreachable.asm.frag index 9a9baef5..918a0b9c 100644 --- a/reference/opt/shaders-msl/asm/frag/unreachable.asm.frag +++ b/reference/opt/shaders-msl/asm/frag/unreachable.asm.frag @@ -16,21 +16,21 @@ struct main0_in fragment main0_out main0(main0_in in [[stage_in]]) { main0_out out = {}; - bool _29; + float4 _33; for (;;) { - _29 = in.counter == 10; - if (_29) + if (in.counter == 10) { + _33 = float4(10.0); break; } else { + _33 = float4(30.0); break; } } - bool4 _35 = bool4(_29); - out.FragColor = float4(_35.x ? float4(10.0).x : float4(30.0).x, _35.y ? float4(10.0).y : float4(30.0).y, _35.z ? float4(10.0).z : float4(30.0).z, _35.w ? float4(10.0).w : float4(30.0).w); + out.FragColor = _33; return out; } diff --git a/reference/opt/shaders-msl/comp/atomic.comp b/reference/opt/shaders-msl/comp/atomic.comp index 17d0a652..f77922ac 100644 --- a/reference/opt/shaders-msl/comp/atomic.comp +++ b/reference/opt/shaders-msl/comp/atomic.comp @@ -40,6 +40,8 @@ kernel void main0(device SSBO& ssbo [[buffer(2)]]) { _52 = 10; } while (!atomic_compare_exchange_weak_explicit((volatile device atomic_int*)&ssbo.i32, &_52, 2, memory_order_relaxed, memory_order_relaxed)); + shared_u32 = 10u; + shared_i32 = 10; uint _57 = atomic_fetch_add_explicit((volatile threadgroup atomic_uint*)&shared_u32, 1u, memory_order_relaxed); uint _58 = atomic_fetch_or_explicit((volatile threadgroup atomic_uint*)&shared_u32, 1u, memory_order_relaxed); uint _59 = atomic_fetch_xor_explicit((volatile threadgroup atomic_uint*)&shared_u32, 1u, memory_order_relaxed); diff --git a/reference/opt/shaders-msl/comp/bitcast-16bit-1.invalid.comp b/reference/opt/shaders-msl/comp/bitcast-16bit-1.invalid.comp index 5671cd7c..f91e5fea 100644 --- a/reference/opt/shaders-msl/comp/bitcast-16bit-1.invalid.comp +++ b/reference/opt/shaders-msl/comp/bitcast-16bit-1.invalid.comp @@ -15,7 +15,7 @@ struct SSBO1 kernel void main0(device SSBO0& _25 [[buffer(0)]], device SSBO1& _39 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) { - _39.outputs[gl_GlobalInvocationID.x].x = int(as_type<uint>(as_type<half2>(_25.inputs[gl_GlobalInvocationID.x].xy) + half2(half(1)))); + _39.outputs[gl_GlobalInvocationID.x].x = int(as_type<uint>(as_type<half2>(_25.inputs[gl_GlobalInvocationID.x].xy) + half2(1.0h))); _39.outputs[gl_GlobalInvocationID.x].y = as_type<int>(_25.inputs[gl_GlobalInvocationID.x].zw); _39.outputs[gl_GlobalInvocationID.x].z = int(as_type<uint>(ushort2(_25.inputs[gl_GlobalInvocationID.x].xy))); } diff --git a/reference/opt/shaders-msl/comp/spec-constant-op-member-array.comp b/reference/opt/shaders-msl/comp/spec-constant-op-member-array.comp index 1d78f3f4..d3c8b7dc 100644 --- a/reference/opt/shaders-msl/comp/spec-constant-op-member-array.comp +++ b/reference/opt/shaders-msl/comp/spec-constant-op-member-array.comp @@ -28,14 +28,14 @@ struct B #define SPIRV_CROSS_CONSTANT_ID_2 300 #endif constant int c = SPIRV_CROSS_CONSTANT_ID_2; -constant int _18 = (c + 50); +constant int d = (c + 50); struct SSBO { A member_a; B member_b; int v[a]; - int w[_18]; + int w[d]; }; constant int e_tmp [[function_constant(3)]]; diff --git a/reference/opt/shaders-msl/frag/spec-constant-ternary.frag b/reference/opt/shaders-msl/frag/spec-constant-ternary.frag index 5ab6b4fc..05900650 100644 --- a/reference/opt/shaders-msl/frag/spec-constant-ternary.frag +++ b/reference/opt/shaders-msl/frag/spec-constant-ternary.frag @@ -6,7 +6,7 @@ using namespace metal; constant uint s_tmp [[function_constant(0)]]; constant uint s = is_function_constant_defined(s_tmp) ? s_tmp : 10u; constant bool _13 = (s > 20u); -constant uint _16 = _13 ? 30u : 50u; +constant uint f = _13 ? 30u : 50u; struct main0_out { @@ -16,7 +16,7 @@ struct main0_out fragment main0_out main0() { main0_out out = {}; - out.FragColor = float(_16); + out.FragColor = float(f); return out; } diff --git a/reference/opt/shaders-msl/vert/no_stage_out.write_buff.vert b/reference/opt/shaders-msl/vert/no_stage_out.write_buff.vert index 458e1f1b..52af329a 100644 --- a/reference/opt/shaders-msl/vert/no_stage_out.write_buff.vert +++ b/reference/opt/shaders-msl/vert/no_stage_out.write_buff.vert @@ -27,10 +27,10 @@ vertex void main0(main0_in in [[stage_in]], constant _40& _42 [[buffer(0)]], dev { main0_out out = {}; out.gl_Position = in.m_17; - for (int _51 = 0; _51 < 1024; ) + for (int _52 = 0; _52 < 1024; ) { - _37._m0[_51] = _42._m0[_51]; - _51++; + _37._m0[_52] = _42._m0[_52]; + _52++; continue; } } diff --git a/reference/opt/shaders-msl/vert/resource-arrays-leaf.ios.vert b/reference/opt/shaders-msl/vert/resource-arrays-leaf.ios.vert index 93704af2..7c454c1f 100644 --- a/reference/opt/shaders-msl/vert/resource-arrays-leaf.ios.vert +++ b/reference/opt/shaders-msl/vert/resource-arrays-leaf.ios.vert @@ -20,14 +20,8 @@ struct constant_block #endif constant int arraySize = SPIRV_CROSS_CONSTANT_ID_0; -vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_block* storage_1 [[buffer(1)]], constant constant_block* constants_0 [[buffer(2)]], constant constant_block* constants_1 [[buffer(3)]], constant constant_block* constants_2 [[buffer(4)]], constant constant_block* constants_3 [[buffer(5)]], array<texture2d<int>, 3> images [[texture(0)]]) +vertex void main0(constant constant_block* constants_0 [[buffer(4)]], constant constant_block* constants_1 [[buffer(5)]], constant constant_block* constants_2 [[buffer(6)]], constant constant_block* constants_3 [[buffer(7)]], device storage_block* storage_0 [[buffer(8)]], device storage_block* storage_1 [[buffer(9)]], array<texture2d<int>, 3> images [[texture(0)]]) { - device storage_block* storage[] = - { - storage_0, - storage_1, - }; - constant constant_block* constants[] = { constants_0, @@ -35,7 +29,13 @@ vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_ constants_2, constants_3, }; - + + device storage_block* storage[] = + { + storage_0, + storage_1, + }; + storage[0]->baz = uint4(constants[3]->foo); storage[1]->quux = images[2].read(uint2(int2(constants[1]->bar))).xy; } diff --git a/reference/opt/shaders-msl/vert/resource-arrays.ios.vert b/reference/opt/shaders-msl/vert/resource-arrays.ios.vert index 93704af2..543f7414 100644 --- a/reference/opt/shaders-msl/vert/resource-arrays.ios.vert +++ b/reference/opt/shaders-msl/vert/resource-arrays.ios.vert @@ -20,14 +20,14 @@ struct constant_block #endif constant int arraySize = SPIRV_CROSS_CONSTANT_ID_0; -vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_block* storage_1 [[buffer(1)]], constant constant_block* constants_0 [[buffer(2)]], constant constant_block* constants_1 [[buffer(3)]], constant constant_block* constants_2 [[buffer(4)]], constant constant_block* constants_3 [[buffer(5)]], array<texture2d<int>, 3> images [[texture(0)]]) +vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_block* storage_1 [[buffer(1)]], constant constant_block* constants_0 [[buffer(0)]], constant constant_block* constants_1 [[buffer(1)]], constant constant_block* constants_2 [[buffer(2)]], constant constant_block* constants_3 [[buffer(3)]], array<texture2d<int>, 3> images [[texture(0)]]) { device storage_block* storage[] = { storage_0, storage_1, }; - + constant constant_block* constants[] = { constants_0, @@ -35,7 +35,7 @@ vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_ constants_2, constants_3, }; - + storage[0]->baz = uint4(constants[3]->foo); storage[1]->quux = images[2].read(uint2(int2(constants[1]->bar))).xy; } diff --git a/reference/opt/shaders/asm/comp/hlsl-functionality.asm.comp b/reference/opt/shaders/asm/comp/hlsl-functionality.asm.comp index 29bc02c6..6860cfaf 100644 --- a/reference/opt/shaders/asm/comp/hlsl-functionality.asm.comp +++ b/reference/opt/shaders/asm/comp/hlsl-functionality.asm.comp @@ -6,7 +6,7 @@ layout(binding = 0, std430) buffer Buf vec4 _data[]; } Buf_1; -layout(std430) buffer Buf_count +layout(binding = 1, std430) buffer Buf_count { int _count; } Buf_count_1; diff --git a/reference/opt/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag b/reference/opt/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag index af44e654..8c35e62e 100644 --- a/reference/opt/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag +++ b/reference/opt/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag @@ -14,17 +14,16 @@ int _240; void main() { - bool _246; uint _227; - int _237; + int _236; for (;;) { _227 = 0u; - bool _164; + bool _231; + int _237; for (;;) { - _164 = _227 < _11.shadowCascadesNum; - if (_164) + if (_227 < _11.shadowCascadesNum) { mat4 _228; for (;;) @@ -44,6 +43,7 @@ void main() if ((((_179 >= 0.0) && (_179 <= 1.0)) && (max(_186, _188) <= 1.0)) && (min(_186, _188) >= 0.0)) { _237 = int(_227); + _231 = true; break; } else @@ -57,16 +57,18 @@ void main() else { _237 = _240; + _231 = false; break; } } - _246 = _164 ? true : false; - if (_246) + if (_231) { + _236 = _237; break; } + _236 = -1; break; } - _entryPointOutput = _246 ? _237 : (-1); + _entryPointOutput = _236; } diff --git a/reference/opt/shaders/asm/frag/temporary-phi-hoisting.asm.frag b/reference/opt/shaders/asm/frag/temporary-phi-hoisting.asm.frag index 1ecd61d7..ade51d4a 100644 --- a/reference/opt/shaders/asm/frag/temporary-phi-hoisting.asm.frag +++ b/reference/opt/shaders/asm/frag/temporary-phi-hoisting.asm.frag @@ -5,7 +5,7 @@ struct MyStruct vec4 color; }; -layout(std140) uniform MyStruct_CB +layout(binding = 0, std140) uniform MyStruct_CB { MyStruct g_MyStruct[4]; } _6; diff --git a/reference/opt/shaders/asm/frag/unreachable.asm.frag b/reference/opt/shaders/asm/frag/unreachable.asm.frag index eb7e8a91..c8986c12 100644 --- a/reference/opt/shaders/asm/frag/unreachable.asm.frag +++ b/reference/opt/shaders/asm/frag/unreachable.asm.frag @@ -5,19 +5,20 @@ layout(location = 0) out vec4 FragColor; void main() { - bool _29; + vec4 _33; for (;;) { - _29 = counter == 10; - if (_29) + if (counter == 10) { + _33 = vec4(10.0); break; } else { + _33 = vec4(30.0); break; } } - FragColor = mix(vec4(30.0), vec4(10.0), bvec4(_29)); + FragColor = _33; } diff --git a/reference/opt/shaders/comp/bitcast-16bit-1.invalid.comp b/reference/opt/shaders/comp/bitcast-16bit-1.invalid.comp index 7420586f..9844e719 100644 --- a/reference/opt/shaders/comp/bitcast-16bit-1.invalid.comp +++ b/reference/opt/shaders/comp/bitcast-16bit-1.invalid.comp @@ -31,7 +31,7 @@ void main() { uint ident = gl_GlobalInvocationID.x; f16vec2 a = int16BitsToFloat16(_25.inputs[ident].xy); - _39.outputs[ident].x = int(packFloat2x16(a + f16vec2(float16_t(1), float16_t(1)))); + _39.outputs[ident].x = int(packFloat2x16(a + f16vec2(1.0hf))); _39.outputs[ident].y = packInt2x16(_25.inputs[ident].zw); _39.outputs[ident].z = int(packUint2x16(u16vec2(_25.inputs[ident].xy))); } diff --git a/reference/opt/shaders/desktop-only/vert/basic.desktop.sso.vert b/reference/opt/shaders/desktop-only/vert/basic.desktop.sso.vert index 5f527e08..2f880398 100644 --- a/reference/opt/shaders/desktop-only/vert/basic.desktop.sso.vert +++ b/reference/opt/shaders/desktop-only/vert/basic.desktop.sso.vert @@ -5,7 +5,7 @@ out gl_PerVertex vec4 gl_Position; }; -layout(std140) uniform UBO +layout(binding = 0, std140) uniform UBO { mat4 uMVP; } _16; diff --git a/reference/opt/shaders/tesc/water_tess.tesc b/reference/opt/shaders/tesc/water_tess.tesc index 69307d3c..eb3e84d5 100644 --- a/reference/opt/shaders/tesc/water_tess.tesc +++ b/reference/opt/shaders/tesc/water_tess.tesc @@ -2,7 +2,7 @@ #extension GL_EXT_tessellation_shader : require layout(vertices = 1) out; -layout(std140) uniform UBO +layout(binding = 0, std140) uniform UBO { vec4 uScale; vec3 uCamPos; diff --git a/reference/opt/shaders/vert/basic.vert b/reference/opt/shaders/vert/basic.vert index 05504eb2..8f251cbe 100644 --- a/reference/opt/shaders/vert/basic.vert +++ b/reference/opt/shaders/vert/basic.vert @@ -1,6 +1,6 @@ #version 310 es -layout(std140) uniform UBO +layout(binding = 0, std140) uniform UBO { mat4 uMVP; } _16; diff --git a/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp b/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp index 33647a42..7c4c7ed6 100644 --- a/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp +++ b/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp @@ -26,7 +26,7 @@ struct B #define SPIRV_CROSS_CONSTANT_ID_2 300 #endif const int c = SPIRV_CROSS_CONSTANT_ID_2; -const int _18 = (c + 50); +const int d = (c + 50); #ifndef SPIRV_CROSS_CONSTANT_ID_3 #define SPIRV_CROSS_CONSTANT_ID_3 400 #endif @@ -37,7 +37,7 @@ layout(binding = 0, std430) buffer SSBO A member_a; B member_b; int v[a]; - int w[_18]; + int w[d]; } _22; void main() diff --git a/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk b/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk index cd68e93d..b7571b7a 100644 --- a/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk +++ b/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk @@ -17,7 +17,7 @@ struct B }; layout(constant_id = 2) const int c = 300; -const int _18 = (c + 50); +const int d = (c + 50); layout(constant_id = 3) const int e = 400; layout(set = 1, binding = 0, std430) buffer SSBO @@ -25,7 +25,7 @@ layout(set = 1, binding = 0, std430) buffer SSBO A member_a; B member_b; int v[a]; - int w[_18]; + int w[d]; } _22; void main() diff --git a/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag b/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag index e03dfcb9..081206f1 100644 --- a/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag +++ b/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag @@ -5,12 +5,12 @@ #endif const uint s = SPIRV_CROSS_CONSTANT_ID_0; const bool _13 = (s > 20u); -const uint _16 = _13 ? 30u : 50u; +const uint f = _13 ? 30u : 50u; layout(location = 0) out float FragColor; void main() { - FragColor = float(_16); + FragColor = float(f); } diff --git a/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk b/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk index 59d3b99b..34bfea02 100644 --- a/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk +++ b/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk @@ -2,12 +2,12 @@ layout(constant_id = 0) const uint s = 10u; const bool _13 = (s > 20u); -const uint _16 = _13 ? 30u : 50u; +const uint f = _13 ? 30u : 50u; layout(location = 0) out float FragColor; void main() { - FragColor = float(_16); + FragColor = float(f); } diff --git a/reference/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert b/reference/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert index 8d5e771f..48b2df20 100644 --- a/reference/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert +++ b/reference/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert @@ -1,10 +1,10 @@ static float4 gl_Position; -static int gl_VertexID; -static int gl_InstanceID; +static int gl_VertexIndex; +static int gl_InstanceIndex; struct SPIRV_Cross_Input { - uint gl_VertexID : SV_VertexID; - uint gl_InstanceID : SV_InstanceID; + uint gl_VertexIndex : SV_VertexID; + uint gl_InstanceIndex : SV_InstanceID; }; struct SPIRV_Cross_Output @@ -14,13 +14,13 @@ struct SPIRV_Cross_Output void vert_main() { - gl_Position = float(gl_VertexID + gl_InstanceID).xxxx; + gl_Position = float(gl_VertexIndex + gl_InstanceIndex).xxxx; } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { - gl_VertexID = int(stage_input.gl_VertexID); - gl_InstanceID = int(stage_input.gl_InstanceID); + gl_VertexIndex = int(stage_input.gl_VertexIndex); + gl_InstanceIndex = int(stage_input.gl_InstanceIndex); vert_main(); SPIRV_Cross_Output stage_output; stage_output.gl_Position = gl_Position; diff --git a/reference/shaders-hlsl/comp/spec-constant-op-member-array.comp b/reference/shaders-hlsl/comp/spec-constant-op-member-array.comp index c35031b8..c4537db0 100644 --- a/reference/shaders-hlsl/comp/spec-constant-op-member-array.comp +++ b/reference/shaders-hlsl/comp/spec-constant-op-member-array.comp @@ -23,7 +23,7 @@ struct B #define SPIRV_CROSS_CONSTANT_ID_2 300 #endif static const int c = SPIRV_CROSS_CONSTANT_ID_2; -static const int _18 = (c + 50); +static const int d = (c + 50); #ifndef SPIRV_CROSS_CONSTANT_ID_3 #define SPIRV_CROSS_CONSTANT_ID_3 400 #endif diff --git a/reference/shaders-hlsl/frag/spec-constant-ternary.frag b/reference/shaders-hlsl/frag/spec-constant-ternary.frag index 58735aad..942da54f 100644 --- a/reference/shaders-hlsl/frag/spec-constant-ternary.frag +++ b/reference/shaders-hlsl/frag/spec-constant-ternary.frag @@ -3,7 +3,7 @@ #endif static const uint s = SPIRV_CROSS_CONSTANT_ID_0; static const bool _13 = (s > 20u); -static const uint _16 = _13 ? 30u : 50u; +static const uint f = _13 ? 30u : 50u; static float FragColor; @@ -14,7 +14,7 @@ struct SPIRV_Cross_Output void frag_main() { - FragColor = float(_16); + FragColor = float(f); } SPIRV_Cross_Output main() diff --git a/reference/shaders-hlsl/vert/basic.vert b/reference/shaders-hlsl/vert/basic.vert index f357d907..e0bcebf7 100644 --- a/reference/shaders-hlsl/vert/basic.vert +++ b/reference/shaders-hlsl/vert/basic.vert @@ -1,4 +1,4 @@ -cbuffer UBO +cbuffer UBO : register(b0) { row_major float4x4 _16_uMVP : packoffset(c0); }; diff --git a/reference/shaders-msl/comp/bitcast-16bit-1.invalid.comp b/reference/shaders-msl/comp/bitcast-16bit-1.invalid.comp index ddf38a60..8315f792 100644 --- a/reference/shaders-msl/comp/bitcast-16bit-1.invalid.comp +++ b/reference/shaders-msl/comp/bitcast-16bit-1.invalid.comp @@ -17,7 +17,7 @@ kernel void main0(device SSBO0& _25 [[buffer(0)]], device SSBO1& _39 [[buffer(1) { uint ident = gl_GlobalInvocationID.x; half2 a = as_type<half2>(_25.inputs[ident].xy); - _39.outputs[ident].x = int(as_type<uint>(a + half2(half(1), half(1)))); + _39.outputs[ident].x = int(as_type<uint>(a + half2(1.0h))); _39.outputs[ident].y = as_type<int>(_25.inputs[ident].zw); _39.outputs[ident].z = int(as_type<uint>(ushort2(_25.inputs[ident].xy))); } diff --git a/reference/shaders-msl/comp/spec-constant-op-member-array.comp b/reference/shaders-msl/comp/spec-constant-op-member-array.comp index 1d78f3f4..d3c8b7dc 100644 --- a/reference/shaders-msl/comp/spec-constant-op-member-array.comp +++ b/reference/shaders-msl/comp/spec-constant-op-member-array.comp @@ -28,14 +28,14 @@ struct B #define SPIRV_CROSS_CONSTANT_ID_2 300 #endif constant int c = SPIRV_CROSS_CONSTANT_ID_2; -constant int _18 = (c + 50); +constant int d = (c + 50); struct SSBO { A member_a; B member_b; int v[a]; - int w[_18]; + int w[d]; }; constant int e_tmp [[function_constant(3)]]; diff --git a/reference/shaders-msl/frag/spec-constant-ternary.frag b/reference/shaders-msl/frag/spec-constant-ternary.frag index 5ab6b4fc..05900650 100644 --- a/reference/shaders-msl/frag/spec-constant-ternary.frag +++ b/reference/shaders-msl/frag/spec-constant-ternary.frag @@ -6,7 +6,7 @@ using namespace metal; constant uint s_tmp [[function_constant(0)]]; constant uint s = is_function_constant_defined(s_tmp) ? s_tmp : 10u; constant bool _13 = (s > 20u); -constant uint _16 = _13 ? 30u : 50u; +constant uint f = _13 ? 30u : 50u; struct main0_out { @@ -16,7 +16,7 @@ struct main0_out fragment main0_out main0() { main0_out out = {}; - out.FragColor = float(_16); + out.FragColor = float(f); return out; } diff --git a/reference/shaders-msl/vert/resource-arrays-leaf.ios.vert b/reference/shaders-msl/vert/resource-arrays-leaf.ios.vert index bef2acc8..5c267630 100644 --- a/reference/shaders-msl/vert/resource-arrays-leaf.ios.vert +++ b/reference/shaders-msl/vert/resource-arrays-leaf.ios.vert @@ -28,14 +28,8 @@ void doWork(device storage_block* (&storage)[2], constant constant_block* (&cons storage[1]->quux = images[2].read(uint2(int2(constants[1]->bar))).xy; } -vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_block* storage_1 [[buffer(1)]], constant constant_block* constants_0 [[buffer(2)]], constant constant_block* constants_1 [[buffer(3)]], constant constant_block* constants_2 [[buffer(4)]], constant constant_block* constants_3 [[buffer(5)]], array<texture2d<int>, 3> images [[texture(0)]]) +vertex void main0(constant constant_block* constants_0 [[buffer(4)]], constant constant_block* constants_1 [[buffer(5)]], constant constant_block* constants_2 [[buffer(6)]], constant constant_block* constants_3 [[buffer(7)]], device storage_block* storage_0 [[buffer(8)]], device storage_block* storage_1 [[buffer(9)]], array<texture2d<int>, 3> images [[texture(0)]]) { - device storage_block* storage[] = - { - storage_0, - storage_1, - }; - constant constant_block* constants[] = { constants_0, @@ -43,7 +37,13 @@ vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_ constants_2, constants_3, }; - + + device storage_block* storage[] = + { + storage_0, + storage_1, + }; + doWork(storage, constants, images); } diff --git a/reference/shaders-msl/vert/resource-arrays.ios.vert b/reference/shaders-msl/vert/resource-arrays.ios.vert index 93704af2..543f7414 100644 --- a/reference/shaders-msl/vert/resource-arrays.ios.vert +++ b/reference/shaders-msl/vert/resource-arrays.ios.vert @@ -20,14 +20,14 @@ struct constant_block #endif constant int arraySize = SPIRV_CROSS_CONSTANT_ID_0; -vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_block* storage_1 [[buffer(1)]], constant constant_block* constants_0 [[buffer(2)]], constant constant_block* constants_1 [[buffer(3)]], constant constant_block* constants_2 [[buffer(4)]], constant constant_block* constants_3 [[buffer(5)]], array<texture2d<int>, 3> images [[texture(0)]]) +vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_block* storage_1 [[buffer(1)]], constant constant_block* constants_0 [[buffer(0)]], constant constant_block* constants_1 [[buffer(1)]], constant constant_block* constants_2 [[buffer(2)]], constant constant_block* constants_3 [[buffer(3)]], array<texture2d<int>, 3> images [[texture(0)]]) { device storage_block* storage[] = { storage_0, storage_1, }; - + constant constant_block* constants[] = { constants_0, @@ -35,7 +35,7 @@ vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_ constants_2, constants_3, }; - + storage[0]->baz = uint4(constants[3]->foo); storage[1]->quux = images[2].read(uint2(int2(constants[1]->bar))).xy; } diff --git a/reference/shaders/asm/comp/hlsl-functionality.asm.comp b/reference/shaders/asm/comp/hlsl-functionality.asm.comp index ae3bb1f8..e80f5240 100644 --- a/reference/shaders/asm/comp/hlsl-functionality.asm.comp +++ b/reference/shaders/asm/comp/hlsl-functionality.asm.comp @@ -6,7 +6,7 @@ layout(binding = 0, std430) buffer Buf vec4 _data[]; } Buf_1; -layout(std430) buffer Buf_count +layout(binding = 1, std430) buffer Buf_count { int _count; } Buf_count_1; diff --git a/reference/shaders/asm/frag/temporary-phi-hoisting.asm.frag b/reference/shaders/asm/frag/temporary-phi-hoisting.asm.frag index 3917594d..4cee76cc 100644 --- a/reference/shaders/asm/frag/temporary-phi-hoisting.asm.frag +++ b/reference/shaders/asm/frag/temporary-phi-hoisting.asm.frag @@ -5,7 +5,7 @@ struct MyStruct vec4 color; }; -layout(std140) uniform MyStruct_CB +layout(binding = 0, std140) uniform MyStruct_CB { MyStruct g_MyStruct[4]; } _6; diff --git a/reference/shaders/comp/bitcast-16bit-1.invalid.comp b/reference/shaders/comp/bitcast-16bit-1.invalid.comp index 7420586f..9844e719 100644 --- a/reference/shaders/comp/bitcast-16bit-1.invalid.comp +++ b/reference/shaders/comp/bitcast-16bit-1.invalid.comp @@ -31,7 +31,7 @@ void main() { uint ident = gl_GlobalInvocationID.x; f16vec2 a = int16BitsToFloat16(_25.inputs[ident].xy); - _39.outputs[ident].x = int(packFloat2x16(a + f16vec2(float16_t(1), float16_t(1)))); + _39.outputs[ident].x = int(packFloat2x16(a + f16vec2(1.0hf))); _39.outputs[ident].y = packInt2x16(_25.inputs[ident].zw); _39.outputs[ident].z = int(packUint2x16(u16vec2(_25.inputs[ident].xy))); } diff --git a/reference/shaders/desktop-only/vert/basic.desktop.sso.vert b/reference/shaders/desktop-only/vert/basic.desktop.sso.vert index 5f527e08..2f880398 100644 --- a/reference/shaders/desktop-only/vert/basic.desktop.sso.vert +++ b/reference/shaders/desktop-only/vert/basic.desktop.sso.vert @@ -5,7 +5,7 @@ out gl_PerVertex vec4 gl_Position; }; -layout(std140) uniform UBO +layout(binding = 0, std140) uniform UBO { mat4 uMVP; } _16; diff --git a/reference/shaders/tesc/water_tess.tesc b/reference/shaders/tesc/water_tess.tesc index 4daaa456..8d5a4a30 100644 --- a/reference/shaders/tesc/water_tess.tesc +++ b/reference/shaders/tesc/water_tess.tesc @@ -2,7 +2,7 @@ #extension GL_EXT_tessellation_shader : require layout(vertices = 1) out; -layout(std140) uniform UBO +layout(binding = 0, std140) uniform UBO { vec4 uScale; vec3 uCamPos; diff --git a/reference/shaders/vert/basic.vert b/reference/shaders/vert/basic.vert index 05504eb2..8f251cbe 100644 --- a/reference/shaders/vert/basic.vert +++ b/reference/shaders/vert/basic.vert @@ -1,6 +1,6 @@ #version 310 es -layout(std140) uniform UBO +layout(binding = 0, std140) uniform UBO { mat4 uMVP; } _16; diff --git a/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp b/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp index 33647a42..7c4c7ed6 100644 --- a/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp +++ b/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp @@ -26,7 +26,7 @@ struct B #define SPIRV_CROSS_CONSTANT_ID_2 300 #endif const int c = SPIRV_CROSS_CONSTANT_ID_2; -const int _18 = (c + 50); +const int d = (c + 50); #ifndef SPIRV_CROSS_CONSTANT_ID_3 #define SPIRV_CROSS_CONSTANT_ID_3 400 #endif @@ -37,7 +37,7 @@ layout(binding = 0, std430) buffer SSBO A member_a; B member_b; int v[a]; - int w[_18]; + int w[d]; } _22; void main() diff --git a/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk b/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk index cd68e93d..b7571b7a 100644 --- a/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk +++ b/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk @@ -17,7 +17,7 @@ struct B }; layout(constant_id = 2) const int c = 300; -const int _18 = (c + 50); +const int d = (c + 50); layout(constant_id = 3) const int e = 400; layout(set = 1, binding = 0, std430) buffer SSBO @@ -25,7 +25,7 @@ layout(set = 1, binding = 0, std430) buffer SSBO A member_a; B member_b; int v[a]; - int w[_18]; + int w[d]; } _22; void main() diff --git a/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag b/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag index e03dfcb9..081206f1 100644 --- a/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag +++ b/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag @@ -5,12 +5,12 @@ #endif const uint s = SPIRV_CROSS_CONSTANT_ID_0; const bool _13 = (s > 20u); -const uint _16 = _13 ? 30u : 50u; +const uint f = _13 ? 30u : 50u; layout(location = 0) out float FragColor; void main() { - FragColor = float(_16); + FragColor = float(f); } diff --git a/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk b/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk index 59d3b99b..34bfea02 100644 --- a/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk +++ b/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk @@ -2,12 +2,12 @@ layout(constant_id = 0) const uint s = 10u; const bool _13 = (s > 20u); -const uint _16 = _13 ? 30u : 50u; +const uint f = _13 ? 30u : 50u; layout(location = 0) out float FragColor; void main() { - FragColor = float(_16); + FragColor = float(f); } diff --git a/shaders-hlsl-no-opt/asm/vert/empty-struct-composite.asm.vert b/shaders-hlsl-no-opt/asm/vert/empty-struct-composite.asm.vert index 37a2d879..038ecaa6 100644 --- a/shaders-hlsl-no-opt/asm/vert/empty-struct-composite.asm.vert +++ b/shaders-hlsl-no-opt/asm/vert/empty-struct-composite.asm.vert @@ -7,7 +7,6 @@ %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %2 "main" - OpExecutionMode %2 OriginUpperLeft OpName %Test "Test" OpName %t "t" OpName %retvar "retvar" diff --git a/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert b/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert index 85acc47f..4587fc1e 100644 --- a/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert +++ b/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert @@ -22,8 +22,8 @@ OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance OpDecorate %gl_PerVertex Block - OpDecorate %gl_VertexID BuiltIn VertexId - OpDecorate %gl_InstanceID BuiltIn InstanceId + OpDecorate %gl_VertexID BuiltIn VertexIndex + OpDecorate %gl_InstanceID BuiltIn InstanceIndex %void = OpTypeVoid %3 = OpTypeFunction %void %float = OpTypeFloat 32 diff --git a/shaders-msl-no-opt/asm/vert/empty-struct-composite.asm.vert b/shaders-msl-no-opt/asm/vert/empty-struct-composite.asm.vert index 37a2d879..038ecaa6 100644 --- a/shaders-msl-no-opt/asm/vert/empty-struct-composite.asm.vert +++ b/shaders-msl-no-opt/asm/vert/empty-struct-composite.asm.vert @@ -7,7 +7,6 @@ %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %2 "main" - OpExecutionMode %2 OriginUpperLeft OpName %Test "Test" OpName %t "t" OpName %retvar "retvar" diff --git a/shaders-msl/asm/comp/buffer-write.asm.comp b/shaders-msl/asm/comp/buffer-write.asm.comp index aa7b3208..697324ba 100644 --- a/shaders-msl/asm/comp/buffer-write.asm.comp +++ b/shaders-msl/asm/comp/buffer-write.asm.comp @@ -22,6 +22,7 @@ OpDecorate %_ DescriptorSet 0 OpDecorate %_ Binding 7 OpDecorate %buffer DescriptorSet 0 + OpDecorate %buffer Binding 0 OpDecorate %group_id BuiltIn WorkgroupId OpDecorate %group_index BuiltIn LocalInvocationIndex %void = OpTypeVoid diff --git a/shaders-msl/asm/comp/multiple-entry.asm.comp b/shaders-msl/asm/comp/multiple-entry.asm.comp index 0cfb5543..9ddc07bc 100644 --- a/shaders-msl/asm/comp/multiple-entry.asm.comp +++ b/shaders-msl/asm/comp/multiple-entry.asm.comp @@ -9,6 +9,7 @@ OpEntryPoint Fragment %func_alt "main2" %frag_in %frag_out OpEntryPoint GLCompute %func "main" OpExecutionMode %func LocalSize 1 1 1 + OpExecutionMode %func_alt OriginUpperLeft OpSource ESSL 310 OpSourceExtension "GL_GOOGLE_cpp_style_line_directive" OpSourceExtension "GL_GOOGLE_include_directive" diff --git a/shaders-msl/asm/comp/struct-resource-name-aliasing.asm.comp b/shaders-msl/asm/comp/struct-resource-name-aliasing.asm.comp index 98d31537..384da305 100644 --- a/shaders-msl/asm/comp/struct-resource-name-aliasing.asm.comp +++ b/shaders-msl/asm/comp/struct-resource-name-aliasing.asm.comp @@ -20,6 +20,8 @@ OpDecorate %bufA BufferBlock OpDecorate %bufA_0 DescriptorSet 0 OpDecorate %bufB DescriptorSet 0 + OpDecorate %bufA_0 Binding 0 + OpDecorate %bufB Binding 1 %void = OpTypeVoid %3 = OpTypeFunction %void %uint = OpTypeInt 32 0 diff --git a/shaders-msl/asm/frag/default-member-names.asm.frag b/shaders-msl/asm/frag/default-member-names.asm.frag index 4d616fe4..ba493c0f 100644 --- a/shaders-msl/asm/frag/default-member-names.asm.frag +++ b/shaders-msl/asm/frag/default-member-names.asm.frag @@ -7,7 +7,7 @@ %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %2 "main" %3 - OpExecutionMode %2 OriginLowerLeft + OpExecutionMode %2 OriginUpperLeft OpDecorate %3 Location 0 %void = OpTypeVoid %9 = OpTypeFunction %void diff --git a/shaders-msl/asm/frag/extract-packed-from-composite.asm.frag b/shaders-msl/asm/frag/extract-packed-from-composite.asm.frag index e205a15c..b27f598a 100644 --- a/shaders-msl/asm/frag/extract-packed-from-composite.asm.frag +++ b/shaders-msl/asm/frag/extract-packed-from-composite.asm.frag @@ -34,6 +34,7 @@ OpMemberDecorate %buf 1 Offset 256 OpDecorate %buf Block OpDecorate %_ DescriptorSet 0 + OpDecorate %_ Binding 0 OpDecorate %pos_1 BuiltIn FragCoord OpDecorate %_entryPointOutput Location 0 %void = OpTypeVoid diff --git a/shaders-msl/asm/frag/locations-components.asm.frag b/shaders-msl/asm/frag/locations-components.asm.frag index bf8c6a69..16bfc525 100644 --- a/shaders-msl/asm/frag/locations-components.asm.frag +++ b/shaders-msl/asm/frag/locations-components.asm.frag @@ -6,6 +6,7 @@ OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %8 %16 %22 %28 %33 %o0 + OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %v1 "v1" OpName %v2 "v2" diff --git a/shaders-msl/asm/frag/op-image-sampled-image.asm.frag b/shaders-msl/asm/frag/op-image-sampled-image.asm.frag index 4dbede7b..bf7ec56d 100644 --- a/shaders-msl/asm/frag/op-image-sampled-image.asm.frag +++ b/shaders-msl/asm/frag/op-image-sampled-image.asm.frag @@ -6,6 +6,7 @@ OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %o0 + OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %t0 "t0" OpName %o0 "o0" diff --git a/shaders-msl/vert/resource-arrays-leaf.ios.vert b/shaders-msl/vert/resource-arrays-leaf.ios.vert index d097d598..b35c410f 100644 --- a/shaders-msl/vert/resource-arrays-leaf.ios.vert +++ b/shaders-msl/vert/resource-arrays-leaf.ios.vert @@ -3,12 +3,13 @@ layout(constant_id = 0) const int arraySize = 3; layout(binding = 0, rgba32i) uniform iimage2D images[arraySize]; -uniform constant_block +layout(binding = 4) uniform constant_block { vec4 foo; int bar; } constants[4]; -buffer storage_block + +layout(binding = 8) buffer storage_block { uvec4 baz; ivec2 quux; diff --git a/shaders-no-opt/asm/vert/empty-struct-composite.asm.vert b/shaders-no-opt/asm/vert/empty-struct-composite.asm.vert index 37a2d879..038ecaa6 100644 --- a/shaders-no-opt/asm/vert/empty-struct-composite.asm.vert +++ b/shaders-no-opt/asm/vert/empty-struct-composite.asm.vert @@ -7,7 +7,6 @@ %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %2 "main" - OpExecutionMode %2 OriginUpperLeft OpName %Test "Test" OpName %t "t" OpName %retvar "retvar" diff --git a/shaders/asm/comp/hlsl-functionality.asm.comp b/shaders/asm/comp/hlsl-functionality.asm.comp index dfdcb454..d4311139 100644 --- a/shaders/asm/comp/hlsl-functionality.asm.comp +++ b/shaders/asm/comp/hlsl-functionality.asm.comp @@ -26,6 +26,7 @@ OpMemberDecorate %Buf_count 0 Offset 0 OpDecorate %Buf_count BufferBlock OpDecorate %Buf_count_0 DescriptorSet 0 + OpDecorate %Buf_count_0 Binding 1 OpDecorateId %Buf_0 HlslCounterBufferGOOGLE %Buf_count_0 %void = OpTypeVoid %3 = OpTypeFunction %void diff --git a/shaders/asm/comp/multiple-entry.asm.comp b/shaders/asm/comp/multiple-entry.asm.comp index 0cfb5543..9ddc07bc 100644 --- a/shaders/asm/comp/multiple-entry.asm.comp +++ b/shaders/asm/comp/multiple-entry.asm.comp @@ -9,6 +9,7 @@ OpEntryPoint Fragment %func_alt "main2" %frag_in %frag_out OpEntryPoint GLCompute %func "main" OpExecutionMode %func LocalSize 1 1 1 + OpExecutionMode %func_alt OriginUpperLeft OpSource ESSL 310 OpSourceExtension "GL_GOOGLE_cpp_style_line_directive" OpSourceExtension "GL_GOOGLE_include_directive" diff --git a/shaders/asm/frag/default-member-names.asm.frag b/shaders/asm/frag/default-member-names.asm.frag index 4d616fe4..ba493c0f 100644 --- a/shaders/asm/frag/default-member-names.asm.frag +++ b/shaders/asm/frag/default-member-names.asm.frag @@ -7,7 +7,7 @@ %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %2 "main" %3 - OpExecutionMode %2 OriginLowerLeft + OpExecutionMode %2 OriginUpperLeft OpDecorate %3 Location 0 %void = OpTypeVoid %9 = OpTypeFunction %void diff --git a/shaders/asm/frag/locations-components.asm.frag b/shaders/asm/frag/locations-components.asm.frag index bf8c6a69..16bfc525 100644 --- a/shaders/asm/frag/locations-components.asm.frag +++ b/shaders/asm/frag/locations-components.asm.frag @@ -6,6 +6,7 @@ OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %8 %16 %22 %28 %33 %o0 + OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %v1 "v1" OpName %v2 "v2" diff --git a/shaders/asm/frag/temporary-phi-hoisting.asm.frag b/shaders/asm/frag/temporary-phi-hoisting.asm.frag index 7cedcd58..977c20ac 100644 --- a/shaders/asm/frag/temporary-phi-hoisting.asm.frag +++ b/shaders/asm/frag/temporary-phi-hoisting.asm.frag @@ -21,6 +21,7 @@ OpMemberDecorate %MyStruct_CB 0 Offset 0 OpDecorate %MyStruct_CB Block OpDecorate %_ DescriptorSet 0 + OpDecorate %_ Binding 0 OpDecorate %_entryPointOutput Location 0 %void = OpTypeVoid %3 = OpTypeFunction %void diff --git a/spirv_hlsl.cpp b/spirv_hlsl.cpp index 0da312e4..b2102f1b 100644 --- a/spirv_hlsl.cpp +++ b/spirv_hlsl.cpp @@ -2909,7 +2909,12 @@ string CompilerHLSL::to_resource_binding(const SPIRVariable &var) else if (storage == StorageClassPushConstant) space = 'b'; // Constant buffers else if (storage == StorageClassStorageBuffer) - space = 'u'; // UAV + { + // UAV or SRV depending on readonly flag. + Bitset flags = ir.get_buffer_block_flags(var); + bool is_readonly = flags.get(DecorationNonWritable); + space = is_readonly ? 't' : 'u'; + } break; } @@ -3538,8 +3543,14 @@ void CompilerHLSL::emit_access_chain(const Instruction &instruction) bool need_byte_access_chain = false; auto &type = expression_type(ops[2]); - const SPIRAccessChain *chain = nullptr; - if (type.storage == StorageClassStorageBuffer || has_decoration(type.self, DecorationBufferBlock)) + const auto *chain = maybe_get<SPIRAccessChain>(ops[2]); + + if (chain) + { + // Keep tacking on an existing access chain. + need_byte_access_chain = true; + } + else if (type.storage == StorageClassStorageBuffer || has_decoration(type.self, DecorationBufferBlock)) { // If we are starting to poke into an SSBO, we are dealing with ByteAddressBuffers, and we need // to emit SPIRAccessChain rather than a plain SPIRExpression. @@ -3547,13 +3558,6 @@ void CompilerHLSL::emit_access_chain(const Instruction &instruction) if (chain_arguments > type.array.size()) need_byte_access_chain = true; } - else - { - // Keep tacking on an existing access chain. - chain = maybe_get<SPIRAccessChain>(ops[2]); - if (chain) - need_byte_access_chain = true; - } if (need_byte_access_chain) { diff --git a/spirv_msl.cpp b/spirv_msl.cpp index fd90160f..9467f03f 100644 --- a/spirv_msl.cpp +++ b/spirv_msl.cpp @@ -369,7 +369,7 @@ void CompilerMSL::emit_entry_point_declarations() for (uint32_t i = 0; i < type.array[0]; ++i) statement(name + "_" + convert_to_string(i) + ","); end_scope_decl(); - statement(""); + statement_no_indent(""); } // For some reason, without this, we end up emitting the arrays twice. buffer_arrays.clear(); diff --git a/spirv_reflect.cpp b/spirv_reflect.cpp index 75f7a308..54eb64fb 100644 --- a/spirv_reflect.cpp +++ b/spirv_reflect.cpp @@ -475,7 +475,8 @@ void CompilerReflection::emit_resources(const char *tag, const vector<Resource> { bool is_sized_block = is_block && (get_storage_class(res.id) == StorageClassUniform || - get_storage_class(res.id) == StorageClassUniformConstant); + get_storage_class(res.id) == StorageClassUniformConstant || + get_storage_class(res.id) == StorageClassStorageBuffer); if (is_sized_block) { uint32_t block_size = uint32_t(get_declared_struct_size(get_type(res.base_type_id))); |