blob: d15757a26c7c67e4020703922e5a93e6906de54e [file]
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 1
; Bound: 216
; Schema: 0
OpCapability Shader
OpCapability Float16
OpCapability UniformAndStorageBuffer16BitAccess
OpCapability StorageBuffer16BitAccess
%36 = OpExtInstImport "GLSL.std.450"
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"
OpMemberName %Inner_std140 2 "m_col2"
OpName %Inner_std140 "Inner_std140"
OpMemberName %Outer_std140_tint_explicit_layout 0 "a"
OpName %Outer_std140_tint_explicit_layout "Outer_std140_tint_explicit_layout"
OpMemberName %a_block_std140_tint_explicit_layout 0 "inner"
OpName %a_block_std140_tint_explicit_layout "a_block_std140_tint_explicit_layout"
OpName %counter "counter"
OpName %i "i"
OpName %f "f"
OpMemberName %Outer_std140 0 "a"
OpName %Outer_std140 "Outer_std140"
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"
OpName %tint_convert_explicit_layout "tint_convert_explicit_layout"
OpName %tint_source "tint_source"
OpName %tint_convert_explicit_layout_0 "tint_convert_explicit_layout"
OpName %tint_source_0 "tint_source"
OpName %tint_convert_explicit_layout_1 "tint_convert_explicit_layout"
OpName %tint_source_1 "tint_source"
OpMemberDecorate %Inner_std140 0 Offset 0
OpMemberDecorate %Inner_std140 1 Offset 8
OpMemberDecorate %Inner_std140 2 Offset 16
OpDecorate %_arr_Inner_std140_uint_4 ArrayStride 64
OpMemberDecorate %Outer_std140_tint_explicit_layout 0 Offset 0
OpDecorate %_arr_Outer_std140_tint_explicit_layout_uint_4 ArrayStride 256
OpMemberDecorate %a_block_std140_tint_explicit_layout 0 Offset 0
OpDecorate %a_block_std140_tint_explicit_layout Block
OpDecorate %1 DescriptorSet 0
OpDecorate %1 Binding 0
OpDecorate %1 NonWritable
%half = OpTypeFloat 16
%v4half = OpTypeVector %half 4
%Inner_std140 = OpTypeStruct %v4half %v4half %v4half
%uint = OpTypeInt 32 0
%uint_4 = OpConstant %uint 4
%_arr_Inner_std140_uint_4 = OpTypeArray %Inner_std140 %uint_4
%Outer_std140_tint_explicit_layout = OpTypeStruct %_arr_Inner_std140_uint_4
%_arr_Outer_std140_tint_explicit_layout_uint_4 = OpTypeArray %Outer_std140_tint_explicit_layout %uint_4
%a_block_std140_tint_explicit_layout = OpTypeStruct %_arr_Outer_std140_tint_explicit_layout_uint_4
%_ptr_Uniform_a_block_std140_tint_explicit_layout = OpTypePointer Uniform %a_block_std140_tint_explicit_layout
%1 = OpVariable %_ptr_Uniform_a_block_std140_tint_explicit_layout 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
%28 = OpTypeFunction %void
%_ptr_Uniform__arr_Outer_std140_tint_explicit_layout_uint_4 = OpTypePointer Uniform %_arr_Outer_std140_tint_explicit_layout_uint_4
%uint_0 = OpConstant %uint 0
%uint_3 = OpConstant %uint 3
%_ptr_Uniform_Outer_std140_tint_explicit_layout = OpTypePointer Uniform %Outer_std140_tint_explicit_layout
%_ptr_Uniform__arr_Inner_std140_uint_4 = OpTypePointer Uniform %_arr_Inner_std140_uint_4
%_ptr_Uniform_Inner_std140 = OpTypePointer Uniform %Inner_std140
%_ptr_Uniform_v4half = OpTypePointer Uniform %v4half
%uint_1 = OpConstant %uint 1
%uint_2 = OpConstant %uint 2
%mat3v4half = OpTypeMatrix %v4half 3
%_ptr_Function_mat3v4half = OpTypePointer Function %mat3v4half
%_ptr_Function_v4half = OpTypePointer Function %v4half
%_arr_Inner_std140_uint_4_0 = OpTypeArray %Inner_std140 %uint_4
%Outer_std140 = OpTypeStruct %_arr_Inner_std140_uint_4_0
%_arr_Outer_std140_uint_4 = OpTypeArray %Outer_std140 %uint_4
%_ptr_Function__arr_Outer_std140_uint_4 = OpTypePointer Function %_arr_Outer_std140_uint_4
%Inner = OpTypeStruct %mat3v4half
%_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
%80 = OpConstantNull %_arr_Outer_uint_4
%_ptr_Function__arr_Inner_std140_uint_4_0 = OpTypePointer Function %_arr_Inner_std140_uint_4_0
%_ptr_Function__arr_Inner_uint_4 = OpTypePointer Function %_arr_Inner_uint_4
%101 = OpConstantNull %_arr_Inner_uint_4
%bool = OpTypeBool
%_ptr_Function_Outer = OpTypePointer Function %Outer
%_ptr_Function_Outer_std140 = OpTypePointer Function %Outer_std140
%_ptr_Function_Inner = OpTypePointer Function %Inner
%_ptr_Function_Inner_std140 = OpTypePointer Function %Inner_std140
%137 = OpTypeFunction %Inner %Inner_std140
%145 = OpTypeFunction %Outer %Outer_std140
%167 = OpTypeFunction %_arr_Inner_std140_uint_4_0 %_arr_Inner_std140_uint_4
%_ptr_Function__arr_Inner_std140_uint_4 = OpTypePointer Function %_arr_Inner_std140_uint_4
%172 = OpConstantNull %_arr_Inner_std140_uint_4_0
%188 = OpTypeFunction %Outer_std140 %Outer_std140_tint_explicit_layout
%194 = OpTypeFunction %_arr_Outer_std140_uint_4 %_arr_Outer_std140_tint_explicit_layout_uint_4
%_ptr_Function__arr_Outer_std140_tint_explicit_layout_uint_4 = OpTypePointer Function %_arr_Outer_std140_tint_explicit_layout_uint_4
%199 = OpConstantNull %_arr_Outer_std140_uint_4
%_ptr_Function_Outer_std140_tint_explicit_layout = OpTypePointer Function %Outer_std140_tint_explicit_layout
%i = OpFunction %int None %17
%18 = OpLabel
%19 = OpLoad %int %counter None
%20 = OpBitcast %uint %19
%21 = OpBitcast %uint %int_1
%23 = OpIAdd %uint %20 %21
%24 = OpBitcast %int %23
OpStore %counter %24 None
%25 = OpLoad %int %counter None
OpReturnValue %25
OpFunctionEnd
%f = OpFunction %void None %28
%29 = OpLabel
%58 = OpVariable %_ptr_Function_mat3v4half Function
%72 = OpVariable %_ptr_Function__arr_Outer_std140_uint_4 Function
%74 = OpVariable %_ptr_Function__arr_Outer_uint_4 Function %80
%97 = OpVariable %_ptr_Function__arr_Inner_std140_uint_4_0 Function
%99 = OpVariable %_ptr_Function__arr_Inner_uint_4 Function %101
%30 = OpAccessChain %_ptr_Uniform__arr_Outer_std140_tint_explicit_layout_uint_4 %1 %uint_0
%33 = OpFunctionCall %int %i
%34 = OpBitcast %uint %33
%35 = OpExtInst %uint %36 UMin %34 %uint_3
%38 = OpAccessChain %_ptr_Uniform_Outer_std140_tint_explicit_layout %30 %35
%40 = OpAccessChain %_ptr_Uniform__arr_Inner_std140_uint_4 %38 %uint_0
%42 = OpFunctionCall %int %i
%43 = OpBitcast %uint %42
%44 = OpExtInst %uint %36 UMin %43 %uint_3
%45 = OpAccessChain %_ptr_Uniform_Inner_std140 %40 %44
%47 = OpAccessChain %_ptr_Uniform_v4half %45 %uint_0
%49 = OpLoad %v4half %47 None
%50 = OpAccessChain %_ptr_Uniform_v4half %45 %uint_1
%52 = OpLoad %v4half %50 None
%53 = OpAccessChain %_ptr_Uniform_v4half %45 %uint_2
%55 = OpLoad %v4half %53 None
%l_a_i_a_i_m = OpCompositeConstruct %mat3v4half %49 %52 %55
OpStore %58 %l_a_i_a_i_m
%60 = OpFunctionCall %int %i
%61 = OpBitcast %uint %60
%62 = OpExtInst %uint %36 UMin %61 %uint_2
%63 = OpAccessChain %_ptr_Function_v4half %58 %62
%l_a_i_a_i_m_i = OpLoad %v4half %63 None
%66 = OpLoad %_arr_Outer_std140_tint_explicit_layout_uint_4 %30 None
%67 = OpFunctionCall %_arr_Outer_std140_uint_4 %tint_convert_explicit_layout_1 %66
OpStore %72 %67
OpBranch %81
%81 = OpLabel
OpBranch %84
%84 = OpLabel
%86 = OpPhi %uint %uint_0 %81 %87 %83
OpLoopMerge %85 %83 None
OpBranch %82
%82 = OpLabel
%117 = OpUGreaterThanEqual %bool %86 %uint_4
OpSelectionMerge %119 None
OpBranchConditional %117 %120 %119
%120 = OpLabel
OpBranch %85
%119 = OpLabel
%121 = OpAccessChain %_ptr_Function_Outer %74 %86
%123 = OpAccessChain %_ptr_Function_Outer_std140 %72 %86
%125 = OpLoad %Outer_std140 %123 None
%126 = OpFunctionCall %Outer %tint_convert_Outer %125
OpStore %121 %126 None
OpBranch %83
%83 = OpLabel
%87 = OpIAdd %uint %86 %uint_1
OpBranch %84
%85 = OpLabel
%l_a = OpLoad %_arr_Outer_uint_4 %74 None
%89 = OpLoad %Outer_std140_tint_explicit_layout %38 None
%90 = OpFunctionCall %Outer_std140 %tint_convert_explicit_layout_0 %89
%l_a_i = OpFunctionCall %Outer %tint_convert_Outer %90
%94 = OpLoad %_arr_Inner_std140_uint_4 %40 None
%95 = OpFunctionCall %_arr_Inner_std140_uint_4_0 %tint_convert_explicit_layout %94
OpStore %97 %95
OpBranch %102
%102 = OpLabel
OpBranch %105
%105 = OpLabel
%107 = OpPhi %uint %uint_0 %102 %108 %104
OpLoopMerge %106 %104 None
OpBranch %103
%103 = OpLabel
%127 = OpUGreaterThanEqual %bool %107 %uint_4
OpSelectionMerge %128 None
OpBranchConditional %127 %129 %128
%129 = OpLabel
OpBranch %106
%128 = OpLabel
%130 = OpAccessChain %_ptr_Function_Inner %99 %107
%132 = OpAccessChain %_ptr_Function_Inner_std140 %97 %107
%134 = OpLoad %Inner_std140 %132 None
%135 = OpFunctionCall %Inner %tint_convert_Inner %134
OpStore %130 %135 None
OpBranch %104
%104 = OpLabel
%108 = OpIAdd %uint %107 %uint_1
OpBranch %105
%106 = OpLabel
%l_a_i_a = OpLoad %_arr_Inner_uint_4 %99 None
%110 = OpLoad %Inner_std140 %45 None
%l_a_i_a_i = OpFunctionCall %Inner %tint_convert_Inner %110
%113 = OpFunctionCall %int %i
%114 = OpBitcast %uint %113
%115 = OpExtInst %uint %36 UMin %114 %uint_3
%l_a_i_a_i_m_i_i = OpVectorExtractDynamic %half %l_a_i_a_i_m_i %115
OpReturn
OpFunctionEnd
%tint_convert_Inner = OpFunction %Inner None %137
%tint_input = OpFunctionParameter %Inner_std140
%138 = OpLabel
%139 = OpCompositeExtract %v4half %tint_input 0
%140 = OpCompositeExtract %v4half %tint_input 1
%141 = OpCompositeExtract %v4half %tint_input 2
%142 = OpCompositeConstruct %mat3v4half %139 %140 %141
%143 = OpCompositeConstruct %Inner %142
OpReturnValue %143
OpFunctionEnd
%tint_convert_Outer = OpFunction %Outer None %145
%tint_input_0 = OpFunctionParameter %Outer_std140
%146 = OpLabel
%148 = OpVariable %_ptr_Function__arr_Inner_std140_uint_4_0 Function
%149 = OpVariable %_ptr_Function__arr_Inner_uint_4 Function %101
%147 = OpCompositeExtract %_arr_Inner_std140_uint_4_0 %tint_input_0 0
OpStore %148 %147
OpBranch %150
%150 = OpLabel
OpBranch %153
%153 = OpLabel
%155 = OpPhi %uint %uint_0 %150 %156 %152
OpLoopMerge %154 %152 None
OpBranch %151
%151 = OpLabel
%159 = OpUGreaterThanEqual %bool %155 %uint_4
OpSelectionMerge %160 None
OpBranchConditional %159 %161 %160
%161 = OpLabel
OpBranch %154
%160 = OpLabel
%162 = OpAccessChain %_ptr_Function_Inner %149 %155
%163 = OpAccessChain %_ptr_Function_Inner_std140 %148 %155
%164 = OpLoad %Inner_std140 %163 None
%165 = OpFunctionCall %Inner %tint_convert_Inner %164
OpStore %162 %165 None
OpBranch %152
%152 = OpLabel
%156 = OpIAdd %uint %155 %uint_1
OpBranch %153
%154 = OpLabel
%157 = OpLoad %_arr_Inner_uint_4 %149 None
%158 = OpCompositeConstruct %Outer %157
OpReturnValue %158
OpFunctionEnd
%tint_convert_explicit_layout = OpFunction %_arr_Inner_std140_uint_4_0 None %167
%tint_source = OpFunctionParameter %_arr_Inner_std140_uint_4
%168 = OpLabel
%169 = OpVariable %_ptr_Function__arr_Inner_std140_uint_4 Function
%171 = OpVariable %_ptr_Function__arr_Inner_std140_uint_4_0 Function %172
OpStore %169 %tint_source
OpBranch %173
%173 = OpLabel
OpBranch %176
%176 = OpLabel
%178 = OpPhi %uint %uint_0 %173 %179 %175
OpLoopMerge %177 %175 None
OpBranch %174
%174 = OpLabel
%181 = OpUGreaterThanEqual %bool %178 %uint_4
OpSelectionMerge %182 None
OpBranchConditional %181 %183 %182
%183 = OpLabel
OpBranch %177
%182 = OpLabel
%184 = OpAccessChain %_ptr_Function_Inner_std140 %169 %178
%185 = OpLoad %Inner_std140 %184 None
%186 = OpAccessChain %_ptr_Function_Inner_std140 %171 %178
OpStore %186 %185 None
OpBranch %175
%175 = OpLabel
%179 = OpIAdd %uint %178 %uint_1
OpBranch %176
%177 = OpLabel
%180 = OpLoad %_arr_Inner_std140_uint_4_0 %171 None
OpReturnValue %180
OpFunctionEnd
%tint_convert_explicit_layout_0 = OpFunction %Outer_std140 None %188
%tint_source_0 = OpFunctionParameter %Outer_std140_tint_explicit_layout
%189 = OpLabel
%190 = OpCompositeExtract %_arr_Inner_std140_uint_4 %tint_source_0 0
%191 = OpFunctionCall %_arr_Inner_std140_uint_4_0 %tint_convert_explicit_layout %190
%192 = OpCompositeConstruct %Outer_std140 %191
OpReturnValue %192
OpFunctionEnd
%tint_convert_explicit_layout_1 = OpFunction %_arr_Outer_std140_uint_4 None %194
%tint_source_1 = OpFunctionParameter %_arr_Outer_std140_tint_explicit_layout_uint_4
%195 = OpLabel
%196 = OpVariable %_ptr_Function__arr_Outer_std140_tint_explicit_layout_uint_4 Function
%198 = OpVariable %_ptr_Function__arr_Outer_std140_uint_4 Function %199
OpStore %196 %tint_source_1
OpBranch %200
%200 = OpLabel
OpBranch %203
%203 = OpLabel
%205 = OpPhi %uint %uint_0 %200 %206 %202
OpLoopMerge %204 %202 None
OpBranch %201
%201 = OpLabel
%208 = OpUGreaterThanEqual %bool %205 %uint_4
OpSelectionMerge %209 None
OpBranchConditional %208 %210 %209
%210 = OpLabel
OpBranch %204
%209 = OpLabel
%211 = OpAccessChain %_ptr_Function_Outer_std140_tint_explicit_layout %196 %205
%213 = OpLoad %Outer_std140_tint_explicit_layout %211 None
%214 = OpFunctionCall %Outer_std140 %tint_convert_explicit_layout_0 %213
%215 = OpAccessChain %_ptr_Function_Outer_std140 %198 %205
OpStore %215 %214 None
OpBranch %202
%202 = OpLabel
%206 = OpIAdd %uint %205 %uint_1
OpBranch %203
%204 = OpLabel
%207 = OpLoad %_arr_Outer_std140_uint_4 %198 None
OpReturnValue %207
OpFunctionEnd