| ; SPIR-V |
| ; Version: 1.3 |
| ; Generator: Google Tint Compiler; 1 |
| ; Bound: 140 |
| ; Schema: 0 |
| OpCapability Shader |
| OpCapability Float16 |
| OpCapability UniformAndStorageBuffer16BitAccess |
| OpCapability StorageBuffer16BitAccess |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %f "f" |
| OpExecutionMode %f LocalSize 1 1 1 |
| OpMemberName %Inner_std140 0 "m_col0" |
| OpMemberName %Inner_std140 1 "m_col1" |
| OpName %Inner_std140 "Inner_std140" |
| OpMemberName %Outer_std140 0 "a" |
| OpName %Outer_std140 "Outer_std140" |
| OpMemberName %tint_symbol_1_std140 0 "tint_symbol" |
| OpName %tint_symbol_1_std140 "tint_symbol_1_std140" |
| OpName %counter "counter" |
| OpName %i "i" |
| OpName %f "f" |
| OpMemberName %Inner 0 "m" |
| OpName %Inner "Inner" |
| OpMemberName %Outer 0 "a" |
| OpName %Outer "Outer" |
| OpName %l_a "l_a" |
| OpName %l_a_i "l_a_i" |
| OpName %l_a_i_a "l_a_i_a" |
| OpName %l_a_i_a_i "l_a_i_a_i" |
| OpName %l_a_i_a_i_m "l_a_i_a_i_m" |
| OpName %l_a_i_a_i_m_i "l_a_i_a_i_m_i" |
| OpName %l_a_i_a_i_m_i_i "l_a_i_a_i_m_i_i" |
| OpName %tint_convert_Inner "tint_convert_Inner" |
| OpName %tint_input "tint_input" |
| OpName %tint_convert_Outer "tint_convert_Outer" |
| OpName %tint_input_0 "tint_input" |
| OpMemberDecorate %Inner_std140 0 Offset 0 |
| OpMemberDecorate %Inner_std140 1 Offset 8 |
| OpDecorate %_arr_Inner_std140_uint_4 ArrayStride 64 |
| OpMemberDecorate %Outer_std140 0 Offset 0 |
| OpDecorate %_arr_Outer_std140_uint_4 ArrayStride 256 |
| OpMemberDecorate %tint_symbol_1_std140 0 Offset 0 |
| OpDecorate %tint_symbol_1_std140 Block |
| OpDecorate %1 DescriptorSet 0 |
| OpDecorate %1 Binding 0 |
| OpDecorate %1 NonWritable |
| OpMemberDecorate %Inner 0 Offset 0 |
| OpMemberDecorate %Inner 0 ColMajor |
| OpMemberDecorate %Inner 0 MatrixStride 8 |
| OpDecorate %_arr_Inner_uint_4 ArrayStride 64 |
| OpMemberDecorate %Outer 0 Offset 0 |
| OpDecorate %_arr_Outer_uint_4 ArrayStride 256 |
| %half = OpTypeFloat 16 |
| %v3half = OpTypeVector %half 3 |
| %Inner_std140 = OpTypeStruct %v3half %v3half |
| %uint = OpTypeInt 32 0 |
| %uint_4 = OpConstant %uint 4 |
| %_arr_Inner_std140_uint_4 = OpTypeArray %Inner_std140 %uint_4 |
| %Outer_std140 = OpTypeStruct %_arr_Inner_std140_uint_4 |
| %_arr_Outer_std140_uint_4 = OpTypeArray %Outer_std140 %uint_4 |
| %tint_symbol_1_std140 = OpTypeStruct %_arr_Outer_std140_uint_4 |
| %_ptr_Uniform_tint_symbol_1_std140 = OpTypePointer Uniform %tint_symbol_1_std140 |
| %1 = OpVariable %_ptr_Uniform_tint_symbol_1_std140 Uniform |
| %int = OpTypeInt 32 1 |
| %_ptr_Private_int = OpTypePointer Private %int |
| %int_0 = OpConstant %int 0 |
| %counter = OpVariable %_ptr_Private_int Private %int_0 |
| %17 = OpTypeFunction %int |
| %int_1 = OpConstant %int 1 |
| %void = OpTypeVoid |
| %25 = OpTypeFunction %void |
| %_ptr_Uniform__arr_Outer_std140_uint_4 = OpTypePointer Uniform %_arr_Outer_std140_uint_4 |
| %uint_0 = OpConstant %uint 0 |
| %_ptr_Uniform_Outer_std140 = OpTypePointer Uniform %Outer_std140 |
| %_ptr_Uniform__arr_Inner_std140_uint_4 = OpTypePointer Uniform %_arr_Inner_std140_uint_4 |
| %_ptr_Uniform_Inner_std140 = OpTypePointer Uniform %Inner_std140 |
| %_ptr_Uniform_v3half = OpTypePointer Uniform %v3half |
| %uint_1 = OpConstant %uint 1 |
| %mat2v3half = OpTypeMatrix %v3half 2 |
| %_ptr_Function_mat2v3half = OpTypePointer Function %mat2v3half |
| %_ptr_Function_v3half = OpTypePointer Function %v3half |
| %_ptr_Function__arr_Outer_std140_uint_4 = OpTypePointer Function %_arr_Outer_std140_uint_4 |
| %Inner = OpTypeStruct %mat2v3half |
| %_arr_Inner_uint_4 = OpTypeArray %Inner %uint_4 |
| %Outer = OpTypeStruct %_arr_Inner_uint_4 |
| %_arr_Outer_uint_4 = OpTypeArray %Outer %uint_4 |
| %_ptr_Function__arr_Outer_uint_4 = OpTypePointer Function %_arr_Outer_uint_4 |
| %61 = OpConstantNull %_arr_Outer_uint_4 |
| %bool = OpTypeBool |
| %_ptr_Function_Outer = OpTypePointer Function %Outer |
| %_ptr_Function_Outer_std140 = OpTypePointer Function %Outer_std140 |
| %_ptr_Function__arr_Inner_std140_uint_4 = OpTypePointer Function %_arr_Inner_std140_uint_4 |
| %_ptr_Function__arr_Inner_uint_4 = OpTypePointer Function %_arr_Inner_uint_4 |
| %88 = OpConstantNull %_arr_Inner_uint_4 |
| %_ptr_Function_Inner = OpTypePointer Function %Inner |
| %_ptr_Function_Inner_std140 = OpTypePointer Function %Inner_std140 |
| %112 = OpTypeFunction %Inner %Inner_std140 |
| %119 = OpTypeFunction %Outer %Outer_std140 |
| %i = OpFunction %int None %17 |
| %18 = OpLabel |
| %19 = OpLoad %int %counter None |
| %20 = OpIAdd %int %19 %int_1 |
| OpStore %counter %20 None |
| %22 = OpLoad %int %counter None |
| OpReturnValue %22 |
| OpFunctionEnd |
| %f = OpFunction %void None %25 |
| %26 = OpLabel |
| %46 = OpVariable %_ptr_Function_mat2v3half Function |
| %53 = OpVariable %_ptr_Function__arr_Outer_std140_uint_4 Function |
| %55 = OpVariable %_ptr_Function__arr_Outer_uint_4 Function %61 |
| %84 = OpVariable %_ptr_Function__arr_Inner_std140_uint_4 Function |
| %86 = OpVariable %_ptr_Function__arr_Inner_uint_4 Function %88 |
| %27 = OpAccessChain %_ptr_Uniform__arr_Outer_std140_uint_4 %1 %uint_0 |
| %30 = OpFunctionCall %int %i |
| %31 = OpAccessChain %_ptr_Uniform_Outer_std140 %27 %30 |
| %33 = OpAccessChain %_ptr_Uniform__arr_Inner_std140_uint_4 %31 %uint_0 |
| %35 = OpFunctionCall %int %i |
| %36 = OpAccessChain %_ptr_Uniform_Inner_std140 %33 %35 |
| %38 = OpAccessChain %_ptr_Uniform_v3half %36 %uint_0 |
| %40 = OpLoad %v3half %38 None |
| %41 = OpAccessChain %_ptr_Uniform_v3half %36 %uint_1 |
| %43 = OpLoad %v3half %41 None |
| %l_a_i_a_i_m = OpCompositeConstruct %mat2v3half %40 %43 |
| OpStore %46 %l_a_i_a_i_m |
| %48 = OpFunctionCall %int %i |
| %49 = OpAccessChain %_ptr_Function_v3half %46 %48 |
| %l_a_i_a_i_m_i = OpLoad %v3half %49 None |
| %52 = OpLoad %_arr_Outer_std140_uint_4 %27 None |
| OpStore %53 %52 |
| OpBranch %62 |
| %62 = OpLabel |
| OpBranch %65 |
| %65 = OpLabel |
| %67 = OpPhi %uint %uint_0 %62 %68 %64 |
| OpLoopMerge %66 %64 None |
| OpBranch %63 |
| %63 = OpLabel |
| %69 = OpUGreaterThanEqual %bool %67 %uint_4 |
| OpSelectionMerge %71 None |
| OpBranchConditional %69 %72 %71 |
| %72 = OpLabel |
| OpBranch %66 |
| %71 = OpLabel |
| %73 = OpAccessChain %_ptr_Function_Outer %55 %67 |
| %75 = OpAccessChain %_ptr_Function_Outer_std140 %53 %67 |
| %77 = OpLoad %Outer_std140 %75 None |
| %78 = OpFunctionCall %Outer %tint_convert_Outer %77 |
| OpStore %73 %78 None |
| OpBranch %64 |
| %64 = OpLabel |
| %68 = OpIAdd %uint %67 %uint_1 |
| OpBranch %65 |
| %66 = OpLabel |
| %l_a = OpLoad %_arr_Outer_uint_4 %55 None |
| %81 = OpLoad %Outer_std140 %31 None |
| %l_a_i = OpFunctionCall %Outer %tint_convert_Outer %81 |
| %83 = OpLoad %_arr_Inner_std140_uint_4 %33 None |
| OpStore %84 %83 |
| OpBranch %89 |
| %89 = OpLabel |
| OpBranch %92 |
| %92 = OpLabel |
| %94 = OpPhi %uint %uint_0 %89 %95 %91 |
| OpLoopMerge %93 %91 None |
| OpBranch %90 |
| %90 = OpLabel |
| %96 = OpUGreaterThanEqual %bool %94 %uint_4 |
| OpSelectionMerge %97 None |
| OpBranchConditional %96 %98 %97 |
| %98 = OpLabel |
| OpBranch %93 |
| %97 = OpLabel |
| %99 = OpAccessChain %_ptr_Function_Inner %86 %94 |
| %101 = OpAccessChain %_ptr_Function_Inner_std140 %84 %94 |
| %103 = OpLoad %Inner_std140 %101 None |
| %104 = OpFunctionCall %Inner %tint_convert_Inner %103 |
| OpStore %99 %104 None |
| OpBranch %91 |
| %91 = OpLabel |
| %95 = OpIAdd %uint %94 %uint_1 |
| OpBranch %92 |
| %93 = OpLabel |
| %l_a_i_a = OpLoad %_arr_Inner_uint_4 %86 None |
| %107 = OpLoad %Inner_std140 %36 None |
| %l_a_i_a_i = OpFunctionCall %Inner %tint_convert_Inner %107 |
| %109 = OpFunctionCall %int %i |
| %l_a_i_a_i_m_i_i = OpVectorExtractDynamic %half %l_a_i_a_i_m_i %109 |
| OpReturn |
| OpFunctionEnd |
| %tint_convert_Inner = OpFunction %Inner None %112 |
| %tint_input = OpFunctionParameter %Inner_std140 |
| %113 = OpLabel |
| %114 = OpCompositeExtract %v3half %tint_input 0 |
| %115 = OpCompositeExtract %v3half %tint_input 1 |
| %116 = OpCompositeConstruct %mat2v3half %114 %115 |
| %117 = OpCompositeConstruct %Inner %116 |
| OpReturnValue %117 |
| OpFunctionEnd |
| %tint_convert_Outer = OpFunction %Outer None %119 |
| %tint_input_0 = OpFunctionParameter %Outer_std140 |
| %120 = OpLabel |
| %122 = OpVariable %_ptr_Function__arr_Inner_std140_uint_4 Function |
| %123 = OpVariable %_ptr_Function__arr_Inner_uint_4 Function %88 |
| %121 = OpCompositeExtract %_arr_Inner_std140_uint_4 %tint_input_0 0 |
| OpStore %122 %121 |
| OpBranch %124 |
| %124 = OpLabel |
| OpBranch %127 |
| %127 = OpLabel |
| %129 = OpPhi %uint %uint_0 %124 %130 %126 |
| OpLoopMerge %128 %126 None |
| OpBranch %125 |
| %125 = OpLabel |
| %131 = OpUGreaterThanEqual %bool %129 %uint_4 |
| OpSelectionMerge %132 None |
| OpBranchConditional %131 %133 %132 |
| %133 = OpLabel |
| OpBranch %128 |
| %132 = OpLabel |
| %134 = OpAccessChain %_ptr_Function_Inner %123 %129 |
| %135 = OpAccessChain %_ptr_Function_Inner_std140 %122 %129 |
| %136 = OpLoad %Inner_std140 %135 None |
| %137 = OpFunctionCall %Inner %tint_convert_Inner %136 |
| OpStore %134 %137 None |
| OpBranch %126 |
| %126 = OpLabel |
| %130 = OpIAdd %uint %129 %uint_1 |
| OpBranch %127 |
| %128 = OpLabel |
| %138 = OpLoad %_arr_Inner_uint_4 %123 None |
| %139 = OpCompositeConstruct %Outer %138 |
| OpReturnValue %139 |
| OpFunctionEnd |