Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2019-01-04 14:15:43 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2019-01-04 17:02:54 +0300
commit9728f9c1b704061098219d05fe1cb8d4aaec06b6 (patch)
treed2fba0c934893707fce06645018412f8a980d224 /shaders
parented16b3e69985feaf565efbecea70a1cc2fca2a58 (diff)
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.
Diffstat (limited to 'shaders')
-rw-r--r--shaders/asm/comp/block-name-alias-global.asm.comp119
1 files changed, 119 insertions, 0 deletions
diff --git a/shaders/asm/comp/block-name-alias-global.asm.comp b/shaders/asm/comp/block-name-alias-global.asm.comp
new file mode 100644
index 00000000..85f6cc04
--- /dev/null
+++ b/shaders/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