; SPIR-V ; Version: 1.3 ; Generator: Khronos SPIR-V Tools Assembler; 0 ; Bound: 89 ; Schema: 0 OpCapability Shader OpCapability VariablePointers %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 "foo" OpMemberName %foo 0 "a" OpMemberName %foo 1 "b" OpMemberName %foo 2 "c" OpName %bar "bar" OpMemberName %bar 0 "d" OpName %baz "baz" OpMemberName %baz 0 "e" OpName %buf "buf" OpName %buf2 "buf2" OpName %cb "cb" OpName %tgsm "tgsm" OpName %sbuf "sbuf" OpName %sbuf2 "sbuf2" OpName %stgsm "stgsm" OpName %select_buffer "select_buffer" OpName %select_buffer_null "select_buffer_null" OpName %select_tgsm "select_tgsm" OpName %cur "cur" OpMemberDecorate %foo 0 Offset 0 OpMemberDecorate %foo 1 Offset 512 OpMemberDecorate %foo 2 Offset 520 OpMemberDecorate %bar 0 Offset 0 OpMemberDecorate %baz 0 Offset 0 OpDecorate %foo Block OpDecorate %bar Block OpDecorate %baz Block OpDecorate %buf DescriptorSet 0 OpDecorate %buf Binding 0 OpDecorate %cb DescriptorSet 0 OpDecorate %cb Binding 3 OpDecorate %buf2 DescriptorSet 0 OpDecorate %buf2 Binding 4 OpDecorate %_ptr_Workgroup_int ArrayStride 4 OpDecorate %_ptr_StorageBuffer_int ArrayStride 4 OpDecorate %_arr_int_uint_128 ArrayStride 4 OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId %void = OpTypeVoid %22 = 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 %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 %baz = OpTypeStruct %_arr_int_uint_128 %_ptr_StorageBuffer_baz = OpTypePointer StorageBuffer %baz %buf2 = OpVariable %_ptr_StorageBuffer_baz StorageBuffer %_ptr_Workgroup__arr_int_uint_128 = OpTypePointer Workgroup %_arr_int_uint_128 %tgsm = OpVariable %_ptr_Workgroup__arr_int_uint_128 Workgroup %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int %_ptr_Private__ptr_StorageBuffer_int = OpTypePointer Private %_ptr_StorageBuffer_int %sbuf = OpVariable %_ptr_Private__ptr_StorageBuffer_int Private %sbuf2 = OpVariable %_ptr_Private__ptr_StorageBuffer_int Private %_ptr_Workgroup_int = OpTypePointer Workgroup %int %_ptr_Private__ptr_Workgroup_int = OpTypePointer Private %_ptr_Workgroup_int %stgsm = OpVariable %_ptr_Private__ptr_Workgroup_int Private %uint_0 = OpConstant %uint 0 %bool = OpTypeBool %_ptr_Uniform_int = OpTypePointer Uniform %int %44 = OpTypeFunction %_ptr_StorageBuffer_int %int_0 = OpConstant %int 0 %uint_1 = OpConstant %uint 1 %47 = OpConstantNull %_ptr_StorageBuffer_int %48 = OpTypeFunction %_ptr_Workgroup_int %49 = OpConstantNull %_ptr_Workgroup_int %_ptr_Function__ptr_Workgroup_int = OpTypePointer Function %_ptr_Workgroup_int %select_buffer = OpFunction %_ptr_StorageBuffer_int None %44 %51 = OpLabel %52 = OpAccessChain %_ptr_Uniform_int %cb %uint_0 %53 = OpLoad %int %52 %54 = OpINotEqual %bool %53 %int_0 %55 = OpAccessChain %_ptr_StorageBuffer_int %buf %uint_0 %uint_0 %56 = OpAccessChain %_ptr_StorageBuffer_int %buf2 %uint_0 %uint_0 %57 = OpSelect %_ptr_StorageBuffer_int %54 %55 %56 OpReturnValue %57 OpFunctionEnd %select_buffer_null = OpFunction %_ptr_StorageBuffer_int None %44 %58 = OpLabel %59 = OpAccessChain %_ptr_Uniform_int %cb %uint_0 %60 = OpLoad %int %59 %61 = OpINotEqual %bool %60 %int_0 %62 = OpAccessChain %_ptr_StorageBuffer_int %buf %uint_0 %uint_0 %63 = OpSelect %_ptr_StorageBuffer_int %61 %62 %47 OpReturnValue %63 OpFunctionEnd %select_tgsm = OpFunction %_ptr_Workgroup_int None %48 %64 = OpLabel %65 = OpAccessChain %_ptr_Uniform_int %cb %uint_0 %66 = OpLoad %int %65 %67 = OpINotEqual %bool %66 %int_0 %68 = OpAccessChain %_ptr_Workgroup_int %tgsm %uint_0 %69 = OpSelect %_ptr_Workgroup_int %67 %68 %49 OpReturnValue %69 OpFunctionEnd %main = OpFunction %void None %22 %70 = OpLabel %cur = OpVariable %_ptr_Function__ptr_Workgroup_int Function %71 = OpFunctionCall %_ptr_StorageBuffer_int %select_buffer OpStore %sbuf %71 %72 = OpFunctionCall %_ptr_StorageBuffer_int %select_buffer_null OpStore %sbuf2 %72 %73 = OpFunctionCall %_ptr_Workgroup_int %select_tgsm OpStore %stgsm %73 %74 = OpAccessChain %_ptr_StorageBuffer_int %buf %uint_0 %uint_0 %75 = OpLoad %_ptr_Workgroup_int %stgsm %76 = OpCopyObject %_ptr_Workgroup_int %75 OpStore %cur %76 OpBranch %77 %77 = OpLabel %78 = OpPhi %_ptr_StorageBuffer_int %74 %70 %79 %80 %81 = OpLoad %_ptr_Workgroup_int %cur %82 = OpLoad %int %78 %83 = OpINotEqual %bool %82 %int_0 OpLoopMerge %85 %80 None OpBranchConditional %83 %84 %85 %84 = OpLabel %86 = OpLoad %int %81 %87 = OpIAdd %int %82 %86 OpStore %78 %87 OpStore %81 %87 OpBranch %80 %80 = OpLabel %79 = OpPtrAccessChain %_ptr_StorageBuffer_int %78 %uint_1 %88 = OpPtrAccessChain %_ptr_Workgroup_int %81 %uint_1 OpStore %cur %88 OpBranch %77 %85 = OpLabel OpReturn OpFunctionEnd