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%BlockArray = OpTypeArray %Block %uint_3 33%SSBO = OpTypeStruct %BlockArray 34%SSBO_Ptr = OpTypePointer StorageBuffer %SSBO 35%SSBO_Var = OpVariable %SSBO_Ptr StorageBuffer 36%UBO_Ptr = OpTypePointer Uniform %SSBO 37%UBO_Var = OpVariable %UBO_Ptr Uniform 38%void = OpTypeVoid 39%func_type = OpTypeFunction %void 40 41 %main = OpFunction %void None %func_type 42 %25 = OpLabel 43 %func = OpVariable %arr_uvec2_2_ptr_func Function 44 45 ; DeviceToDevice 46 %ptr_arr_0 = OpAccessChain %arr_uvec2_2_ptr %SSBO_Var %uint_0 %uint_0 %uint_0 47 %ptr_arr_1 = OpAccessChain %arr_uvec2_2_ptr %SSBO_Var %uint_0 %uint_0 %uint_1 48 %loaded_array = OpLoad %arr_uvec2_2 %ptr_arr_1 49 OpStore %ptr_arr_0 %loaded_array 50 51 ; ConstantToDevice 52 %ptr_arr_1_const = OpAccessChain %arr_uvec2_2_ptr_const %UBO_Var %uint_0 %uint_0 %uint_1 53 %loaded_array_const = OpLoad %arr_uvec2_2 %ptr_arr_1_const 54 OpStore %ptr_arr_0 %loaded_array_const 55 56 ; StackToDevice 57 %loaded_array_func = OpLoad %arr_uvec2_2 %func 58 OpStore %ptr_arr_0 %loaded_array_func 59 60 ; ThreadGroupToDevice 61 %loaded_array_workgroup = OpLoad %arr_uvec2_2 %wg 62 OpStore %ptr_arr_0 %loaded_array_workgroup 63 64 ; DeviceToThreadGroup 65 %loaded_array_2 = OpLoad %arr_uvec2_2 %ptr_arr_1 66 OpStore %wg %loaded_array_2 67 68 ; DeviceToStack 69 %loaded_array_3 = OpLoad %arr_uvec2_2 %ptr_arr_1 70 OpStore %func %loaded_array_3 71 72 ; ConstantToThreadGroup 73 %loaded_array_const_2 = OpLoad %arr_uvec2_2 %ptr_arr_1_const 74 OpStore %wg %loaded_array_const_2 75 76 ; ConstantToStack 77 %loaded_array_const_3 = OpLoad %arr_uvec2_2 %ptr_arr_1_const 78 OpStore %func %loaded_array_const_3 79 80 OpReturn 81 OpFunctionEnd 82