SPIRV-Cross/shaders-msl/asm/comp/variable-pointers-2.asm.comp

118 строки
5.0 KiB
Plaintext

; SPIR-V
; Version: 1.3
; Generator: Khronos SPIR-V Tools Assembler; 0
; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability VariablePointers
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID %gl_LocalInvocationID
OpExecutionMode %main LocalSize 1 1 1
OpSource GLSL 450
OpName %main "main"
OpName %foo "foo"
OpMemberName %foo 0 "a"
OpMemberName %foo 1 "b"
OpMemberName %foo 2 "c"
OpName %bar "bar"
OpMemberName %bar 0 "d"
OpName %buf "buf"
OpName %cb "cb"
OpName %select_buffer "select_buffer"
OpName %select_input "select_input"
OpName %a "a"
OpMemberDecorate %foo 0 Offset 0
OpMemberDecorate %foo 1 Offset 512
OpMemberDecorate %foo 2 Offset 520
OpMemberDecorate %bar 0 Offset 0
OpDecorate %foo Block
OpDecorate %bar Block
OpDecorate %buf DescriptorSet 0
OpDecorate %buf Binding 0
OpDecorate %cb DescriptorSet 0
OpDecorate %cb Binding 1
OpDecorate %_ptr_StorageBuffer_int ArrayStride 4
OpDecorate %_arr_int_uint_128 ArrayStride 4
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
%void = OpTypeVoid
%15 = OpTypeFunction %void
%int = OpTypeInt 32 1
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%uint_128 = OpConstant %uint 128
%_arr_int_uint_128 = OpTypeArray %int %uint_128
%float = OpTypeFloat 32
%v2float = OpTypeVector %float 2
%foo = OpTypeStruct %_arr_int_uint_128 %uint %v2float
%_ptr_StorageBuffer_foo = OpTypePointer StorageBuffer %foo
%buf = OpVariable %_ptr_StorageBuffer_foo StorageBuffer
%bar = OpTypeStruct %int
%_ptr_Uniform_bar = OpTypePointer Uniform %bar
%cb = OpVariable %_ptr_Uniform_bar Uniform
%uint_0 = OpConstant %uint 0
%bool = OpTypeBool
%_ptr_Uniform_int = OpTypePointer Uniform %int
%28 = OpTypeFunction %_ptr_StorageBuffer_foo %_ptr_StorageBuffer_foo
%int_0 = OpConstant %int 0
%uint_1 = OpConstant %uint 1
%31 = OpConstantNull %_ptr_StorageBuffer_foo
%32 = OpTypeFunction %_ptr_Input_v3uint
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
%_ptr_Function__ptr_StorageBuffer_foo = OpTypePointer Function %_ptr_StorageBuffer_foo
%select_buffer = OpFunction %_ptr_StorageBuffer_foo None %28
%a = OpFunctionParameter %_ptr_StorageBuffer_foo
%33 = OpLabel
%34 = OpAccessChain %_ptr_Uniform_int %cb %uint_0
%35 = OpLoad %int %34
%36 = OpINotEqual %bool %35 %int_0
%37 = OpSelect %_ptr_StorageBuffer_foo %36 %a %31
OpReturnValue %37
OpFunctionEnd
%select_input = OpFunction %_ptr_Input_v3uint None %32
%38 = OpLabel
%39 = OpAccessChain %_ptr_Uniform_int %cb %uint_0
%40 = OpLoad %int %39
%41 = OpINotEqual %bool %40 %int_0
%42 = OpSelect %_ptr_Input_v3uint %41 %gl_GlobalInvocationID %gl_LocalInvocationID
OpReturnValue %42
OpFunctionEnd
%main = OpFunction %void None %15
%43 = OpLabel
%65 = OpVariable %_ptr_Function__ptr_StorageBuffer_foo Function
%44 = OpFunctionCall %_ptr_StorageBuffer_foo %select_buffer %buf
OpStore %65 %44
%45 = OpFunctionCall %_ptr_Input_v3uint %select_input
%66 = OpLoad %_ptr_StorageBuffer_foo %65
%46 = OpAccessChain %_ptr_StorageBuffer_int %66 %uint_0 %uint_0
%47 = OpAccessChain %_ptr_StorageBuffer_int %buf %uint_0 %uint_0
OpBranch %48
%48 = OpLabel
%49 = OpPhi %_ptr_StorageBuffer_int %46 %43 %50 %51
%52 = OpPhi %_ptr_StorageBuffer_int %47 %43 %53 %51
%54 = OpLoad %int %49
%55 = OpLoad %int %52
%56 = OpINotEqual %bool %54 %55
OpLoopMerge %58 %51 None
OpBranchConditional %56 %57 %58
%57 = OpLabel
%59 = OpIAdd %int %54 %55
%60 = OpLoad %v3uint %45
%61 = OpCompositeExtract %uint %60 0
%62 = OpBitcast %int %61
%63 = OpIAdd %int %59 %62
OpStore %49 %63
OpStore %52 %63
OpBranch %51
%51 = OpLabel
%50 = OpPtrAccessChain %_ptr_StorageBuffer_int %49 %uint_1
%53 = OpPtrAccessChain %_ptr_StorageBuffer_int %52 %uint_1
OpBranch %48
%58 = OpLabel
OpReturn
OpFunctionEnd