| ; SPIR-V |
| ; Version: 1.3 |
| ; Generator: Google Tint Compiler; 1 |
| ; Bound: 130 |
| ; Schema: 0 |
| OpCapability Shader |
| OpCapability Float16 |
| OpCapability UniformAndStorageBuffer16BitAccess |
| OpCapability StorageBuffer16BitAccess |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %f "f" |
| OpExecutionMode %f LocalSize 1 1 1 |
| OpMemberName %S_std140 0 "before" |
| OpMemberName %S_std140 1 "m_col0" |
| OpMemberName %S_std140 2 "m_col1" |
| OpMemberName %S_std140 3 "after" |
| OpName %S_std140 "S_std140" |
| OpMemberName %tint_symbol_1_std140 0 "tint_symbol" |
| OpName %tint_symbol_1_std140 "tint_symbol_1_std140" |
| OpMemberName %S 0 "before" |
| OpMemberName %S 1 "m" |
| OpMemberName %S 2 "after" |
| OpName %S "S" |
| OpMemberName %tint_symbol_3 0 "tint_symbol_2" |
| OpName %tint_symbol_3 "tint_symbol_3" |
| OpName %f "f" |
| OpName %tint_store_and_preserve_padding "tint_store_and_preserve_padding" |
| OpName %value_param "value_param" |
| OpName %tint_store_and_preserve_padding_0 "tint_store_and_preserve_padding" |
| OpName %target_indices "target_indices" |
| OpName %value_param_0 "value_param" |
| OpName %tint_store_and_preserve_padding_1 "tint_store_and_preserve_padding" |
| OpName %target_indices_0 "target_indices" |
| OpName %value_param_1 "value_param" |
| OpName %tint_convert_S "tint_convert_S" |
| OpName %tint_input "tint_input" |
| OpMemberDecorate %S_std140 0 Offset 0 |
| OpMemberDecorate %S_std140 1 Offset 8 |
| OpMemberDecorate %S_std140 2 Offset 16 |
| OpMemberDecorate %S_std140 3 Offset 64 |
| OpDecorate %_arr_S_std140_uint_4 ArrayStride 128 |
| 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 %S 0 Offset 0 |
| OpMemberDecorate %S 1 Offset 8 |
| OpMemberDecorate %S 1 ColMajor |
| OpMemberDecorate %S 1 MatrixStride 8 |
| OpMemberDecorate %S 2 Offset 64 |
| OpDecorate %_arr_S_uint_4 ArrayStride 128 |
| OpMemberDecorate %tint_symbol_3 0 Offset 0 |
| OpDecorate %tint_symbol_3 Block |
| OpDecorate %11 DescriptorSet 0 |
| OpDecorate %11 Binding 1 |
| OpDecorate %11 Coherent |
| OpDecorate %_arr_uint_uint_1 ArrayStride 4 |
| %int = OpTypeInt 32 1 |
| %half = OpTypeFloat 16 |
| %v3half = OpTypeVector %half 3 |
| %S_std140 = OpTypeStruct %int %v3half %v3half %int |
| %uint = OpTypeInt 32 0 |
| %uint_4 = OpConstant %uint 4 |
| %_arr_S_std140_uint_4 = OpTypeArray %S_std140 %uint_4 |
| %tint_symbol_1_std140 = OpTypeStruct %_arr_S_std140_uint_4 |
| %_ptr_Uniform_tint_symbol_1_std140 = OpTypePointer Uniform %tint_symbol_1_std140 |
| %1 = OpVariable %_ptr_Uniform_tint_symbol_1_std140 Uniform |
| %mat2v3half = OpTypeMatrix %v3half 2 |
| %S = OpTypeStruct %int %mat2v3half %int |
| %_arr_S_uint_4 = OpTypeArray %S %uint_4 |
| %tint_symbol_3 = OpTypeStruct %_arr_S_uint_4 |
| %_ptr_StorageBuffer_tint_symbol_3 = OpTypePointer StorageBuffer %tint_symbol_3 |
| %11 = OpVariable %_ptr_StorageBuffer_tint_symbol_3 StorageBuffer |
| %void = OpTypeVoid |
| %19 = OpTypeFunction %void |
| %_ptr_Uniform__arr_S_std140_uint_4 = OpTypePointer Uniform %_arr_S_std140_uint_4 |
| %uint_0 = OpConstant %uint 0 |
| %_ptr_Function__arr_S_std140_uint_4 = OpTypePointer Function %_arr_S_std140_uint_4 |
| %_ptr_Function__arr_S_uint_4 = OpTypePointer Function %_arr_S_uint_4 |
| %29 = OpConstantNull %_arr_S_uint_4 |
| %bool = OpTypeBool |
| %_ptr_Function_S = OpTypePointer Function %S |
| %_ptr_Function_S_std140 = OpTypePointer Function %S_std140 |
| %uint_1 = OpConstant %uint 1 |
| %_ptr_Uniform_S_std140 = OpTypePointer Uniform %S_std140 |
| %int_2 = OpConstant %int 2 |
| %int_1 = OpConstant %int 1 |
| %_arr_uint_uint_1 = OpTypeArray %uint %uint_1 |
| %_ptr_Uniform_v3half = OpTypePointer Uniform %v3half |
| %uint_2 = OpConstant %uint 2 |
| %int_3 = OpConstant %int 3 |
| %_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half |
| %int_0 = OpConstant %int 0 |
| %82 = OpTypeFunction %void %_arr_S_uint_4 |
| %101 = OpTypeFunction %void %_arr_uint_uint_1 %S |
| %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int |
| %114 = OpTypeFunction %void %_arr_uint_uint_1 %mat2v3half |
| %122 = OpTypeFunction %S %S_std140 |
| %f = OpFunction %void None %19 |
| %20 = OpLabel |
| %25 = OpVariable %_ptr_Function__arr_S_std140_uint_4 Function |
| %27 = OpVariable %_ptr_Function__arr_S_uint_4 Function %29 |
| %21 = OpAccessChain %_ptr_Uniform__arr_S_std140_uint_4 %1 %uint_0 |
| %24 = OpLoad %_arr_S_std140_uint_4 %21 None |
| OpStore %25 %24 |
| OpBranch %30 |
| %30 = OpLabel |
| OpBranch %33 |
| %33 = OpLabel |
| %35 = OpPhi %uint %uint_0 %30 %36 %32 |
| OpLoopMerge %34 %32 None |
| OpBranch %31 |
| %31 = OpLabel |
| %37 = OpUGreaterThanEqual %bool %35 %uint_4 |
| OpSelectionMerge %39 None |
| OpBranchConditional %37 %40 %39 |
| %40 = OpLabel |
| OpBranch %34 |
| %39 = OpLabel |
| %41 = OpAccessChain %_ptr_Function_S %27 %35 |
| %43 = OpAccessChain %_ptr_Function_S_std140 %25 %35 |
| %45 = OpLoad %S_std140 %43 None |
| %46 = OpFunctionCall %S %tint_convert_S %45 |
| OpStore %41 %46 None |
| OpBranch %32 |
| %32 = OpLabel |
| %36 = OpIAdd %uint %35 %uint_1 |
| OpBranch %33 |
| %34 = OpLabel |
| %49 = OpLoad %_arr_S_uint_4 %27 None |
| %50 = OpFunctionCall %void %tint_store_and_preserve_padding %49 |
| %52 = OpAccessChain %_ptr_Uniform_S_std140 %1 %uint_0 %int_2 |
| %55 = OpLoad %S_std140 %52 None |
| %56 = OpFunctionCall %S %tint_convert_S %55 |
| %57 = OpBitcast %uint %int_1 |
| %60 = OpCompositeConstruct %_arr_uint_uint_1 %57 |
| %61 = OpFunctionCall %void %tint_store_and_preserve_padding_0 %60 %56 |
| %63 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0 %int_2 %uint_1 |
| %65 = OpLoad %v3half %63 None |
| %66 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0 %int_2 %uint_2 |
| %68 = OpLoad %v3half %66 None |
| %69 = OpCompositeConstruct %mat2v3half %65 %68 |
| %70 = OpBitcast %uint %int_3 |
| %72 = OpCompositeConstruct %_arr_uint_uint_1 %70 |
| %73 = OpFunctionCall %void %tint_store_and_preserve_padding_1 %72 %69 |
| %75 = OpAccessChain %_ptr_StorageBuffer_v3half %11 %uint_0 %int_1 %uint_1 %int_0 |
| %78 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0 %int_0 %uint_2 |
| %79 = OpLoad %v3half %78 None |
| %80 = OpVectorShuffle %v3half %79 %79 2 0 1 |
| OpStore %75 %80 None |
| OpReturn |
| OpFunctionEnd |
| %tint_store_and_preserve_padding = OpFunction %void None %82 |
| %value_param = OpFunctionParameter %_arr_S_uint_4 |
| %83 = OpLabel |
| %84 = OpVariable %_ptr_Function__arr_S_uint_4 Function |
| OpStore %84 %value_param |
| OpBranch %85 |
| %85 = OpLabel |
| OpBranch %88 |
| %88 = OpLabel |
| %90 = OpPhi %uint %uint_0 %85 %91 %87 |
| OpLoopMerge %89 %87 None |
| OpBranch %86 |
| %86 = OpLabel |
| %92 = OpUGreaterThanEqual %bool %90 %uint_4 |
| OpSelectionMerge %93 None |
| OpBranchConditional %92 %94 %93 |
| %94 = OpLabel |
| OpBranch %89 |
| %93 = OpLabel |
| %95 = OpAccessChain %_ptr_Function_S %84 %90 |
| %96 = OpLoad %S %95 None |
| %97 = OpCompositeConstruct %_arr_uint_uint_1 %90 |
| %98 = OpFunctionCall %void %tint_store_and_preserve_padding_0 %97 %96 |
| OpBranch %87 |
| %87 = OpLabel |
| %91 = OpIAdd %uint %90 %uint_1 |
| OpBranch %88 |
| %89 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| %tint_store_and_preserve_padding_0 = OpFunction %void None %101 |
| %target_indices = OpFunctionParameter %_arr_uint_uint_1 |
| %value_param_0 = OpFunctionParameter %S |
| %102 = OpLabel |
| %103 = OpCompositeExtract %uint %target_indices 0 |
| %104 = OpAccessChain %_ptr_StorageBuffer_int %11 %uint_0 %103 %uint_0 |
| %106 = OpCompositeExtract %int %value_param_0 0 |
| OpStore %104 %106 None |
| %107 = OpCompositeExtract %mat2v3half %value_param_0 1 |
| %108 = OpCompositeConstruct %_arr_uint_uint_1 %103 |
| %109 = OpFunctionCall %void %tint_store_and_preserve_padding_1 %108 %107 |
| %110 = OpAccessChain %_ptr_StorageBuffer_int %11 %uint_0 %103 %uint_2 |
| %111 = OpCompositeExtract %int %value_param_0 2 |
| OpStore %110 %111 None |
| OpReturn |
| OpFunctionEnd |
| %tint_store_and_preserve_padding_1 = OpFunction %void None %114 |
| %target_indices_0 = OpFunctionParameter %_arr_uint_uint_1 |
| %value_param_1 = OpFunctionParameter %mat2v3half |
| %115 = OpLabel |
| %116 = OpCompositeExtract %uint %target_indices_0 0 |
| %117 = OpAccessChain %_ptr_StorageBuffer_v3half %11 %uint_0 %116 %uint_1 %uint_0 |
| %118 = OpCompositeExtract %v3half %value_param_1 0 |
| OpStore %117 %118 None |
| %119 = OpAccessChain %_ptr_StorageBuffer_v3half %11 %uint_0 %116 %uint_1 %uint_1 |
| %120 = OpCompositeExtract %v3half %value_param_1 1 |
| OpStore %119 %120 None |
| OpReturn |
| OpFunctionEnd |
| %tint_convert_S = OpFunction %S None %122 |
| %tint_input = OpFunctionParameter %S_std140 |
| %123 = OpLabel |
| %124 = OpCompositeExtract %int %tint_input 0 |
| %125 = OpCompositeExtract %v3half %tint_input 1 |
| %126 = OpCompositeExtract %v3half %tint_input 2 |
| %127 = OpCompositeConstruct %mat2v3half %125 %126 |
| %128 = OpCompositeExtract %int %tint_input 3 |
| %129 = OpCompositeConstruct %S %124 %127 %128 |
| OpReturnValue %129 |
| OpFunctionEnd |