SPIRV-Cross/shaders-hlsl/asm/comp/block-name-alias-global.asm.comp
Hans-Kristian Arntzen 9728f9c1b7 Use correct block-name / other-name aliasing rules.
A block name cannot alias with any name in its own scope,
and it cannot alias with any other "global" name.

To solve this, we need to complicate the name cache updates a little bit
where we have a "primary" namespace and "secondary" namespace.
2019-01-04 15:02:54 +01:00

120 lines
5.1 KiB
Plaintext

; 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