summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm')
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/access-chain-invalidate.asm.comp61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-decrement.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-increment.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/block-name-alias-global.asm.comp119
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/control-flow-hints.asm.comp146
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/global-parameter-name-alias.asm.comp102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/nmin-max-clamp.asm.comp203
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/storage-buffer-basic.invalid.nofxc.asm.comp57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/cbuffer-stripped.asm.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/combined-sampler-reuse.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/empty-struct.asm.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/frem.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/function-overload-alias.asm.frag153
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/image-extract-reuse.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/implicit-read-dep-phi.asm.frag81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/inf-nan-constant.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/line-directive.line.asm.frag221
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/lut-promotion-initializer.asm.frag195
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/pass-by-value.asm.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/sample-and-compare.asm.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/single-function-private-lut.asm.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/srem.asm.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/storage-class-output-initializer.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texel-fetch-no-lod.asm.frag46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texture-sampling-fp16.asm.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unknown-depth-state.asm.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unreachable.asm.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert141
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/spec-constant-op-composite.asm.vert98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/uint-vertex-id-instance-id.asm.vert65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert53
31 files changed, 2622 insertions, 0 deletions
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/access-chain-invalidate.asm.comp b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/access-chain-invalidate.asm.comp
new file mode 100644
index 00000000000..6e6ced12283
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/access-chain-invalidate.asm.comp
@@ -0,0 +1,61 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Google Shaderc over Glslang; 7
+; Bound: 41
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %main "main"
+ OpExecutionMode %main LocalSize 1 1 1
+ OpSource GLSL 450
+ OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
+ OpSourceExtension "GL_GOOGLE_include_directive"
+ OpName %main "main"
+ OpName %SSBO "SSBO"
+ OpMemberName %SSBO 0 "index"
+ OpMemberName %SSBO 1 "array"
+ OpName %_ ""
+ OpDecorate %_arr_uint_uint_64 ArrayStride 4
+ OpMemberDecorate %SSBO 0 Offset 0
+ OpMemberDecorate %SSBO 1 Offset 4
+ OpDecorate %SSBO BufferBlock
+ OpDecorate %_ DescriptorSet 0
+ OpDecorate %_ Binding 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+ %SSBO = OpTypeStruct %uint %_arr_uint_uint_64
+%_ptr_Uniform_SSBO = OpTypePointer Uniform %SSBO
+ %_ = OpVariable %_ptr_Uniform_SSBO Uniform
+ %int = OpTypeInt 32 1
+ %int_1 = OpConstant %int 1
+ %int_0 = OpConstant %int 0
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+ %uint_0 = OpConstant %uint 0
+ %bool = OpTypeBool
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %18 = OpAccessChain %_ptr_Uniform_uint %_ %int_0
+ %19 = OpLoad %uint %18
+ %20 = OpAccessChain %_ptr_Uniform_uint %_ %int_1 %19
+ %21 = OpLoad %uint %20
+ OpBranch %24
+ %24 = OpLabel
+ %40 = OpPhi %uint %uint_0 %5 %35 %25
+ %31 = OpULessThan %bool %40 %uint_64
+ OpLoopMerge %26 %25 None
+ OpBranchConditional %31 %25 %26
+ %25 = OpLabel
+ %33 = OpAccessChain %_ptr_Uniform_uint %_ %int_1 %40
+ OpStore %33 %uint_0
+ %35 = OpIAdd %uint %40 %int_1
+ OpBranch %24
+ %26 = OpLabel
+ %37 = OpLoad %uint %18
+ %39 = OpAccessChain %_ptr_Uniform_uint %_ %int_1 %37
+ OpStore %39 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-decrement.asm.comp b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-decrement.asm.comp
new file mode 100644
index 00000000000..f716cbb944a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-decrement.asm.comp
@@ -0,0 +1,71 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Wine VKD3D Shader Compiler; 0
+; Bound: 43
+; Schema: 0
+ OpCapability Shader
+ OpCapability SampledBuffer
+ OpCapability ImageBuffer
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %3 "main" %15
+ OpExecutionMode %3 LocalSize 4 1 1
+ OpName %3 "main"
+ OpName %8 "u0"
+ OpName %9 "u0_counters"
+ OpMemberName %9 0 "c"
+ OpName %11 "u0_counter"
+ OpName %15 "vThreadID"
+ OpName %19 "r0"
+ OpDecorate %8 DescriptorSet 0
+ OpDecorate %8 Binding 0
+ OpMemberDecorate %9 0 Offset 0
+ OpDecorate %9 BufferBlock
+ OpDecorate %11 DescriptorSet 1
+ OpDecorate %11 Binding 1
+ OpDecorate %15 BuiltIn GlobalInvocationId
+ %1 = OpTypeVoid
+ %2 = OpTypeFunction %1
+ %5 = OpTypeInt 32 0
+ %6 = OpTypeImage %5 Buffer 0 0 0 2 R32ui
+ %7 = OpTypePointer UniformConstant %6
+ %8 = OpVariable %7 UniformConstant
+ %9 = OpTypeStruct %5
+ %10 = OpTypePointer Uniform %9
+ %11 = OpVariable %10 Uniform
+ %12 = OpTypeInt 32 1
+ %13 = OpTypeVector %12 3
+ %14 = OpTypePointer Input %13
+ %15 = OpVariable %14 Input
+ %16 = OpTypeFloat 32
+ %17 = OpTypeVector %16 4
+ %18 = OpTypePointer Function %17
+ %20 = OpTypePointer Uniform %5
+ %21 = OpConstant %5 0
+ %23 = OpConstant %5 1
+ %26 = OpTypePointer Function %16
+ %33 = OpConstant %12 0
+ %34 = OpConstant %5 2
+ %37 = OpTypePointer Input %12
+ %41 = OpTypeVector %5 4
+ %3 = OpFunction %1 None %2
+ %4 = OpLabel
+ %19 = OpVariable %18 Function
+ %22 = OpAccessChain %20 %11 %21
+ %24 = OpAtomicIDecrement %5 %22 %23 %21
+ %25 = OpBitcast %16 %24
+ %27 = OpInBoundsAccessChain %26 %19 %21
+ OpStore %27 %25
+ %28 = OpLoad %6 %8
+ %29 = OpInBoundsAccessChain %26 %19 %21
+ %30 = OpLoad %16 %29
+ %31 = OpBitcast %12 %30
+ %32 = OpIMul %5 %31 %23
+ %35 = OpShiftRightLogical %5 %33 %34
+ %36 = OpIAdd %5 %32 %35
+ %38 = OpInBoundsAccessChain %37 %15 %21
+ %39 = OpLoad %12 %38
+ %40 = OpBitcast %5 %39
+ %42 = OpCompositeConstruct %41 %40 %40 %40 %40
+ OpImageWrite %28 %36 %42
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-increment.asm.comp b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-increment.asm.comp
new file mode 100644
index 00000000000..40c1de3b9dd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-increment.asm.comp
@@ -0,0 +1,71 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Wine VKD3D Shader Compiler; 0
+; Bound: 43
+; Schema: 0
+ OpCapability Shader
+ OpCapability SampledBuffer
+ OpCapability ImageBuffer
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %3 "main" %15
+ OpExecutionMode %3 LocalSize 4 1 1
+ OpName %3 "main"
+ OpName %8 "u0"
+ OpName %9 "u0_counters"
+ OpMemberName %9 0 "c"
+ OpName %11 "u0_counter"
+ OpName %15 "vThreadID"
+ OpName %19 "r0"
+ OpDecorate %8 DescriptorSet 0
+ OpDecorate %8 Binding 0
+ OpMemberDecorate %9 0 Offset 0
+ OpDecorate %9 BufferBlock
+ OpDecorate %11 DescriptorSet 1
+ OpDecorate %11 Binding 1
+ OpDecorate %15 BuiltIn GlobalInvocationId
+ %1 = OpTypeVoid
+ %2 = OpTypeFunction %1
+ %5 = OpTypeInt 32 0
+ %6 = OpTypeImage %5 Buffer 0 0 0 2 R32ui
+ %7 = OpTypePointer UniformConstant %6
+ %8 = OpVariable %7 UniformConstant
+ %9 = OpTypeStruct %5
+ %10 = OpTypePointer Uniform %9
+ %11 = OpVariable %10 Uniform
+ %12 = OpTypeInt 32 1
+ %13 = OpTypeVector %12 3
+ %14 = OpTypePointer Input %13
+ %15 = OpVariable %14 Input
+ %16 = OpTypeFloat 32
+ %17 = OpTypeVector %16 4
+ %18 = OpTypePointer Function %17
+ %20 = OpTypePointer Uniform %5
+ %21 = OpConstant %5 0
+ %23 = OpConstant %5 1
+ %26 = OpTypePointer Function %16
+ %33 = OpConstant %12 0
+ %34 = OpConstant %5 2
+ %37 = OpTypePointer Input %12
+ %41 = OpTypeVector %5 4
+ %3 = OpFunction %1 None %2
+ %4 = OpLabel
+ %19 = OpVariable %18 Function
+ %22 = OpAccessChain %20 %11 %21
+ %24 = OpAtomicIIncrement %5 %22 %23 %21
+ %25 = OpBitcast %16 %24
+ %27 = OpInBoundsAccessChain %26 %19 %21
+ OpStore %27 %25
+ %28 = OpLoad %6 %8
+ %29 = OpInBoundsAccessChain %26 %19 %21
+ %30 = OpLoad %16 %29
+ %31 = OpBitcast %12 %30
+ %32 = OpIMul %5 %31 %23
+ %35 = OpShiftRightLogical %5 %33 %34
+ %36 = OpIAdd %5 %32 %35
+ %38 = OpInBoundsAccessChain %37 %15 %21
+ %39 = OpLoad %12 %38
+ %40 = OpBitcast %5 %39
+ %42 = OpCompositeConstruct %41 %40 %40 %40 %40
+ OpImageWrite %28 %36 %42
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/block-name-alias-global.asm.comp b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/block-name-alias-global.asm.comp
new file mode 100644
index 00000000000..85f6cc04148
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/block-name-alias-global.asm.comp
@@ -0,0 +1,119 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 59
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID
+ OpExecutionMode %main LocalSize 1 1 1
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %Foo "A"
+ OpMemberName %Foo 0 "a"
+ OpMemberName %Foo 1 "b"
+ OpName %A "A"
+ OpMemberName %A 0 "Data"
+ OpName %C1 "C1"
+ OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
+ OpName %Foo_0 "A"
+ OpMemberName %Foo_0 0 "a"
+ OpMemberName %Foo_0 1 "b"
+ OpName %A_0 "A"
+ OpMemberName %A_0 0 "Data"
+ OpName %C2 "C2"
+ OpName %B "B"
+ OpMemberName %B 0 "Data"
+ OpName %C3 "C3"
+ OpName %B_0 "B"
+ OpMemberName %B_0 0 "Data"
+ OpName %C4 "C4"
+ OpMemberDecorate %Foo 0 Offset 0
+ OpMemberDecorate %Foo 1 Offset 4
+ OpDecorate %_runtimearr_Foo ArrayStride 8
+ OpMemberDecorate %A 0 Offset 0
+ OpDecorate %A BufferBlock
+ OpDecorate %C1 DescriptorSet 0
+ OpDecorate %C1 Binding 1
+ OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
+ OpMemberDecorate %Foo_0 0 Offset 0
+ OpMemberDecorate %Foo_0 1 Offset 4
+ OpDecorate %_arr_Foo_0_uint_1024 ArrayStride 16
+ OpMemberDecorate %A_0 0 Offset 0
+ OpDecorate %A_0 Block
+ OpDecorate %C2 DescriptorSet 0
+ OpDecorate %C2 Binding 2
+ OpDecorate %_runtimearr_Foo_0 ArrayStride 8
+ OpMemberDecorate %B 0 Offset 0
+ OpDecorate %B BufferBlock
+ OpDecorate %C3 DescriptorSet 0
+ OpDecorate %C3 Binding 0
+ OpDecorate %_arr_Foo_0_uint_1024_0 ArrayStride 16
+ OpMemberDecorate %B_0 0 Offset 0
+ OpDecorate %B_0 Block
+ OpDecorate %C4 DescriptorSet 0
+ OpDecorate %C4 Binding 3
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %int = OpTypeInt 32 1
+ %Foo = OpTypeStruct %int %int
+%_runtimearr_Foo = OpTypeRuntimeArray %Foo
+ %A = OpTypeStruct %_runtimearr_Foo
+%_ptr_Uniform_A = OpTypePointer Uniform %A
+ %C1 = OpVariable %_ptr_Uniform_A Uniform
+ %int_0 = OpConstant %int 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
+ %uint_0 = OpConstant %uint 0
+%_ptr_Input_uint = OpTypePointer Input %uint
+ %Foo_0 = OpTypeStruct %int %int
+ %uint_1024 = OpConstant %uint 1024
+%_arr_Foo_0_uint_1024 = OpTypeArray %Foo_0 %uint_1024
+ %A_0 = OpTypeStruct %_arr_Foo_0_uint_1024
+%_ptr_Uniform_A_0 = OpTypePointer Uniform %A_0
+ %C2 = OpVariable %_ptr_Uniform_A_0 Uniform
+%_ptr_Uniform_Foo_0 = OpTypePointer Uniform %Foo_0
+%_ptr_Uniform_Foo = OpTypePointer Uniform %Foo
+%_ptr_Uniform_int = OpTypePointer Uniform %int
+ %int_1 = OpConstant %int 1
+%_runtimearr_Foo_0 = OpTypeRuntimeArray %Foo
+ %B = OpTypeStruct %_runtimearr_Foo_0
+%_ptr_Uniform_B = OpTypePointer Uniform %B
+ %C3 = OpVariable %_ptr_Uniform_B Uniform
+%_arr_Foo_0_uint_1024_0 = OpTypeArray %Foo_0 %uint_1024
+ %B_0 = OpTypeStruct %_arr_Foo_0_uint_1024_0
+%_ptr_Uniform_B_0 = OpTypePointer Uniform %B_0
+ %C4 = OpVariable %_ptr_Uniform_B_0 Uniform
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %19 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %20 = OpLoad %uint %19
+ %27 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %28 = OpLoad %uint %27
+ %30 = OpAccessChain %_ptr_Uniform_Foo_0 %C2 %int_0 %28
+ %31 = OpLoad %Foo_0 %30
+ %33 = OpAccessChain %_ptr_Uniform_Foo %C1 %int_0 %20
+ %34 = OpCompositeExtract %int %31 0
+ %36 = OpAccessChain %_ptr_Uniform_int %33 %int_0
+ OpStore %36 %34
+ %37 = OpCompositeExtract %int %31 1
+ %39 = OpAccessChain %_ptr_Uniform_int %33 %int_1
+ OpStore %39 %37
+ %44 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %45 = OpLoad %uint %44
+ %50 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %51 = OpLoad %uint %50
+ %52 = OpAccessChain %_ptr_Uniform_Foo_0 %C4 %int_0 %51
+ %53 = OpLoad %Foo_0 %52
+ %54 = OpAccessChain %_ptr_Uniform_Foo %C3 %int_0 %45
+ %55 = OpCompositeExtract %int %53 0
+ %56 = OpAccessChain %_ptr_Uniform_int %54 %int_0
+ OpStore %56 %55
+ %57 = OpCompositeExtract %int %53 1
+ %58 = OpAccessChain %_ptr_Uniform_int %54 %int_1
+ OpStore %58 %57
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/control-flow-hints.asm.comp b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/control-flow-hints.asm.comp
new file mode 100644
index 00000000000..74a15955c25
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/control-flow-hints.asm.comp
@@ -0,0 +1,146 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 85
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %main "main"
+ OpExecutionMode %main LocalSize 1 1 1
+ OpSource HLSL 500
+ OpName %main "main"
+ OpName %_main_ "@main("
+ OpName %i "i"
+ OpName %bar "bar"
+ OpMemberName %bar 0 "@data"
+ OpName %bar_0 "bar"
+ OpName %foo "foo"
+ OpName %i_0 "i"
+ OpName %v "v"
+ OpName %w "w"
+ OpName %value "value"
+ OpDecorate %_runtimearr_v4float ArrayStride 16
+ OpMemberDecorate %bar 0 Offset 0
+ OpDecorate %bar BufferBlock
+ OpDecorate %bar_0 DescriptorSet 0
+ OpDecorate %bar_0 Binding 0
+ OpDecorate %foo DescriptorSet 0
+ OpDecorate %foo Binding 1
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %int = OpTypeInt 32 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_0 = OpConstant %int 0
+ %int_16 = OpConstant %int 16
+ %bool = OpTypeBool
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_runtimearr_v4float = OpTypeRuntimeArray %v4float
+ %bar = OpTypeStruct %_runtimearr_v4float
+%_ptr_Uniform_bar = OpTypePointer Uniform %bar
+ %bar_0 = OpVariable %_ptr_Uniform_bar Uniform
+ %foo = OpVariable %_ptr_Uniform_bar Uniform
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+ %int_1 = OpConstant %int 1
+ %int_15 = OpConstant %int 15
+%_ptr_Function_float = OpTypePointer Function %float
+ %int_10 = OpConstant %int 10
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Uniform_float = OpTypePointer Uniform %float
+ %float_10 = OpConstant %float 10
+ %int_20 = OpConstant %int 20
+ %float_5 = OpConstant %float 5
+ %72 = OpConstantComposite %v4float %float_5 %float_5 %float_5 %float_5
+ %float_20 = OpConstant %float 20
+ %float_40 = OpConstant %float 40
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %84 = OpFunctionCall %void %_main_
+ OpReturn
+ OpFunctionEnd
+ %_main_ = OpFunction %void None %3
+ %7 = OpLabel
+ %i = OpVariable %_ptr_Function_int Function
+ %i_0 = OpVariable %_ptr_Function_int Function
+ %v = OpVariable %_ptr_Function_float Function
+ %w = OpVariable %_ptr_Function_float Function
+ %value = OpVariable %_ptr_Function_float Function
+ OpStore %i %int_0
+ OpBranch %12
+ %12 = OpLabel
+ OpLoopMerge %14 %15 Unroll
+ OpBranch %16
+ %16 = OpLabel
+ %17 = OpLoad %int %i
+ %20 = OpSLessThan %bool %17 %int_16
+ OpBranchConditional %20 %13 %14
+ %13 = OpLabel
+ %27 = OpLoad %int %i
+ %29 = OpLoad %int %i
+ %31 = OpAccessChain %_ptr_Uniform_v4float %foo %int_0 %29
+ %32 = OpLoad %v4float %31
+ %33 = OpAccessChain %_ptr_Uniform_v4float %bar_0 %int_0 %27
+ OpStore %33 %32
+ OpBranch %15
+ %15 = OpLabel
+ %34 = OpLoad %int %i
+ %36 = OpIAdd %int %34 %int_1
+ OpStore %i %36
+ OpBranch %12
+ %14 = OpLabel
+ OpStore %i_0 %int_0
+ OpBranch %38
+ %38 = OpLabel
+ OpLoopMerge %40 %41 DontUnroll
+ OpBranch %42
+ %42 = OpLabel
+ %43 = OpLoad %int %i_0
+ %44 = OpSLessThan %bool %43 %int_16
+ OpBranchConditional %44 %39 %40
+ %39 = OpLabel
+ %46 = OpLoad %int %i_0
+ %47 = OpISub %int %int_15 %46
+ %48 = OpLoad %int %i_0
+ %49 = OpAccessChain %_ptr_Uniform_v4float %foo %int_0 %48
+ %50 = OpLoad %v4float %49
+ %51 = OpAccessChain %_ptr_Uniform_v4float %bar_0 %int_0 %47
+ OpStore %51 %50
+ OpBranch %41
+ %41 = OpLabel
+ %52 = OpLoad %int %i_0
+ %53 = OpIAdd %int %52 %int_1
+ OpStore %i_0 %53
+ OpBranch %38
+ %40 = OpLabel
+ %60 = OpAccessChain %_ptr_Uniform_float %bar_0 %int_0 %int_10 %uint_0
+ %61 = OpLoad %float %60
+ OpStore %v %61
+ %63 = OpAccessChain %_ptr_Uniform_float %foo %int_0 %int_10 %uint_0
+ %64 = OpLoad %float %63
+ OpStore %w %64
+ %65 = OpLoad %float %v
+ %67 = OpFOrdGreaterThan %bool %65 %float_10
+ OpSelectionMerge %69 DontFlatten
+ OpBranchConditional %67 %68 %69
+ %68 = OpLabel
+ %73 = OpAccessChain %_ptr_Uniform_v4float %foo %int_0 %int_20
+ OpStore %73 %72
+ OpBranch %69
+ %69 = OpLabel
+ OpStore %value %float_20
+ %76 = OpLoad %float %w
+ %78 = OpFOrdGreaterThan %bool %76 %float_40
+ OpSelectionMerge %80 Flatten
+ OpBranchConditional %78 %79 %80
+ %79 = OpLabel
+ OpStore %value %float_20
+ OpBranch %80
+ %80 = OpLabel
+ %81 = OpLoad %float %value
+ %82 = OpCompositeConstruct %v4float %81 %81 %81 %81
+ %83 = OpAccessChain %_ptr_Uniform_v4float %foo %int_0 %int_20
+ OpStore %83 %82
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/global-parameter-name-alias.asm.comp b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/global-parameter-name-alias.asm.comp
new file mode 100644
index 00000000000..78b1dc74e85
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/global-parameter-name-alias.asm.comp
@@ -0,0 +1,102 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 61
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %main "main" %id_1
+ OpExecutionMode %main LocalSize 1 1 1
+ OpSource HLSL 500
+ OpName %main "main"
+ OpName %Load_u1_ "Load(u1;"
+ OpName %size "size"
+ OpName %_main_vu3_ "@main(vu3;"
+ OpName %id "id"
+ OpName %data "data"
+ OpName %byteAddrTemp "byteAddrTemp"
+ OpName %ssbo "ssbo"
+ OpMemberName %ssbo 0 "@data"
+ OpName %ssbo_0 "ssbo"
+ OpName %param "param"
+ OpName %id_0 "id"
+ OpName %id_1 "id"
+ OpName %param_0 "param"
+ OpDecorate %_runtimearr_uint ArrayStride 4
+ OpMemberDecorate %ssbo 0 NonWritable
+ OpMemberDecorate %ssbo 0 Offset 0
+ OpDecorate %ssbo BufferBlock
+ OpDecorate %ssbo_0 DescriptorSet 0
+ OpDecorate %ssbo_0 Binding 1
+ OpDecorate %id_1 BuiltIn GlobalInvocationId
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %8 = OpTypeFunction %void %_ptr_Function_uint
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %14 = OpTypeFunction %void %_ptr_Function_v3uint
+ %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %int = OpTypeInt 32 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_2 = OpConstant %int 2
+%_runtimearr_uint = OpTypeRuntimeArray %uint
+ %ssbo = OpTypeStruct %_runtimearr_uint
+%_ptr_Uniform_ssbo = OpTypePointer Uniform %ssbo
+ %ssbo_0 = OpVariable %_ptr_Uniform_ssbo Uniform
+ %int_0 = OpConstant %int 0
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+ %int_1 = OpConstant %int 1
+ %int_3 = OpConstant %int 3
+ %uint_4 = OpConstant %uint 4
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+ %id_1 = OpVariable %_ptr_Input_v3uint Input
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %id_0 = OpVariable %_ptr_Function_v3uint Function
+ %param_0 = OpVariable %_ptr_Function_v3uint Function
+ %57 = OpLoad %v3uint %id_1
+ OpStore %id_0 %57
+ %59 = OpLoad %v3uint %id_0
+ OpStore %param_0 %59
+ %60 = OpFunctionCall %void %_main_vu3_ %param_0
+ OpReturn
+ OpFunctionEnd
+ %Load_u1_ = OpFunction %void None %8
+ %size = OpFunctionParameter %_ptr_Function_uint
+ %11 = OpLabel
+ %data = OpVariable %_ptr_Function_v4uint Function
+%byteAddrTemp = OpVariable %_ptr_Function_int Function
+ %24 = OpLoad %uint %size
+ %26 = OpShiftRightLogical %int %24 %int_2
+ OpStore %byteAddrTemp %26
+ %32 = OpLoad %int %byteAddrTemp
+ %34 = OpAccessChain %_ptr_Uniform_uint %ssbo_0 %int_0 %32
+ %35 = OpLoad %uint %34
+ %36 = OpLoad %int %byteAddrTemp
+ %38 = OpIAdd %int %36 %int_1
+ %39 = OpAccessChain %_ptr_Uniform_uint %ssbo_0 %int_0 %38
+ %40 = OpLoad %uint %39
+ %41 = OpLoad %int %byteAddrTemp
+ %42 = OpIAdd %int %41 %int_2
+ %43 = OpAccessChain %_ptr_Uniform_uint %ssbo_0 %int_0 %42
+ %44 = OpLoad %uint %43
+ %45 = OpLoad %int %byteAddrTemp
+ %47 = OpIAdd %int %45 %int_3
+ %48 = OpAccessChain %_ptr_Uniform_uint %ssbo_0 %int_0 %47
+ %49 = OpLoad %uint %48
+ %50 = OpCompositeConstruct %v4uint %35 %40 %44 %49
+ OpStore %data %50
+ OpReturn
+ OpFunctionEnd
+ %_main_vu3_ = OpFunction %void None %14
+ %id = OpFunctionParameter %_ptr_Function_v3uint
+ %17 = OpLabel
+ %param = OpVariable %_ptr_Function_uint Function
+ OpStore %param %uint_4
+ %53 = OpFunctionCall %void %Load_u1_ %param
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/nmin-max-clamp.asm.comp b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/nmin-max-clamp.asm.comp
new file mode 100644
index 00000000000..6c060eedad9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/nmin-max-clamp.asm.comp
@@ -0,0 +1,203 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Khronos SPIR-V Tools Assembler; 0
+; Bound: 139
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %main "main"
+ OpExecutionMode %main LocalSize 1 1 1
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %SSBO "SSBO"
+ OpMemberName %SSBO 0 "a1"
+ OpMemberName %SSBO 1 "a2"
+ OpMemberName %SSBO 2 "a3"
+ OpMemberName %SSBO 3 "a4"
+ OpMemberName %SSBO 4 "b1"
+ OpMemberName %SSBO 5 "b2"
+ OpMemberName %SSBO 6 "b3"
+ OpMemberName %SSBO 7 "b4"
+ OpMemberName %SSBO 8 "c1"
+ OpMemberName %SSBO 9 "c2"
+ OpMemberName %SSBO 10 "c3"
+ OpMemberName %SSBO 11 "c4"
+ OpName %_ ""
+ OpName %i "i"
+ OpMemberDecorate %SSBO 0 Offset 0
+ OpMemberDecorate %SSBO 1 Offset 8
+ OpMemberDecorate %SSBO 2 Offset 16
+ OpMemberDecorate %SSBO 3 Offset 32
+ OpMemberDecorate %SSBO 4 Offset 48
+ OpMemberDecorate %SSBO 5 Offset 56
+ OpMemberDecorate %SSBO 6 Offset 64
+ OpMemberDecorate %SSBO 7 Offset 80
+ OpMemberDecorate %SSBO 8 Offset 96
+ OpMemberDecorate %SSBO 9 Offset 104
+ OpMemberDecorate %SSBO 10 Offset 112
+ OpMemberDecorate %SSBO 11 Offset 128
+ OpDecorate %SSBO BufferBlock
+ OpDecorate %_ DescriptorSet 0
+ OpDecorate %_ Binding 0
+ %void = OpTypeVoid
+ %7 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+ %v3float = OpTypeVector %float 3
+ %v4float = OpTypeVector %float 4
+ %SSBO = OpTypeStruct %float %v2float %v3float %v4float %float %v2float %v3float %v4float %float %v2float %v3float %v4float
+%_ptr_Uniform_SSBO = OpTypePointer Uniform %SSBO
+ %_ = OpVariable %_ptr_Uniform_SSBO Uniform
+ %int = OpTypeInt 32 1
+ %int_0 = OpConstant %int 0
+ %int_4 = OpConstant %int 4
+%_ptr_Uniform_float = OpTypePointer Uniform %float
+ %int_8 = OpConstant %int 8
+ %int_1 = OpConstant %int 1
+ %int_5 = OpConstant %int 5
+%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
+ %int_9 = OpConstant %int 9
+ %int_2 = OpConstant %int 2
+ %int_6 = OpConstant %int 6
+%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
+ %int_10 = OpConstant %int 10
+ %int_3 = OpConstant %int 3
+ %int_7 = OpConstant %int 7
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+ %int_11 = OpConstant %int 11
+%_ptr_Function_int = OpTypePointer Function %int
+ %bool = OpTypeBool
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+ %uint_1 = OpConstant %uint 1
+ %main = OpFunction %void None %7
+ %35 = OpLabel
+ %i = OpVariable %_ptr_Function_int Function
+ %36 = OpAccessChain %_ptr_Uniform_float %_ %int_4
+ %37 = OpLoad %float %36
+ %38 = OpAccessChain %_ptr_Uniform_float %_ %int_8
+ %39 = OpLoad %float %38
+ %40 = OpExtInst %float %1 NMin %37 %39
+ %41 = OpAccessChain %_ptr_Uniform_float %_ %int_0
+ OpStore %41 %40
+ %42 = OpAccessChain %_ptr_Uniform_v2float %_ %int_5
+ %43 = OpLoad %v2float %42
+ %44 = OpAccessChain %_ptr_Uniform_v2float %_ %int_9
+ %45 = OpLoad %v2float %44
+ %46 = OpExtInst %v2float %1 NMin %43 %45
+ %47 = OpAccessChain %_ptr_Uniform_v2float %_ %int_1
+ OpStore %47 %46
+ %48 = OpAccessChain %_ptr_Uniform_v3float %_ %int_6
+ %49 = OpLoad %v3float %48
+ %50 = OpAccessChain %_ptr_Uniform_v3float %_ %int_10
+ %51 = OpLoad %v3float %50
+ %52 = OpExtInst %v3float %1 NMin %49 %51
+ %53 = OpAccessChain %_ptr_Uniform_v3float %_ %int_2
+ OpStore %53 %52
+ %54 = OpAccessChain %_ptr_Uniform_v4float %_ %int_7
+ %55 = OpLoad %v4float %54
+ %56 = OpAccessChain %_ptr_Uniform_v4float %_ %int_11
+ %57 = OpLoad %v4float %56
+ %58 = OpExtInst %v4float %1 NMin %55 %57
+ %59 = OpAccessChain %_ptr_Uniform_v4float %_ %int_3
+ OpStore %59 %58
+ %60 = OpAccessChain %_ptr_Uniform_float %_ %int_4
+ %61 = OpLoad %float %60
+ %62 = OpAccessChain %_ptr_Uniform_float %_ %int_8
+ %63 = OpLoad %float %62
+ %64 = OpExtInst %float %1 NMax %61 %63
+ %65 = OpAccessChain %_ptr_Uniform_float %_ %int_0
+ OpStore %65 %64
+ %66 = OpAccessChain %_ptr_Uniform_v2float %_ %int_5
+ %67 = OpLoad %v2float %66
+ %68 = OpAccessChain %_ptr_Uniform_v2float %_ %int_9
+ %69 = OpLoad %v2float %68
+ %70 = OpExtInst %v2float %1 NMax %67 %69
+ %71 = OpAccessChain %_ptr_Uniform_v2float %_ %int_1
+ OpStore %71 %70
+ %72 = OpAccessChain %_ptr_Uniform_v3float %_ %int_6
+ %73 = OpLoad %v3float %72
+ %74 = OpAccessChain %_ptr_Uniform_v3float %_ %int_10
+ %75 = OpLoad %v3float %74
+ %76 = OpExtInst %v3float %1 NMax %73 %75
+ %77 = OpAccessChain %_ptr_Uniform_v3float %_ %int_2
+ OpStore %77 %76
+ %78 = OpAccessChain %_ptr_Uniform_v4float %_ %int_7
+ %79 = OpLoad %v4float %78
+ %80 = OpAccessChain %_ptr_Uniform_v4float %_ %int_11
+ %81 = OpLoad %v4float %80
+ %82 = OpExtInst %v4float %1 NMax %79 %81
+ %83 = OpAccessChain %_ptr_Uniform_v4float %_ %int_3
+ OpStore %83 %82
+ %84 = OpAccessChain %_ptr_Uniform_float %_ %int_0
+ %85 = OpLoad %float %84
+ %86 = OpAccessChain %_ptr_Uniform_float %_ %int_4
+ %87 = OpLoad %float %86
+ %88 = OpAccessChain %_ptr_Uniform_float %_ %int_8
+ %89 = OpLoad %float %88
+ %90 = OpExtInst %float %1 NClamp %85 %87 %89
+ %91 = OpAccessChain %_ptr_Uniform_float %_ %int_0
+ OpStore %91 %90
+ %92 = OpAccessChain %_ptr_Uniform_v2float %_ %int_1
+ %93 = OpLoad %v2float %92
+ %94 = OpAccessChain %_ptr_Uniform_v2float %_ %int_5
+ %95 = OpLoad %v2float %94
+ %96 = OpAccessChain %_ptr_Uniform_v2float %_ %int_9
+ %97 = OpLoad %v2float %96
+ %98 = OpExtInst %v2float %1 NClamp %93 %95 %97
+ %99 = OpAccessChain %_ptr_Uniform_v2float %_ %int_1
+ OpStore %99 %98
+ %100 = OpAccessChain %_ptr_Uniform_v3float %_ %int_2
+ %101 = OpLoad %v3float %100
+ %102 = OpAccessChain %_ptr_Uniform_v3float %_ %int_6
+ %103 = OpLoad %v3float %102
+ %104 = OpAccessChain %_ptr_Uniform_v3float %_ %int_10
+ %105 = OpLoad %v3float %104
+ %106 = OpExtInst %v3float %1 NClamp %101 %103 %105
+ %107 = OpAccessChain %_ptr_Uniform_v3float %_ %int_2
+ OpStore %107 %106
+ %108 = OpAccessChain %_ptr_Uniform_v4float %_ %int_3
+ %109 = OpLoad %v4float %108
+ %110 = OpAccessChain %_ptr_Uniform_v4float %_ %int_7
+ %111 = OpLoad %v4float %110
+ %112 = OpAccessChain %_ptr_Uniform_v4float %_ %int_11
+ %113 = OpLoad %v4float %112
+ %114 = OpExtInst %v4float %1 NClamp %109 %111 %113
+ %115 = OpAccessChain %_ptr_Uniform_v4float %_ %int_3
+ OpStore %115 %114
+ OpStore %i %int_0
+ OpBranch %116
+ %116 = OpLabel
+ OpLoopMerge %117 %118 None
+ OpBranch %119
+ %119 = OpLabel
+ %120 = OpLoad %int %i
+ %121 = OpSLessThan %bool %120 %int_2
+ OpBranchConditional %121 %122 %117
+ %122 = OpLabel
+ %123 = OpAccessChain %_ptr_Uniform_v2float %_ %int_5
+ %124 = OpLoad %v2float %123
+ %125 = OpAccessChain %_ptr_Uniform_v2float %_ %int_9
+ %126 = OpLoad %v2float %125
+ %127 = OpExtInst %v2float %1 NMin %124 %126
+ %128 = OpAccessChain %_ptr_Uniform_v2float %_ %int_1
+ OpStore %128 %127
+ OpBranch %118
+ %118 = OpLabel
+ %129 = OpLoad %int %i
+ %130 = OpIAdd %int %129 %int_1
+ OpStore %i %130
+ %131 = OpAccessChain %_ptr_Uniform_float %_ %int_0
+ %132 = OpLoad %float %131
+ %133 = OpAccessChain %_ptr_Uniform_float %_ %int_5 %uint_0
+ %134 = OpLoad %float %133
+ %135 = OpAccessChain %_ptr_Uniform_float %_ %int_5 %uint_1
+ %136 = OpLoad %float %135
+ %137 = OpExtInst %float %1 NClamp %132 %134 %136
+ %138 = OpAccessChain %_ptr_Uniform_float %_ %int_0
+ OpStore %138 %137
+ OpBranch %116
+ %117 = OpLabel
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/storage-buffer-basic.invalid.nofxc.asm.comp b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/storage-buffer-basic.invalid.nofxc.asm.comp
new file mode 100644
index 00000000000..edb1a05e549
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/storage-buffer-basic.invalid.nofxc.asm.comp
@@ -0,0 +1,57 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Codeplay; 0
+; Bound: 31
+; Schema: 0
+ OpCapability Shader
+ OpCapability VariablePointers
+ OpExtension "SPV_KHR_storage_buffer_storage_class"
+ OpExtension "SPV_KHR_variable_pointers"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %22 "main" %gl_WorkGroupID
+ OpSource OpenCL_C 120
+ OpDecorate %15 SpecId 0
+ ;OpDecorate %16 SpecId 1
+ OpDecorate %17 SpecId 2
+ OpDecorate %_runtimearr_float ArrayStride 4
+ OpMemberDecorate %_struct_4 0 Offset 0
+ OpDecorate %_struct_4 Block
+ OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
+ OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
+ OpDecorate %20 DescriptorSet 0
+ OpDecorate %20 Binding 0
+ OpDecorate %21 DescriptorSet 0
+ OpDecorate %21 Binding 1
+ %float = OpTypeFloat 32
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+%_runtimearr_float = OpTypeRuntimeArray %float
+ %_struct_4 = OpTypeStruct %_runtimearr_float
+%_ptr_StorageBuffer__struct_4 = OpTypePointer StorageBuffer %_struct_4
+ %uint = OpTypeInt 32 0
+ %void = OpTypeVoid
+ %8 = OpTypeFunction %void
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Private_v3uint = OpTypePointer Private %v3uint
+ %uint_0 = OpConstant %uint 0
+%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
+ %15 = OpSpecConstant %uint 1
+ %16 = OpConstant %uint 2
+ %17 = OpSpecConstant %uint 3
+%gl_WorkGroupSize = OpSpecConstantComposite %v3uint %15 %16 %17
+ %19 = OpVariable %_ptr_Private_v3uint Private %gl_WorkGroupSize
+ %20 = OpVariable %_ptr_StorageBuffer__struct_4 StorageBuffer
+ %21 = OpVariable %_ptr_StorageBuffer__struct_4 StorageBuffer
+ %22 = OpFunction %void None %8
+ %23 = OpLabel
+ %24 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
+ %25 = OpLoad %uint %24
+ %26 = OpAccessChain %_ptr_StorageBuffer_float %21 %uint_0 %25
+ %27 = OpLoad %float %26
+ %28 = OpAccessChain %_ptr_StorageBuffer_float %20 %uint_0 %25
+ %29 = OpLoad %float %28
+ %30 = OpFAdd %float %27 %29
+ OpStore %28 %30
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/cbuffer-stripped.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/cbuffer-stripped.asm.frag
new file mode 100644
index 00000000000..d778034b5f1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/cbuffer-stripped.asm.frag
@@ -0,0 +1,55 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 1
+; Bound: 34
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %_entryPointOutput
+ OpExecutionMode %main OriginUpperLeft
+ OpSource HLSL 500
+ OpMemberDecorate %UBO 0 RowMajor
+ OpMemberDecorate %UBO 0 Offset 0
+ OpMemberDecorate %UBO 0 MatrixStride 16
+ OpMemberDecorate %UBO 1 Offset 64
+ OpDecorate %UBO Block
+ OpDecorate %_ DescriptorSet 0
+ OpDecorate %_ Binding 0
+ OpDecorate %_entryPointOutput Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+ %8 = OpTypeFunction %v2float
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %v4float = OpTypeVector %float 4
+%mat2v4float = OpTypeMatrix %v4float 2
+ %UBO = OpTypeStruct %mat2v4float %v4float
+%_ptr_Uniform_UBO = OpTypePointer Uniform %UBO
+ %_ = OpVariable %_ptr_Uniform_UBO Uniform
+ %int = OpTypeInt 32 1
+ %int_1 = OpConstant %int 1
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+ %int_0 = OpConstant %int 0
+%_ptr_Uniform_mat2v4float = OpTypePointer Uniform %mat2v4float
+%_ptr_Output_v2float = OpTypePointer Output %v2float
+%_entryPointOutput = OpVariable %_ptr_Output_v2float Output
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %33 = OpFunctionCall %v2float %_main_
+ OpStore %_entryPointOutput %33
+ OpReturn
+ OpFunctionEnd
+ %_main_ = OpFunction %v2float None %8
+ %10 = OpLabel
+ %a0 = OpVariable %_ptr_Function_v2float Function
+ %21 = OpAccessChain %_ptr_Uniform_v4float %_ %int_1
+ %22 = OpLoad %v4float %21
+ %25 = OpAccessChain %_ptr_Uniform_mat2v4float %_ %int_0
+ %26 = OpLoad %mat2v4float %25
+ %27 = OpVectorTimesMatrix %v2float %22 %26
+ OpStore %a0 %27
+ %28 = OpLoad %v2float %a0
+ OpReturnValue %28
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/combined-sampler-reuse.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/combined-sampler-reuse.asm.frag
new file mode 100644
index 00000000000..ba2f95b2349
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/combined-sampler-reuse.asm.frag
@@ -0,0 +1,57 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 36
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor %vUV
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %FragColor "FragColor"
+ OpName %uTex "uTex"
+ OpName %uSampler "uSampler"
+ OpName %vUV "vUV"
+ OpDecorate %FragColor Location 0
+ OpDecorate %uTex DescriptorSet 0
+ OpDecorate %uTex Binding 1
+ OpDecorate %uSampler DescriptorSet 0
+ OpDecorate %uSampler Binding 0
+ OpDecorate %vUV Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %FragColor = OpVariable %_ptr_Output_v4float Output
+ %10 = OpTypeImage %float 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_10 = OpTypePointer UniformConstant %10
+ %uTex = OpVariable %_ptr_UniformConstant_10 UniformConstant
+ %14 = OpTypeSampler
+%_ptr_UniformConstant_14 = OpTypePointer UniformConstant %14
+ %uSampler = OpVariable %_ptr_UniformConstant_14 UniformConstant
+ %18 = OpTypeSampledImage %10
+ %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+ %vUV = OpVariable %_ptr_Input_v2float Input
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+ %int_1 = OpConstant %int 1
+ %32 = OpConstantComposite %v2int %int_1 %int_1
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %13 = OpLoad %10 %uTex
+ %17 = OpLoad %14 %uSampler
+ %19 = OpSampledImage %18 %13 %17
+ %23 = OpLoad %v2float %vUV
+ %24 = OpImageSampleImplicitLod %v4float %19 %23
+ OpStore %FragColor %24
+ %28 = OpLoad %v2float %vUV
+ %33 = OpImageSampleImplicitLod %v4float %19 %28 ConstOffset %32
+ %34 = OpLoad %v4float %FragColor
+ %35 = OpFAdd %v4float %34 %33
+ OpStore %FragColor %35
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/empty-struct.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/empty-struct.asm.frag
new file mode 100644
index 00000000000..0efd3158cb2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/empty-struct.asm.frag
@@ -0,0 +1,55 @@
+; SPIR-V
+; Version: 1.2
+; Generator: Khronos; 0
+; Bound: 43
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %EntryPoint_Main "main"
+ OpExecutionMode %EntryPoint_Main OriginUpperLeft
+ OpSource Unknown 100
+ OpName %EmptyStructTest "EmptyStructTest"
+ OpName %GetValue "GetValue"
+ OpName %GetValue2 "GetValue"
+ OpName %self "self"
+ OpName %self2 "self"
+ OpName %emptyStruct "emptyStruct"
+ OpName %value "value"
+ OpName %EntryPoint_Main "EntryPoint_Main"
+
+%EmptyStructTest = OpTypeStruct
+%_ptr_Function_EmptyStructTest = OpTypePointer Function %EmptyStructTest
+ %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+ %5 = OpTypeFunction %float %_ptr_Function_EmptyStructTest
+ %6 = OpTypeFunction %float %EmptyStructTest
+ %void = OpTypeVoid
+%_ptr_Function_void = OpTypePointer Function %void
+ %8 = OpTypeFunction %void %_ptr_Function_EmptyStructTest
+ %9 = OpTypeFunction %void
+ %float_0 = OpConstant %float 0
+
+ %GetValue = OpFunction %float None %5
+ %self = OpFunctionParameter %_ptr_Function_EmptyStructTest
+ %13 = OpLabel
+ OpReturnValue %float_0
+ OpFunctionEnd
+
+ %GetValue2 = OpFunction %float None %6
+ %self2 = OpFunctionParameter %EmptyStructTest
+ %14 = OpLabel
+ OpReturnValue %float_0
+ OpFunctionEnd
+
+%EntryPoint_Main = OpFunction %void None %9
+ %37 = OpLabel
+ %emptyStruct = OpVariable %_ptr_Function_EmptyStructTest Function
+ %18 = OpVariable %_ptr_Function_EmptyStructTest Function
+ %value = OpVariable %_ptr_Function_float Function
+ %value2 = OpCompositeConstruct %EmptyStructTest
+ %22 = OpFunctionCall %float %GetValue %emptyStruct
+ %23 = OpFunctionCall %float %GetValue2 %value2
+ OpStore %value %22
+ OpStore %value %23
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/frem.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/frem.asm.frag
new file mode 100644
index 00000000000..8350c75c044
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/frem.asm.frag
@@ -0,0 +1,41 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 3
+; Bound: 16
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor %vA %vB
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %FragColor "FragColor"
+ OpName %vA "vA"
+ OpName %vB "vB"
+ OpDecorate %FragColor RelaxedPrecision
+ OpDecorate %FragColor Location 0
+ OpDecorate %vA RelaxedPrecision
+ OpDecorate %vA Location 0
+ OpDecorate %12 RelaxedPrecision
+ OpDecorate %vB RelaxedPrecision
+ OpDecorate %vB Location 1
+ OpDecorate %14 RelaxedPrecision
+ OpDecorate %15 RelaxedPrecision
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %FragColor = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %vA = OpVariable %_ptr_Input_v4float Input
+ %vB = OpVariable %_ptr_Input_v4float Input
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %12 = OpLoad %v4float %vA
+ %14 = OpLoad %v4float %vB
+ %15 = OpFRem %v4float %12 %14
+ OpStore %FragColor %15
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/function-overload-alias.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/function-overload-alias.asm.frag
new file mode 100644
index 00000000000..397aa98ce2b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/function-overload-alias.asm.frag
@@ -0,0 +1,153 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 3
+; Bound: 76
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %foobar_vf4_ "foo"
+ OpName %a "foo"
+ OpName %foobar_vf3_ "foo"
+ OpName %a_0 "foo"
+ OpName %foobaz_vf4_ "foo"
+ OpName %a_1 "foo"
+ OpName %foobaz_vf2_ "foo"
+ OpName %a_2 "foo"
+ OpName %a_3 "foo"
+ OpName %param "foo"
+ OpName %b "foo"
+ OpName %param_0 "foo"
+ OpName %c "foo"
+ OpName %param_1 "foo"
+ OpName %d "foo"
+ OpName %param_2 "foo"
+ OpName %FragColor "FragColor"
+ OpDecorate %foobar_vf4_ RelaxedPrecision
+ OpDecorate %a RelaxedPrecision
+ OpDecorate %foobar_vf3_ RelaxedPrecision
+ OpDecorate %a_0 RelaxedPrecision
+ OpDecorate %foobaz_vf4_ RelaxedPrecision
+ OpDecorate %a_1 RelaxedPrecision
+ OpDecorate %foobaz_vf2_ RelaxedPrecision
+ OpDecorate %a_2 RelaxedPrecision
+ OpDecorate %28 RelaxedPrecision
+ OpDecorate %30 RelaxedPrecision
+ OpDecorate %31 RelaxedPrecision
+ OpDecorate %34 RelaxedPrecision
+ OpDecorate %35 RelaxedPrecision
+ OpDecorate %36 RelaxedPrecision
+ OpDecorate %37 RelaxedPrecision
+ OpDecorate %40 RelaxedPrecision
+ OpDecorate %42 RelaxedPrecision
+ OpDecorate %43 RelaxedPrecision
+ OpDecorate %46 RelaxedPrecision
+ OpDecorate %47 RelaxedPrecision
+ OpDecorate %48 RelaxedPrecision
+ OpDecorate %49 RelaxedPrecision
+ OpDecorate %a_3 RelaxedPrecision
+ OpDecorate %55 RelaxedPrecision
+ OpDecorate %b RelaxedPrecision
+ OpDecorate %59 RelaxedPrecision
+ OpDecorate %c RelaxedPrecision
+ OpDecorate %62 RelaxedPrecision
+ OpDecorate %d RelaxedPrecision
+ OpDecorate %66 RelaxedPrecision
+ OpDecorate %FragColor RelaxedPrecision
+ OpDecorate %FragColor Location 0
+ OpDecorate %69 RelaxedPrecision
+ OpDecorate %70 RelaxedPrecision
+ OpDecorate %71 RelaxedPrecision
+ OpDecorate %72 RelaxedPrecision
+ OpDecorate %73 RelaxedPrecision
+ OpDecorate %74 RelaxedPrecision
+ OpDecorate %75 RelaxedPrecision
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %9 = OpTypeFunction %v4float %_ptr_Function_v4float
+ %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %15 = OpTypeFunction %v4float %_ptr_Function_v3float
+ %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %24 = OpTypeFunction %v4float %_ptr_Function_v2float
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+ %53 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+ %57 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+ %64 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %FragColor = OpVariable %_ptr_Output_v4float Output
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %a_3 = OpVariable %_ptr_Function_v4float Function
+ %param = OpVariable %_ptr_Function_v4float Function
+ %b = OpVariable %_ptr_Function_v4float Function
+ %param_0 = OpVariable %_ptr_Function_v3float Function
+ %c = OpVariable %_ptr_Function_v4float Function
+ %param_1 = OpVariable %_ptr_Function_v4float Function
+ %d = OpVariable %_ptr_Function_v4float Function
+ %param_2 = OpVariable %_ptr_Function_v2float Function
+ OpStore %param %53
+ %55 = OpFunctionCall %v4float %foobar_vf4_ %param
+ OpStore %a_3 %55
+ OpStore %param_0 %57
+ %59 = OpFunctionCall %v4float %foobar_vf3_ %param_0
+ OpStore %b %59
+ OpStore %param_1 %53
+ %62 = OpFunctionCall %v4float %foobaz_vf4_ %param_1
+ OpStore %c %62
+ OpStore %param_2 %64
+ %66 = OpFunctionCall %v4float %foobaz_vf2_ %param_2
+ OpStore %d %66
+ %69 = OpLoad %v4float %a_3
+ %70 = OpLoad %v4float %b
+ %71 = OpFAdd %v4float %69 %70
+ %72 = OpLoad %v4float %c
+ %73 = OpFAdd %v4float %71 %72
+ %74 = OpLoad %v4float %d
+ %75 = OpFAdd %v4float %73 %74
+ OpStore %FragColor %75
+ OpReturn
+ OpFunctionEnd
+%foobar_vf4_ = OpFunction %v4float None %9
+ %a = OpFunctionParameter %_ptr_Function_v4float
+ %12 = OpLabel
+ %28 = OpLoad %v4float %a
+ %30 = OpCompositeConstruct %v4float %float_1 %float_1 %float_1 %float_1
+ %31 = OpFAdd %v4float %28 %30
+ OpReturnValue %31
+ OpFunctionEnd
+%foobar_vf3_ = OpFunction %v4float None %15
+ %a_0 = OpFunctionParameter %_ptr_Function_v3float
+ %18 = OpLabel
+ %34 = OpLoad %v3float %a_0
+ %35 = OpVectorShuffle %v4float %34 %34 0 1 2 2
+ %36 = OpCompositeConstruct %v4float %float_1 %float_1 %float_1 %float_1
+ %37 = OpFAdd %v4float %35 %36
+ OpReturnValue %37
+ OpFunctionEnd
+%foobaz_vf4_ = OpFunction %v4float None %9
+ %a_1 = OpFunctionParameter %_ptr_Function_v4float
+ %21 = OpLabel
+ %40 = OpLoad %v4float %a_1
+ %42 = OpCompositeConstruct %v4float %float_2 %float_2 %float_2 %float_2
+ %43 = OpFAdd %v4float %40 %42
+ OpReturnValue %43
+ OpFunctionEnd
+%foobaz_vf2_ = OpFunction %v4float None %24
+ %a_2 = OpFunctionParameter %_ptr_Function_v2float
+ %27 = OpLabel
+ %46 = OpLoad %v2float %a_2
+ %47 = OpVectorShuffle %v4float %46 %46 0 1 0 1
+ %48 = OpCompositeConstruct %v4float %float_2 %float_2 %float_2 %float_2
+ %49 = OpFAdd %v4float %47 %48
+ OpReturnValue %49
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/image-extract-reuse.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/image-extract-reuse.asm.frag
new file mode 100644
index 00000000000..63c8ab57a53
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/image-extract-reuse.asm.frag
@@ -0,0 +1,41 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 19
+; Schema: 0
+ OpCapability Shader
+ OpCapability ImageQuery
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %Size
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %Size "Size"
+ OpName %uTexture "uTexture"
+ OpDecorate %Size Location 0
+ OpDecorate %uTexture DescriptorSet 0
+ OpDecorate %uTexture Binding 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%_ptr_Output_v2int = OpTypePointer Output %v2int
+ %Size = OpVariable %_ptr_Output_v2int Output
+ %float = OpTypeFloat 32
+ %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
+ %12 = OpTypeSampledImage %11
+%_ptr_UniformConstant_12 = OpTypePointer UniformConstant %12
+ %uTexture = OpVariable %_ptr_UniformConstant_12 UniformConstant
+ %int_0 = OpConstant %int 0
+ %int_1 = OpConstant %int 1
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %15 = OpLoad %12 %uTexture
+ %17 = OpImage %11 %15
+ %18 = OpImageQuerySizeLod %v2int %17 %int_0
+ %19 = OpImageQuerySizeLod %v2int %17 %int_1
+ %20 = OpIAdd %v2int %18 %19
+ OpStore %Size %20
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/implicit-read-dep-phi.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/implicit-read-dep-phi.asm.frag
new file mode 100644
index 00000000000..ccdfeef58d4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/implicit-read-dep-phi.asm.frag
@@ -0,0 +1,81 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 3
+; Bound: 60
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %v0 %FragColor
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %phi "phi"
+ OpName %i "i"
+ OpName %v0 "v0"
+ OpName %FragColor "FragColor"
+ OpName %uImage "uImage"
+ OpDecorate %v0 Location 0
+ OpDecorate %FragColor Location 0
+ OpDecorate %uImage DescriptorSet 0
+ OpDecorate %uImage Binding 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+ %float_1 = OpConstant %float 1
+ %int = OpTypeInt 32 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_0 = OpConstant %int 0
+ %int_4 = OpConstant %int 4
+ %bool = OpTypeBool
+ %v4float = OpTypeVector %float 4
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %v0 = OpVariable %_ptr_Input_v4float Input
+%_ptr_Input_float = OpTypePointer Input %float
+ %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %FragColor = OpVariable %_ptr_Output_v4float Output
+ %36 = OpTypeImage %float 2D 0 0 0 1 Unknown
+ %37 = OpTypeSampledImage %36
+%_ptr_UniformConstant_37 = OpTypePointer UniformConstant %37
+ %uImage = OpVariable %_ptr_UniformConstant_37 UniformConstant
+ %v2float = OpTypeVector %float 2
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+ %float_2 = OpConstant %float 2
+ %int_1 = OpConstant %int 1
+ %float_1_vec = OpConstantComposite %v4float %float_1 %float_2 %float_1 %float_2
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %i = OpVariable %_ptr_Function_int Function
+ OpStore %i %int_0
+ OpBranch %loop_header
+ %loop_header = OpLabel
+ %phi = OpPhi %float %float_1 %5 %phi_plus_2 %continue_block
+ %tex_phi = OpPhi %v4float %float_1_vec %5 %texture_load_result %continue_block
+ OpLoopMerge %merge_block %continue_block None
+ OpBranch %loop_body
+ %loop_body = OpLabel
+ OpStore %FragColor %tex_phi
+ %19 = OpLoad %int %i
+ %22 = OpSLessThan %bool %19 %int_4
+ OpBranchConditional %22 %15 %merge_block
+ %15 = OpLabel
+ %26 = OpLoad %int %i
+ %28 = OpAccessChain %_ptr_Input_float %v0 %26
+ %29 = OpLoad %float %28
+ %31 = OpFOrdGreaterThan %bool %29 %float_0
+ OpBranchConditional %31 %continue_block %merge_block
+ %continue_block = OpLabel
+ %40 = OpLoad %37 %uImage
+ %43 = OpCompositeConstruct %v2float %phi %phi
+ %texture_load_result = OpImageSampleExplicitLod %v4float %40 %43 Lod %float_0
+ %phi_plus_2 = OpFAdd %float %phi %float_2
+ %54 = OpLoad %int %i
+ %56 = OpIAdd %int %54 %int_1
+ OpStore %i %56
+ OpBranch %loop_header
+ %merge_block = OpLabel
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/inf-nan-constant.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/inf-nan-constant.asm.frag
new file mode 100644
index 00000000000..40e5d3a89cb
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/inf-nan-constant.asm.frag
@@ -0,0 +1,29 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 14
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %FragColor "FragColor"
+ OpDecorate %FragColor Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+ %FragColor = OpVariable %_ptr_Output_v3float Output
+%float_0x1p_128 = OpConstant %float 0x1p+128
+%float_n0x1p_128 = OpConstant %float -0x1p+128
+%float_0x1_8p_128 = OpConstant %float 0x1.8p+128
+ %13 = OpConstantComposite %v3float %float_0x1p_128 %float_n0x1p_128 %float_0x1_8p_128
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ OpStore %FragColor %13
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/line-directive.line.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/line-directive.line.asm.frag
new file mode 100644
index 00000000000..9e08e9a8911
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/line-directive.line.asm.frag
@@ -0,0 +1,221 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Google Shaderc over Glslang; 7
+; Bound: 83
+; Schema: 0
+ OpCapability Shader
+ %2 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor %vColor
+ OpExecutionMode %main OriginUpperLeft
+ %1 = OpString "test.frag"
+ OpSource GLSL 450 %1 "// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed entry-point main
+#line 1
+#version 450
+
+layout(location = 0) in float vColor;
+layout(location = 0) out float FragColor;
+
+void func()
+{
+ FragColor = 1.0;
+ FragColor = 2.0;
+ if (vColor < 0.0)
+ {
+ FragColor = 3.0;
+ }
+ else
+ {
+ FragColor = 4.0;
+ }
+
+ for (int i = 0; i < 40 + vColor; i += int(vColor) + 5)
+ {
+ FragColor += 0.2;
+ FragColor += 0.3;
+ }
+
+ switch (int(vColor))
+ {
+ case 0:
+ FragColor += 0.2;
+ break;
+
+ case 1:
+ FragColor += 0.4;
+ break;
+
+ default:
+ FragColor += 0.8;
+ break;
+ }
+
+ do
+ {
+ FragColor += 10.0 + vColor;
+ } while(FragColor < 100.0);
+}
+
+void main()
+{
+ func();
+}
+"
+ OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
+ OpSourceExtension "GL_GOOGLE_include_directive"
+ OpName %main "main"
+ OpName %func_ "func("
+ OpName %FragColor "FragColor"
+ OpName %vColor "vColor"
+ OpName %i "i"
+ OpDecorate %FragColor Location 0
+ OpDecorate %vColor Location 0
+ %void = OpTypeVoid
+ %4 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+%_ptr_Output_float = OpTypePointer Output %float
+ %FragColor = OpVariable %_ptr_Output_float Output
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+%_ptr_Input_float = OpTypePointer Input %float
+ %vColor = OpVariable %_ptr_Input_float Input
+ %float_0 = OpConstant %float 0
+ %bool = OpTypeBool
+ %float_3 = OpConstant %float 3
+ %float_4 = OpConstant %float 4
+ %int = OpTypeInt 32 1
+
+ ; Should be ignored
+ OpLine %1 5 0
+
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_0 = OpConstant %int 0
+ %float_40 = OpConstant %float 40
+%float_0_200000003 = OpConstant %float 0.200000003
+%float_0_300000012 = OpConstant %float 0.300000012
+ %int_5 = OpConstant %int 5
+
+ ; Should be ignored
+ OpLine %1 5 0
+
+%float_0_400000006 = OpConstant %float 0.400000006
+%float_0_800000012 = OpConstant %float 0.800000012
+ %float_10 = OpConstant %float 10
+ %float_100 = OpConstant %float 100
+ %main = OpFunction %void None %4
+ OpLine %1 46 0
+ %6 = OpLabel
+ OpLine %1 48 0
+ %82 = OpFunctionCall %void %func_
+ OpReturn
+ OpFunctionEnd
+
+ ; Should be ignored
+ OpLine %1 5 0
+
+ %func_ = OpFunction %void None %4
+ OpLine %1 6 0
+ %8 = OpLabel
+ %i = OpVariable %_ptr_Function_int Function
+ OpLine %1 8 0
+ OpStore %FragColor %float_1
+ OpLine %1 9 0
+ OpStore %FragColor %float_2
+ OpLine %1 10 0
+ %16 = OpLoad %float %vColor
+ %19 = OpFOrdLessThan %bool %16 %float_0
+ OpSelectionMerge %21 None
+ OpBranchConditional %19 %20 %23
+ %20 = OpLabel
+ OpLine %1 12 0
+ OpStore %FragColor %float_3
+ OpBranch %21
+ %23 = OpLabel
+ OpLine %1 16 0
+ OpStore %FragColor %float_4
+ OpBranch %21
+ %21 = OpLabel
+ OpLine %1 19 0
+ OpStore %i %int_0
+ OpBranch %29
+ %29 = OpLabel
+ OpLoopMerge %31 %32 None
+ OpBranch %33
+ %33 = OpLabel
+ %34 = OpLoad %int %i
+ %35 = OpConvertSToF %float %34
+ %37 = OpLoad %float %vColor
+ %38 = OpFAdd %float %float_40 %37
+ %39 = OpFOrdLessThan %bool %35 %38
+ OpBranchConditional %39 %30 %31
+ %30 = OpLabel
+ OpLine %1 21 0
+ %41 = OpLoad %float %FragColor
+ %42 = OpFAdd %float %41 %float_0_200000003
+ OpStore %FragColor %42
+ OpLine %1 22 0
+ %44 = OpLoad %float %FragColor
+ %45 = OpFAdd %float %44 %float_0_300000012
+ OpStore %FragColor %45
+ OpBranch %32
+ %32 = OpLabel
+ OpLine %1 19 0
+ %46 = OpLoad %float %vColor
+ %47 = OpConvertFToS %int %46
+ %49 = OpIAdd %int %47 %int_5
+ %50 = OpLoad %int %i
+ %51 = OpIAdd %int %50 %49
+ OpStore %i %51
+ OpBranch %29
+ %31 = OpLabel
+ OpLine %1 25 0
+ %52 = OpLoad %float %vColor
+ %53 = OpConvertFToS %int %52
+ OpSelectionMerge %57 None
+ OpSwitch %53 %56 0 %54 1 %55
+ %56 = OpLabel
+ OpLine %1 36 0
+ %66 = OpLoad %float %FragColor
+ %67 = OpFAdd %float %66 %float_0_800000012
+ OpStore %FragColor %67
+ OpLine %1 37 0
+ OpBranch %57
+ %54 = OpLabel
+ OpLine %1 28 0
+ %58 = OpLoad %float %FragColor
+ %59 = OpFAdd %float %58 %float_0_200000003
+ OpStore %FragColor %59
+ OpLine %1 29 0
+ OpBranch %57
+ %55 = OpLabel
+ OpLine %1 32 0
+ %62 = OpLoad %float %FragColor
+ %63 = OpFAdd %float %62 %float_0_400000006
+ OpStore %FragColor %63
+ OpLine %1 33 0
+ OpBranch %57
+ %57 = OpLabel
+ OpBranch %70
+ OpLine %1 43 0
+ %70 = OpLabel
+ OpLoopMerge %72 %73 None
+ OpBranch %71
+ %71 = OpLabel
+ OpLine %1 42 0
+ %75 = OpLoad %float %vColor
+ %76 = OpFAdd %float %float_10 %75
+ %77 = OpLoad %float %FragColor
+ %78 = OpFAdd %float %77 %76
+ OpStore %FragColor %78
+ OpBranch %73
+ %73 = OpLabel
+ OpLine %1 43 0
+ %79 = OpLoad %float %FragColor
+ %81 = OpFOrdLessThan %bool %79 %float_100
+ OpBranchConditional %81 %70 %72
+ %72 = OpLabel
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/lut-promotion-initializer.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/lut-promotion-initializer.asm.frag
new file mode 100644
index 00000000000..320e5ebfbde
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/lut-promotion-initializer.asm.frag
@@ -0,0 +1,195 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 111
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor %index
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %FragColor "FragColor"
+ OpName %index "index"
+ OpName %indexable "indexable"
+ OpName %indexable_0 "indexable"
+ OpName %indexable_1 "indexable"
+ OpName %foo "foo"
+ OpName %foobar "foobar"
+ OpName %baz "baz"
+ OpDecorate %FragColor RelaxedPrecision
+ OpDecorate %FragColor Location 0
+ OpDecorate %index RelaxedPrecision
+ OpDecorate %index Flat
+ OpDecorate %index Location 0
+ OpDecorate %20 RelaxedPrecision
+ OpDecorate %25 RelaxedPrecision
+ OpDecorate %26 RelaxedPrecision
+ OpDecorate %32 RelaxedPrecision
+ OpDecorate %34 RelaxedPrecision
+ OpDecorate %37 RelaxedPrecision
+ OpDecorate %38 RelaxedPrecision
+ OpDecorate %39 RelaxedPrecision
+ OpDecorate %41 RelaxedPrecision
+ OpDecorate %42 RelaxedPrecision
+ OpDecorate %45 RelaxedPrecision
+ OpDecorate %46 RelaxedPrecision
+ OpDecorate %47 RelaxedPrecision
+ OpDecorate %foo RelaxedPrecision
+ OpDecorate %61 RelaxedPrecision
+ OpDecorate %66 RelaxedPrecision
+ OpDecorate %68 RelaxedPrecision
+ OpDecorate %71 RelaxedPrecision
+ OpDecorate %72 RelaxedPrecision
+ OpDecorate %73 RelaxedPrecision
+ OpDecorate %75 RelaxedPrecision
+ OpDecorate %76 RelaxedPrecision
+ OpDecorate %79 RelaxedPrecision
+ OpDecorate %80 RelaxedPrecision
+ OpDecorate %81 RelaxedPrecision
+ OpDecorate %foobar RelaxedPrecision
+ OpDecorate %83 RelaxedPrecision
+ OpDecorate %90 RelaxedPrecision
+ OpDecorate %91 RelaxedPrecision
+ OpDecorate %93 RelaxedPrecision
+ OpDecorate %94 RelaxedPrecision
+ OpDecorate %95 RelaxedPrecision
+ OpDecorate %baz RelaxedPrecision
+ OpDecorate %105 RelaxedPrecision
+ OpDecorate %106 RelaxedPrecision
+ OpDecorate %108 RelaxedPrecision
+ OpDecorate %109 RelaxedPrecision
+ OpDecorate %110 RelaxedPrecision
+ OpDecorate %16 RelaxedPrecision
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+%_ptr_Output_float = OpTypePointer Output %float
+ %FragColor = OpVariable %_ptr_Output_float Output
+ %uint = OpTypeInt 32 0
+ %uint_16 = OpConstant %uint 16
+%_arr_float_uint_16 = OpTypeArray %float %uint_16
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+ %float_3 = OpConstant %float 3
+ %float_4 = OpConstant %float 4
+ %16 = OpConstantComposite %_arr_float_uint_16 %float_1 %float_2 %float_3 %float_4 %float_1 %float_2 %float_3 %float_4 %float_1 %float_2 %float_3 %float_4 %float_1 %float_2 %float_3 %float_4
+ %int = OpTypeInt 32 1
+%_ptr_Input_int = OpTypePointer Input %int
+ %index = OpVariable %_ptr_Input_int Input
+%_ptr_Function__arr_float_uint_16 = OpTypePointer Function %_arr_float_uint_16
+%_ptr_Function_float = OpTypePointer Function %float
+ %int_10 = OpConstant %int 10
+ %bool = OpTypeBool
+ %int_1 = OpConstant %int 1
+ %v4float = OpTypeVector %float 4
+ %uint_4 = OpConstant %uint 4
+%_arr_v4float_uint_4 = OpTypeArray %v4float %uint_4
+%_ptr_Function__arr_v4float_uint_4 = OpTypePointer Function %_arr_v4float_uint_4
+ %float_0 = OpConstant %float 0
+ %54 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
+ %55 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+ %float_8 = OpConstant %float 8
+ %57 = OpConstantComposite %v4float %float_8 %float_8 %float_8 %float_8
+ %float_5 = OpConstant %float 5
+ %59 = OpConstantComposite %v4float %float_5 %float_5 %float_5 %float_5
+ %60 = OpConstantComposite %_arr_v4float_uint_4 %54 %55 %57 %59
+ %int_30 = OpConstant %int 30
+ %int_3 = OpConstant %int 3
+ %uint_1 = OpConstant %uint 1
+ %uint_0 = OpConstant %uint 0
+ %float_20 = OpConstant %float 20
+ %uint_2 = OpConstant %uint 2
+ %97 = OpConstantComposite %v4float %float_20 %float_20 %float_20 %float_20
+ %float_30 = OpConstant %float 30
+ %99 = OpConstantComposite %v4float %float_30 %float_30 %float_30 %float_30
+ %float_50 = OpConstant %float 50
+ %101 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
+ %float_60 = OpConstant %float 60
+ %103 = OpConstantComposite %v4float %float_60 %float_60 %float_60 %float_60
+ %104 = OpConstantComposite %_arr_v4float_uint_4 %97 %99 %101 %103
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %indexable = OpVariable %_ptr_Function__arr_float_uint_16 Function %16
+%indexable_0 = OpVariable %_ptr_Function__arr_float_uint_16 Function %16
+%indexable_1 = OpVariable %_ptr_Function__arr_float_uint_16 Function %16
+ %foo = OpVariable %_ptr_Function__arr_v4float_uint_4 Function %60
+ %foobar = OpVariable %_ptr_Function__arr_v4float_uint_4 Function %60
+ %baz = OpVariable %_ptr_Function__arr_v4float_uint_4 Function %60
+ %20 = OpLoad %int %index
+ %24 = OpAccessChain %_ptr_Function_float %indexable %20
+ %25 = OpLoad %float %24
+ OpStore %FragColor %25
+ %26 = OpLoad %int %index
+ %29 = OpSLessThan %bool %26 %int_10
+ OpSelectionMerge %31 None
+ OpBranchConditional %29 %30 %40
+ %30 = OpLabel
+ %32 = OpLoad %int %index
+ %34 = OpBitwiseXor %int %32 %int_1
+ %36 = OpAccessChain %_ptr_Function_float %indexable_0 %34
+ %37 = OpLoad %float %36
+ %38 = OpLoad %float %FragColor
+ %39 = OpFAdd %float %38 %37
+ OpStore %FragColor %39
+ OpBranch %31
+ %40 = OpLabel
+ %41 = OpLoad %int %index
+ %42 = OpBitwiseAnd %int %41 %int_1
+ %44 = OpAccessChain %_ptr_Function_float %indexable_1 %42
+ %45 = OpLoad %float %44
+ %46 = OpLoad %float %FragColor
+ %47 = OpFAdd %float %46 %45
+ OpStore %FragColor %47
+ OpBranch %31
+ %31 = OpLabel
+ %61 = OpLoad %int %index
+ %63 = OpSGreaterThan %bool %61 %int_30
+ OpSelectionMerge %65 None
+ OpBranchConditional %63 %64 %74
+ %64 = OpLabel
+ %66 = OpLoad %int %index
+ %68 = OpBitwiseAnd %int %66 %int_3
+ %70 = OpAccessChain %_ptr_Function_float %foo %68 %uint_1
+ %71 = OpLoad %float %70
+ %72 = OpLoad %float %FragColor
+ %73 = OpFAdd %float %72 %71
+ OpStore %FragColor %73
+ OpBranch %65
+ %74 = OpLabel
+ %75 = OpLoad %int %index
+ %76 = OpBitwiseAnd %int %75 %int_1
+ %78 = OpAccessChain %_ptr_Function_float %foo %76 %uint_0
+ %79 = OpLoad %float %78
+ %80 = OpLoad %float %FragColor
+ %81 = OpFAdd %float %80 %79
+ OpStore %FragColor %81
+ OpBranch %65
+ %65 = OpLabel
+ %83 = OpLoad %int %index
+ %84 = OpSGreaterThan %bool %83 %int_30
+ OpSelectionMerge %86 None
+ OpBranchConditional %84 %85 %86
+ %85 = OpLabel
+ %89 = OpAccessChain %_ptr_Function_float %foobar %int_1 %uint_2
+ OpStore %89 %float_20
+ OpBranch %86
+ %86 = OpLabel
+ %90 = OpLoad %int %index
+ %91 = OpBitwiseAnd %int %90 %int_3
+ %92 = OpAccessChain %_ptr_Function_float %foobar %91 %uint_2
+ %93 = OpLoad %float %92
+ %94 = OpLoad %float %FragColor
+ %95 = OpFAdd %float %94 %93
+ OpStore %FragColor %95
+ OpStore %baz %104
+ %105 = OpLoad %int %index
+ %106 = OpBitwiseAnd %int %105 %int_3
+ %107 = OpAccessChain %_ptr_Function_float %baz %106 %uint_2
+ %108 = OpLoad %float %107
+ %109 = OpLoad %float %FragColor
+ %110 = OpFAdd %float %109 %108
+ OpStore %FragColor %110
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/pass-by-value.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/pass-by-value.asm.frag
new file mode 100644
index 00000000000..083c85d9b04
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/pass-by-value.asm.frag
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 32
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %add_value_f1_f1_ "add_value(f1;f1;"
+ OpName %v "v"
+ OpName %w "w"
+ OpName %FragColor "FragColor"
+ OpName %Registers "Registers"
+ OpMemberName %Registers 0 "foo"
+ OpName %registers "registers"
+ OpDecorate %FragColor Location 0
+ OpMemberDecorate %Registers 0 Offset 0
+ OpDecorate %Registers Block
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+ %8 = OpTypeFunction %float %float %float
+%_ptr_Output_float = OpTypePointer Output %float
+ %FragColor = OpVariable %_ptr_Output_float Output
+ %float_10 = OpConstant %float 10
+ %Registers = OpTypeStruct %float
+%_ptr_PushConstant_Registers = OpTypePointer PushConstant %Registers
+ %registers = OpVariable %_ptr_PushConstant_Registers PushConstant
+ %int = OpTypeInt 32 1
+ %int_0 = OpConstant %int 0
+%_ptr_PushConstant_float = OpTypePointer PushConstant %float
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %29 = OpAccessChain %_ptr_PushConstant_float %registers %int_0
+ %30 = OpLoad %float %29
+ %31 = OpFunctionCall %float %add_value_f1_f1_ %float_10 %30
+ OpStore %FragColor %31
+ OpReturn
+ OpFunctionEnd
+%add_value_f1_f1_ = OpFunction %float None %8
+ %v = OpFunctionParameter %float
+ %w = OpFunctionParameter %float
+ %12 = OpLabel
+ %15 = OpFAdd %float %v %w
+ OpReturnValue %15
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/sample-and-compare.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/sample-and-compare.asm.frag
new file mode 100644
index 00000000000..16dcd0d6e0c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/sample-and-compare.asm.frag
@@ -0,0 +1,61 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Google spiregg; 0
+; Bound: 32
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %in_var_TEXCOORD0 %out_var_SV_Target
+ OpExecutionMode %main OriginUpperLeft
+ OpSource HLSL 600
+ OpName %type_2d_image "type.2d.image"
+ OpName %g_Texture "g_Texture"
+ OpName %type_sampler "type.sampler"
+ OpName %g_Sampler "g_Sampler"
+ OpName %g_CompareSampler "g_CompareSampler"
+ OpName %in_var_TEXCOORD0 "in.var.TEXCOORD0"
+ OpName %out_var_SV_Target "out.var.SV_Target"
+ OpName %main "main"
+ OpName %type_sampled_image "type.sampled.image"
+ OpDecorate %in_var_TEXCOORD0 Location 0
+ OpDecorate %out_var_SV_Target Location 0
+ OpDecorate %g_Texture DescriptorSet 0
+ OpDecorate %g_Texture Binding 0
+ OpDecorate %g_Sampler DescriptorSet 0
+ OpDecorate %g_Sampler Binding 0
+ OpDecorate %g_CompareSampler DescriptorSet 0
+ OpDecorate %g_CompareSampler Binding 1
+ %float = OpTypeFloat 32
+ %float_0_5 = OpConstant %float 0.5
+ %float_0 = OpConstant %float 0
+%type_2d_image = OpTypeImage %float 2D 2 0 0 1 Unknown
+%_ptr_UniformConstant_type_2d_image = OpTypePointer UniformConstant %type_2d_image
+%type_sampler = OpTypeSampler
+%_ptr_UniformConstant_type_sampler = OpTypePointer UniformConstant %type_sampler
+ %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+%_ptr_Output_float = OpTypePointer Output %float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%type_sampled_image = OpTypeSampledImage %type_2d_image
+ %v4float = OpTypeVector %float 4
+ %g_Texture = OpVariable %_ptr_UniformConstant_type_2d_image UniformConstant
+ %g_Sampler = OpVariable %_ptr_UniformConstant_type_sampler UniformConstant
+%g_CompareSampler = OpVariable %_ptr_UniformConstant_type_sampler UniformConstant
+%in_var_TEXCOORD0 = OpVariable %_ptr_Input_v2float Input
+%out_var_SV_Target = OpVariable %_ptr_Output_float Output
+ %main = OpFunction %void None %19
+ %21 = OpLabel
+ %22 = OpLoad %v2float %in_var_TEXCOORD0
+ %23 = OpLoad %type_2d_image %g_Texture
+ %24 = OpLoad %type_sampler %g_Sampler
+ %25 = OpSampledImage %type_sampled_image %23 %24
+ %26 = OpImageSampleImplicitLod %v4float %25 %22 None
+ %27 = OpCompositeExtract %float %26 0
+ %28 = OpLoad %type_sampler %g_CompareSampler
+ %29 = OpSampledImage %type_sampled_image %23 %28
+ %30 = OpImageSampleDrefExplicitLod %float %29 %22 %float_0_5 Lod %float_0
+ %31 = OpFAdd %float %27 %30
+ OpStore %out_var_SV_Target %31
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/single-function-private-lut.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/single-function-private-lut.asm.frag
new file mode 100644
index 00000000000..0d5b29c638d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/single-function-private-lut.asm.frag
@@ -0,0 +1,86 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Khronos SPIR-V Tools Assembler; 0
+; Bound: 54
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %gl_FragCoord %o_color
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 460
+ OpName %main "main"
+ OpName %myType "myType"
+ OpMemberName %myType 0 "data"
+ OpName %myData "myData"
+ OpName %uv "uv"
+ OpName %gl_FragCoord "gl_FragCoord"
+ OpName %index "index"
+ OpName %elt "elt"
+ OpName %o_color "o_color"
+ OpDecorate %gl_FragCoord BuiltIn FragCoord
+ OpDecorate %o_color Location 0
+ %void = OpTypeVoid
+ %11 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %myType = OpTypeStruct %float
+ %uint = OpTypeInt 32 0
+ %uint_5 = OpConstant %uint 5
+%_arr_myType_uint_5 = OpTypeArray %myType %uint_5
+%_ptr_Private__arr_myType_uint_5 = OpTypePointer Private %_arr_myType_uint_5
+ %myData = OpVariable %_ptr_Private__arr_myType_uint_5 Private
+ %float_0 = OpConstant %float 0
+ %18 = OpConstantComposite %myType %float_0
+ %float_1 = OpConstant %float 1
+ %20 = OpConstantComposite %myType %float_1
+ %21 = OpConstantComposite %_arr_myType_uint_5 %18 %20 %18 %20 %18
+ %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %v4float = OpTypeVector %float 4
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
+ %int = OpTypeInt 32 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %uint_0 = OpConstant %uint 0
+%_ptr_Function_float = OpTypePointer Function %float
+ %float_4 = OpConstant %float 4
+%_ptr_Function_myType = OpTypePointer Function %myType
+%_ptr_Private_myType = OpTypePointer Private %myType
+ %int_0 = OpConstant %int 0
+ %bool = OpTypeBool
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %o_color = OpVariable %_ptr_Output_v4float Output
+ %36 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
+ %37 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
+ %main = OpFunction %void None %11
+ %38 = OpLabel
+ %uv = OpVariable %_ptr_Function_v2float Function
+ %index = OpVariable %_ptr_Function_int Function
+ %elt = OpVariable %_ptr_Function_myType Function
+ OpStore %myData %21
+ %39 = OpLoad %v4float %gl_FragCoord
+ %40 = OpVectorShuffle %v2float %39 %39 0 1
+ OpStore %uv %40
+ %41 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ %42 = OpLoad %float %41
+ %43 = OpFMod %float %42 %float_4
+ %44 = OpConvertFToS %int %43
+ OpStore %index %44
+ %45 = OpLoad %int %index
+ %46 = OpAccessChain %_ptr_Private_myType %myData %45
+ %47 = OpLoad %myType %46
+ OpStore %elt %47
+ %48 = OpAccessChain %_ptr_Function_float %elt %int_0
+ %49 = OpLoad %float %48
+ %50 = OpFOrdGreaterThan %bool %49 %float_0
+ OpSelectionMerge %51 None
+ OpBranchConditional %50 %52 %53
+ %52 = OpLabel
+ OpStore %o_color %36
+ OpBranch %51
+ %53 = OpLabel
+ OpStore %o_color %37
+ OpBranch %51
+ %51 = OpLabel
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/srem.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/srem.asm.frag
new file mode 100644
index 00000000000..c6f8e27cbd8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/srem.asm.frag
@@ -0,0 +1,43 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 2
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor %vA %vB
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %FragColor "FragColor"
+ OpName %vA "vA"
+ OpName %vB "vB"
+ OpDecorate %FragColor RelaxedPrecision
+ OpDecorate %FragColor Location 0
+ OpDecorate %vA Flat
+ OpDecorate %vA Location 0
+ OpDecorate %vB Flat
+ OpDecorate %vB Location 1
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %FragColor = OpVariable %_ptr_Output_v4float Output
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%_ptr_Input_v4int = OpTypePointer Input %v4int
+ %vA = OpVariable %_ptr_Input_v4int Input
+ %vB = OpVariable %_ptr_Input_v4int Input
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %14 = OpLoad %v4int %vA
+ %16 = OpLoad %v4int %vB
+ %17 = OpLoad %v4int %vA
+ %18 = OpLoad %v4int %vB
+ %19 = OpSRem %v4int %17 %18
+ %20 = OpConvertSToF %v4float %19
+ OpStore %FragColor %20
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/storage-class-output-initializer.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/storage-class-output-initializer.asm.frag
new file mode 100644
index 00000000000..7763b7c17c8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/storage-class-output-initializer.asm.frag
@@ -0,0 +1,41 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColors %FragColor
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %FragColors "FragColors"
+ OpName %FragColor "FragColor"
+ OpDecorate %FragColors Location 0
+ OpDecorate %FragColor Location 2
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+ %uint = OpTypeInt 32 0
+ %uint_2 = OpConstant %uint 2
+%_arr_v4float_uint_2 = OpTypeArray %v4float %uint_2
+%_ptr_Output__arr_v4float_uint_2 = OpTypePointer Output %_arr_v4float_uint_2
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+ %float_3 = OpConstant %float 3
+ %float_4 = OpConstant %float 4
+ %17 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
+ %float_10 = OpConstant %float 10
+ %19 = OpConstantComposite %v4float %float_10 %float_10 %float_10 %float_10
+ %20 = OpConstantComposite %_arr_v4float_uint_2 %17 %19
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %float_5 = OpConstant %float 5
+ %24 = OpConstantComposite %v4float %float_5 %float_5 %float_5 %float_5
+ %FragColors = OpVariable %_ptr_Output__arr_v4float_uint_2 Output %20
+ %FragColor = OpVariable %_ptr_Output_v4float Output %24
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texel-fetch-no-lod.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texel-fetch-no-lod.asm.frag
new file mode 100644
index 00000000000..53dc63809cb
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texel-fetch-no-lod.asm.frag
@@ -0,0 +1,46 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor %gl_FragCoord
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %FragColor "FragColor"
+ OpName %uTexture "uTexture"
+ OpName %gl_FragCoord "gl_FragCoord"
+ OpDecorate %FragColor Location 0
+ OpDecorate %uTexture DescriptorSet 0
+ OpDecorate %uTexture Binding 0
+ OpDecorate %gl_FragCoord BuiltIn FragCoord
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %FragColor = OpVariable %_ptr_Output_v4float Output
+ %10 = OpTypeImage %float 2D 0 0 0 1 Unknown
+ %11 = OpTypeSampledImage %10
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+ %uTexture = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
+ %v2float = OpTypeVector %float 2
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+ %int_0 = OpConstant %int 0
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %14 = OpLoad %11 %uTexture
+ %18 = OpLoad %v4float %gl_FragCoord
+ %19 = OpVectorShuffle %v2float %18 %18 0 1
+ %22 = OpConvertFToS %v2int %19
+ %24 = OpImage %10 %14
+ %25 = OpImageFetch %v4float %24 %22
+ OpStore %FragColor %25
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texture-sampling-fp16.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texture-sampling-fp16.asm.frag
new file mode 100644
index 00000000000..e7e6f37ea27
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texture-sampling-fp16.asm.frag
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability StorageInputOutput16
+ OpCapability Float16
+ OpExtension "SPV_KHR_16bit_storage"
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %FragColor %UV
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpSourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ OpName %main "main"
+ OpName %FragColor "FragColor"
+ OpName %uTexture "uTexture"
+ OpName %UV "UV"
+ OpDecorate %FragColor Location 0
+ OpDecorate %uTexture DescriptorSet 0
+ OpDecorate %uTexture Binding 0
+ OpDecorate %UV Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %half = OpTypeFloat 16
+ %float = OpTypeFloat 32
+ %v4half = OpTypeVector %half 4
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4half = OpTypePointer Output %v4half
+ %FragColor = OpVariable %_ptr_Output_v4half Output
+ %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
+ %12 = OpTypeSampledImage %11
+%_ptr_UniformConstant_12 = OpTypePointer UniformConstant %12
+ %uTexture = OpVariable %_ptr_UniformConstant_12 UniformConstant
+ %v2half = OpTypeVector %half 2
+%_ptr_Input_v2half = OpTypePointer Input %v2half
+ %UV = OpVariable %_ptr_Input_v2half Input
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %15 = OpLoad %12 %uTexture
+ %19 = OpLoad %v2half %UV
+ %23 = OpImageSampleImplicitLod %v4float %15 %19
+ %24 = OpFConvert %v4half %23
+ OpStore %FragColor %24
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unknown-depth-state.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unknown-depth-state.asm.frag
new file mode 100644
index 00000000000..89036f0eb20
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unknown-depth-state.asm.frag
@@ -0,0 +1,71 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 44
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %vUV %FragColor
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %sample_combined_ "sample_combined("
+ OpName %sample_separate_ "sample_separate("
+ OpName %uShadow "uShadow"
+ OpName %vUV "vUV"
+ OpName %uTexture "uTexture"
+ OpName %uSampler "uSampler"
+ OpName %FragColor "FragColor"
+ OpDecorate %uShadow DescriptorSet 0
+ OpDecorate %uShadow Binding 0
+ OpDecorate %vUV Location 0
+ OpDecorate %uTexture DescriptorSet 0
+ OpDecorate %uTexture Binding 1
+ OpDecorate %uSampler DescriptorSet 0
+ OpDecorate %uSampler Binding 2
+ OpDecorate %FragColor Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %7 = OpTypeFunction %float
+ %12 = OpTypeImage %float 2D 2 0 0 1 Unknown
+ %13 = OpTypeSampledImage %12
+%_ptr_UniformConstant_13 = OpTypePointer UniformConstant %13
+ %uShadow = OpVariable %_ptr_UniformConstant_13 UniformConstant
+ %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+ %vUV = OpVariable %_ptr_Input_v3float Input
+%_ptr_UniformConstant_25 = OpTypePointer UniformConstant %12
+ %uTexture = OpVariable %_ptr_UniformConstant_25 UniformConstant
+ %29 = OpTypeSampler
+%_ptr_UniformConstant_29 = OpTypePointer UniformConstant %29
+ %uSampler = OpVariable %_ptr_UniformConstant_29 UniformConstant
+%_ptr_Output_float = OpTypePointer Output %float
+ %FragColor = OpVariable %_ptr_Output_float Output
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %41 = OpFunctionCall %float %sample_combined_
+ %42 = OpFunctionCall %float %sample_separate_
+ %43 = OpFAdd %float %41 %42
+ OpStore %FragColor %43
+ OpReturn
+ OpFunctionEnd
+%sample_combined_ = OpFunction %float None %7
+ %9 = OpLabel
+ %16 = OpLoad %13 %uShadow
+ %20 = OpLoad %v3float %vUV
+ %21 = OpCompositeExtract %float %20 2
+ %22 = OpImageSampleDrefImplicitLod %float %16 %20 %21
+ OpReturnValue %22
+ OpFunctionEnd
+%sample_separate_ = OpFunction %float None %7
+ %11 = OpLabel
+ %28 = OpLoad %12 %uTexture
+ %32 = OpLoad %29 %uSampler
+ %33 = OpSampledImage %13 %28 %32
+ %34 = OpLoad %v3float %vUV
+ %35 = OpCompositeExtract %float %34 2
+ %36 = OpImageSampleDrefImplicitLod %float %33 %34 %35
+ OpReturnValue %36
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unreachable.asm.frag b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unreachable.asm.frag
new file mode 100644
index 00000000000..e2ce2eb56a9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unreachable.asm.frag
@@ -0,0 +1,61 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 3
+; Bound: 47
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %counter %FragColor
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %counter "counter"
+ OpName %FragColor "FragColor"
+ OpDecorate %counter Flat
+ OpDecorate %counter Location 0
+ OpDecorate %FragColor Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+ %8 = OpTypeFunction %v4float
+ %int = OpTypeInt 32 1
+%_ptr_Input_int = OpTypePointer Input %int
+ %counter = OpVariable %_ptr_Input_int Input
+ %int_10 = OpConstant %int 10
+ %bool = OpTypeBool
+ %float_10 = OpConstant %float 10
+ %21 = OpConstantComposite %v4float %float_10 %float_10 %float_10 %float_10
+ %float_30 = OpConstant %float 30
+ %25 = OpConstantComposite %v4float %float_30 %float_30 %float_30 %float_30
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %FragColor = OpVariable %_ptr_Output_v4float Output
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %false = OpConstantFalse %bool
+ %44 = OpUndef %v4float
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ OpBranch %33
+ %33 = OpLabel
+ %45 = OpPhi %v4float %44 %5 %44 %35
+ OpLoopMerge %34 %35 None
+ OpBranch %36
+ %36 = OpLabel
+ %37 = OpLoad %int %counter
+ %38 = OpIEqual %bool %37 %int_10
+ OpSelectionMerge %39 None
+ OpBranchConditional %38 %40 %41
+ %40 = OpLabel
+ OpBranch %34
+ %41 = OpLabel
+ OpBranch %34
+ %39 = OpLabel
+ OpUnreachable
+ %35 = OpLabel
+ OpBranchConditional %false %33 %34
+ %34 = OpLabel
+ %46 = OpPhi %v4float %21 %40 %25 %41 %44 %35
+ OpStore %FragColor %46
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert
new file mode 100644
index 00000000000..f51d903b045
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert
@@ -0,0 +1,141 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 79
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Vertex %VS "main" %PosL_1 %instanceID_1 %_entryPointOutput_Position %_entryPointOutput_Color
+ OpSource HLSL 500
+ OpName %VS "VS"
+ OpName %V2F "V2F"
+ OpMemberName %V2F 0 "Position"
+ OpMemberName %V2F 1 "Color"
+ OpName %_VS_vf3_u1_ "@VS(vf3;u1;"
+ OpName %PosL "PosL"
+ OpName %instanceID "instanceID"
+ OpName %InstanceData "InstanceData"
+ OpMemberName %InstanceData 0 "MATRIX_MVP"
+ OpMemberName %InstanceData 1 "Color"
+ OpName %instData "instData"
+ OpName %InstanceData_0 "InstanceData"
+ OpMemberName %InstanceData_0 0 "MATRIX_MVP"
+ OpMemberName %InstanceData_0 1 "Color"
+ OpName %gInstanceData "gInstanceData"
+ OpMemberName %gInstanceData 0 "@data"
+ OpName %gInstanceData_0 "gInstanceData"
+ OpName %v2f "v2f"
+ OpName %PosL_0 "PosL"
+ OpName %PosL_1 "PosL"
+ OpName %instanceID_0 "instanceID"
+ OpName %instanceID_1 "instanceID"
+ OpName %flattenTemp "flattenTemp"
+ OpName %param "param"
+ OpName %param_0 "param"
+ OpName %_entryPointOutput_Position "@entryPointOutput.Position"
+ OpName %_entryPointOutput_Color "@entryPointOutput.Color"
+ OpMemberDecorate %InstanceData_0 0 RowMajor
+ OpMemberDecorate %InstanceData_0 0 Offset 0
+ OpMemberDecorate %InstanceData_0 0 MatrixStride 16
+ OpMemberDecorate %InstanceData_0 1 Offset 64
+ OpDecorate %_runtimearr_InstanceData_0 ArrayStride 80
+ OpMemberDecorate %gInstanceData 0 Offset 0
+ OpDecorate %gInstanceData Block
+ OpDecorate %gInstanceData_0 DescriptorSet 1
+ OpDecorate %gInstanceData_0 Binding 0
+ OpDecorate %PosL_1 Location 0
+ OpDecorate %instanceID_1 BuiltIn InstanceIndex
+ OpDecorate %_entryPointOutput_Position BuiltIn Position
+ OpDecorate %_entryPointOutput_Color Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %uint = OpTypeInt 32 0
+ %int_32 = OpConstant %uint 32
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %v4float = OpTypeVector %float 4
+ %V2F = OpTypeStruct %v4float %v4float
+ %13 = OpTypeFunction %V2F %_ptr_Function_v3float %_ptr_Function_uint
+%mat4v4float = OpTypeMatrix %v4float 4
+%InstanceData = OpTypeStruct %mat4v4float %v4float
+%_ptr_Function_InstanceData = OpTypePointer Function %InstanceData
+%InstanceData_0 = OpTypeStruct %mat4v4float %v4float
+%_runtimearr_InstanceData_0 = OpTypeArray %InstanceData_0 %int_32
+%gInstanceData = OpTypeStruct %_runtimearr_InstanceData_0
+%_ptr_Uniform_gInstanceData = OpTypePointer Uniform %gInstanceData
+%gInstanceData_0 = OpVariable %_ptr_Uniform_gInstanceData Uniform
+ %int = OpTypeInt 32 1
+ %int_0 = OpConstant %int 0
+%_ptr_Uniform_InstanceData_0 = OpTypePointer Uniform %InstanceData_0
+%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
+ %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+%_ptr_Function_V2F = OpTypePointer Function %V2F
+ %float_1 = OpConstant %float 1
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+ %PosL_1 = OpVariable %_ptr_Input_v3float Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%instanceID_1 = OpVariable %_ptr_Input_uint Input
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_entryPointOutput_Position = OpVariable %_ptr_Output_v4float Output
+%_entryPointOutput_Color = OpVariable %_ptr_Output_v4float Output
+ %VS = OpFunction %void None %3
+ %5 = OpLabel
+ %PosL_0 = OpVariable %_ptr_Function_v3float Function
+%instanceID_0 = OpVariable %_ptr_Function_uint Function
+%flattenTemp = OpVariable %_ptr_Function_V2F Function
+ %param = OpVariable %_ptr_Function_v3float Function
+ %param_0 = OpVariable %_ptr_Function_uint Function
+ %61 = OpLoad %v3float %PosL_1
+ OpStore %PosL_0 %61
+ %65 = OpLoad %uint %instanceID_1
+ OpStore %instanceID_0 %65
+ %68 = OpLoad %v3float %PosL_0
+ OpStore %param %68
+ %70 = OpLoad %uint %instanceID_0
+ OpStore %param_0 %70
+ %71 = OpFunctionCall %V2F %_VS_vf3_u1_ %param %param_0
+ OpStore %flattenTemp %71
+ %74 = OpAccessChain %_ptr_Function_v4float %flattenTemp %int_0
+ %75 = OpLoad %v4float %74
+ OpStore %_entryPointOutput_Position %75
+ %77 = OpAccessChain %_ptr_Function_v4float %flattenTemp %int_1
+ %78 = OpLoad %v4float %77
+ OpStore %_entryPointOutput_Color %78
+ OpReturn
+ OpFunctionEnd
+%_VS_vf3_u1_ = OpFunction %V2F None %13
+ %PosL = OpFunctionParameter %_ptr_Function_v3float
+ %instanceID = OpFunctionParameter %_ptr_Function_uint
+ %17 = OpLabel
+ %instData = OpVariable %_ptr_Function_InstanceData Function
+ %v2f = OpVariable %_ptr_Function_V2F Function
+ %29 = OpLoad %uint %instanceID
+ %31 = OpAccessChain %_ptr_Uniform_InstanceData_0 %gInstanceData_0 %int_0 %29
+ %32 = OpLoad %InstanceData_0 %31
+ %33 = OpCompositeExtract %mat4v4float %32 0
+ %35 = OpAccessChain %_ptr_Function_mat4v4float %instData %int_0
+ OpStore %35 %33
+ %36 = OpCompositeExtract %v4float %32 1
+ %39 = OpAccessChain %_ptr_Function_v4float %instData %int_1
+ OpStore %39 %36
+ %42 = OpAccessChain %_ptr_Function_mat4v4float %instData %int_0
+ %43 = OpLoad %mat4v4float %42
+ %44 = OpLoad %v3float %PosL
+ %46 = OpCompositeExtract %float %44 0
+ %47 = OpCompositeExtract %float %44 1
+ %48 = OpCompositeExtract %float %44 2
+ %49 = OpCompositeConstruct %v4float %46 %47 %48 %float_1
+ %50 = OpMatrixTimesVector %v4float %43 %49
+ %51 = OpAccessChain %_ptr_Function_v4float %v2f %int_0
+ OpStore %51 %50
+ %52 = OpAccessChain %_ptr_Function_v4float %instData %int_1
+ %53 = OpLoad %v4float %52
+ %54 = OpAccessChain %_ptr_Function_v4float %v2f %int_1
+ OpStore %54 %53
+ %55 = OpLoad %V2F %v2f
+ OpReturnValue %55
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/spec-constant-op-composite.asm.vert b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/spec-constant-op-composite.asm.vert
new file mode 100644
index 00000000000..6c4535bd4d1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/spec-constant-op-composite.asm.vert
@@ -0,0 +1,98 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 1
+; Bound: 58
+; Schema: 0
+ OpCapability Shader
+ OpCapability ClipDistance
+ OpCapability CullDistance
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Vertex %4 "main" %52 %output
+ OpSource GLSL 450
+ OpName %4 "main"
+ OpName %9 "pos"
+ OpName %50 "gl_PerVertex"
+ OpMemberName %50 0 "gl_Position"
+ OpMemberName %50 1 "gl_PointSize"
+ OpMemberName %50 2 "gl_ClipDistance"
+ OpMemberName %50 3 "gl_CullDistance"
+ OpName %52 ""
+ OpDecorate %13 SpecId 201
+ OpDecorate %24 SpecId 202
+ OpMemberDecorate %50 0 BuiltIn Position
+ OpMemberDecorate %50 1 BuiltIn PointSize
+ OpMemberDecorate %50 2 BuiltIn ClipDistance
+ OpMemberDecorate %50 3 BuiltIn CullDistance
+ OpDecorate %50 Block
+ OpDecorate %57 SpecId 200
+ OpDecorate %output Flat
+ OpDecorate %output Location 0
+ %2 = OpTypeVoid
+ %3 = OpTypeFunction %2
+ %6 = OpTypeFloat 32
+ %7 = OpTypeVector %6 4
+ %8 = OpTypePointer Function %7
+ %10 = OpConstant %6 0
+ %11 = OpConstantComposite %7 %10 %10 %10 %10
+ %12 = OpTypeInt 32 1
+ %int_ptr = OpTypePointer Output %12
+ %13 = OpSpecConstant %12 -10
+ %14 = OpConstant %12 2
+ %15 = OpSpecConstantOp %12 IAdd %13 %14
+ %17 = OpTypeInt 32 0
+ %18 = OpConstant %17 1
+ %19 = OpTypePointer Function %6
+ %24 = OpSpecConstant %17 100
+ %25 = OpConstant %17 5
+ %26 = OpSpecConstantOp %17 UMod %24 %25
+ %28 = OpConstant %17 2
+ %33 = OpConstant %12 20
+ %34 = OpConstant %12 30
+ %35 = OpTypeVector %12 4
+ %36 = OpSpecConstantComposite %35 %33 %34 %15 %15
+ %40 = OpTypeVector %12 2
+ %41 = OpSpecConstantOp %40 VectorShuffle %36 %36 1 0
+ %foo = OpSpecConstantOp %12 CompositeExtract %36 1
+ %42 = OpTypeVector %6 2
+ %49 = OpTypeArray %6 %18
+ %50 = OpTypeStruct %7 %6 %49 %49
+ %51 = OpTypePointer Output %50
+ %52 = OpVariable %51 Output
+ %output = OpVariable %int_ptr Output
+ %53 = OpConstant %12 0
+ %55 = OpTypePointer Output %7
+ %57 = OpSpecConstant %6 3.14159
+ %4 = OpFunction %2 None %3
+ %5 = OpLabel
+ %9 = OpVariable %8 Function
+ OpStore %9 %11
+ %16 = OpConvertSToF %6 %15
+ %20 = OpAccessChain %19 %9 %18
+ %21 = OpLoad %6 %20
+ %22 = OpFAdd %6 %21 %16
+ %23 = OpAccessChain %19 %9 %18
+ OpStore %23 %22
+ %27 = OpConvertUToF %6 %26
+ %29 = OpAccessChain %19 %9 %28
+ %30 = OpLoad %6 %29
+ %31 = OpFAdd %6 %30 %27
+ %32 = OpAccessChain %19 %9 %28
+ OpStore %32 %31
+ %37 = OpConvertSToF %7 %36
+ %38 = OpLoad %7 %9
+ %39 = OpFAdd %7 %38 %37
+ OpStore %9 %39
+ %43 = OpConvertSToF %42 %41
+ %44 = OpLoad %7 %9
+ %45 = OpVectorShuffle %42 %44 %44 0 1
+ %46 = OpFAdd %42 %45 %43
+ %47 = OpLoad %7 %9
+ %48 = OpVectorShuffle %7 %47 %46 4 5 2 3
+ OpStore %9 %48
+ %54 = OpLoad %7 %9
+ %56 = OpAccessChain %55 %52 %53
+ OpStore %56 %54
+ OpStore %output %foo
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/uint-vertex-id-instance-id.asm.vert b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/uint-vertex-id-instance-id.asm.vert
new file mode 100644
index 00000000000..29b0076a1ea
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/uint-vertex-id-instance-id.asm.vert
@@ -0,0 +1,65 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 36
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Vertex %main "main" %vid_1 %iid_1 %_entryPointOutput
+ OpSource HLSL 500
+ OpName %main "main"
+ OpName %_main_u1_u1_ "@main(u1;u1;"
+ OpName %vid "vid"
+ OpName %iid "iid"
+ OpName %vid_0 "vid"
+ OpName %vid_1 "vid"
+ OpName %iid_0 "iid"
+ OpName %iid_1 "iid"
+ OpName %_entryPointOutput "@entryPointOutput"
+ OpName %param "param"
+ OpName %param_0 "param"
+ OpDecorate %vid_1 BuiltIn VertexIndex
+ OpDecorate %iid_1 BuiltIn InstanceIndex
+ OpDecorate %_entryPointOutput BuiltIn Position
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+ %10 = OpTypeFunction %v4float %_ptr_Function_uint %_ptr_Function_uint
+%_ptr_Input_uint = OpTypePointer Input %uint
+ %vid_1 = OpVariable %_ptr_Input_uint Input
+ %iid_1 = OpVariable %_ptr_Input_uint Input
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_entryPointOutput = OpVariable %_ptr_Output_v4float Output
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %vid_0 = OpVariable %_ptr_Function_uint Function
+ %iid_0 = OpVariable %_ptr_Function_uint Function
+ %param = OpVariable %_ptr_Function_uint Function
+ %param_0 = OpVariable %_ptr_Function_uint Function
+ %25 = OpLoad %uint %vid_1
+ OpStore %vid_0 %25
+ %28 = OpLoad %uint %iid_1
+ OpStore %iid_0 %28
+ %32 = OpLoad %uint %vid_0
+ OpStore %param %32
+ %34 = OpLoad %uint %iid_0
+ OpStore %param_0 %34
+ %35 = OpFunctionCall %v4float %_main_u1_u1_ %param %param_0
+ OpStore %_entryPointOutput %35
+ OpReturn
+ OpFunctionEnd
+%_main_u1_u1_ = OpFunction %v4float None %10
+ %vid = OpFunctionParameter %_ptr_Function_uint
+ %iid = OpFunctionParameter %_ptr_Function_uint
+ %14 = OpLabel
+ %15 = OpLoad %uint %vid
+ %16 = OpLoad %uint %iid
+ %17 = OpIAdd %uint %15 %16
+ %18 = OpConvertUToF %float %17
+ %19 = OpCompositeConstruct %v4float %18 %18 %18 %18
+ OpReturnValue %19
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert
new file mode 100644
index 00000000000..4587fc1e96e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 2
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Vertex %main "main" %_ %gl_VertexID %gl_InstanceID
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %gl_PerVertex "gl_PerVertex"
+ OpMemberName %gl_PerVertex 0 "gl_Position"
+ OpMemberName %gl_PerVertex 1 "gl_PointSize"
+ OpMemberName %gl_PerVertex 2 "gl_ClipDistance"
+ OpMemberName %gl_PerVertex 3 "gl_CullDistance"
+ OpName %_ ""
+ OpName %gl_VertexID "gl_VertexID"
+ OpName %gl_InstanceID "gl_InstanceID"
+ OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+ OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+ OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+ OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance
+ OpDecorate %gl_PerVertex Block
+ OpDecorate %gl_VertexID BuiltIn VertexIndex
+ OpDecorate %gl_InstanceID BuiltIn InstanceIndex
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+ %uint = OpTypeInt 32 0
+ %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+ %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+ %int = OpTypeInt 32 1
+ %int_0 = OpConstant %int 0
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_VertexID = OpVariable %_ptr_Input_int Input
+%gl_InstanceID = OpVariable %_ptr_Input_int Input
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %18 = OpLoad %int %gl_VertexID
+ %20 = OpLoad %int %gl_InstanceID
+ %21 = OpIAdd %int %18 %20
+ %22 = OpConvertSToF %float %21
+ %23 = OpCompositeConstruct %v4float %22 %22 %22 %22
+ %25 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+ OpStore %25 %23
+ OpReturn
+ OpFunctionEnd