1 OpCapability Shader 2 OpMemoryModel Logical GLSL450 3 OpEntryPoint GLCompute %main "main" 4 OpExecutionMode %main LocalSize 1 1 1 5 OpName %Block "Block" 6 OpName %SSBO "SSBO" 7 OpName %SSBO_Var "ssbo" 8 OpName %UBO_Var "ubo" 9 OpDecorate %SSBO_Var Binding 0 10 OpDecorate %SSBO_Var DescriptorSet 0 11 OpDecorate %UBO_Var Binding 1 12 OpDecorate %UBO_Var DescriptorSet 0 13 OpMemberDecorate %SSBO 0 Offset 0 14 OpMemberDecorate %Block 0 Offset 0 15 OpMemberDecorate %Block 1 Offset 16 16 OpDecorate %BlockArray ArrayStride 32 17 OpDecorate %arr_uvec2_2 ArrayStride 8 18 OpDecorate %SSBO Block 19 %uint = OpTypeInt 32 0 20 %uint_0 = OpConstant %uint 0 21 %uint_1 = OpConstant %uint 1 22 %uint_2 = OpConstant %uint 2 23 %uint_3 = OpConstant %uint 3 24 %uvec2 = OpTypeVector %uint 2 25 %arr_uvec2_2 = OpTypeArray %uvec2 %uint_2 26 %arr_uvec2_2_ptr = OpTypePointer StorageBuffer %arr_uvec2_2 27 %arr_uvec2_2_ptr_const = OpTypePointer Uniform %arr_uvec2_2 28 %arr_uvec2_2_ptr_func = OpTypePointer Function %arr_uvec2_2 29 %arr_uvec2_2_ptr_workgroup = OpTypePointer Workgroup %arr_uvec2_2 30 %wg = OpVariable %arr_uvec2_2_ptr_workgroup Workgroup 31 %Block = OpTypeStruct %arr_uvec2_2 %arr_uvec2_2 32 %Block_ptr = OpTypePointer StorageBuffer %Block 33%BlockArray = OpTypeArray %Block %uint_3 34%SSBO = OpTypeStruct %BlockArray 35%SSBO_Ptr = OpTypePointer StorageBuffer %SSBO 36%SSBO_Var = OpVariable %SSBO_Ptr StorageBuffer 37%UBO_Ptr = OpTypePointer Uniform %SSBO 38%UBO_Var = OpVariable %UBO_Ptr Uniform 39%void = OpTypeVoid 40%func_type = OpTypeFunction %void 41 42 %main = OpFunction %void None %func_type 43 %25 = OpLabel 44 %func = OpVariable %arr_uvec2_2_ptr_func Function 45 46 ; Copy device array to temporary. 47 %ptr = OpAccessChain %Block_ptr %SSBO_Var %uint_0 %uint_0 48 %ptr_arr_1 = OpAccessChain %arr_uvec2_2_ptr %SSBO_Var %uint_0 %uint_0 %uint_1 49 %loaded_array = OpLoad %arr_uvec2_2 %ptr_arr_1 50 %constructed = OpCompositeConstruct %Block %loaded_array %loaded_array 51 OpStore %ptr %constructed 52 53 OpReturn 54 OpFunctionEnd 55