From a9720ebf54362249bc27672e3bbae2f2d0475079 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 26 Aug 2019 14:02:45 -0700 Subject: [PATCH] Vulkan stuff --- gemm.spvtxt | 1481 +++++++++++++++++++++++++-- shader3.spvtxt | 471 +++++++-- src/runtime/vulkan/README.md | 25 + src/runtime/vulkan/vulkan_common.h | 1 + src/runtime/vulkan/vulkan_module.cc | 1 + 5 files changed, 1800 insertions(+), 179 deletions(-) create mode 100644 src/runtime/vulkan/README.md diff --git a/gemm.spvtxt b/gemm.spvtxt index 52751fb8233ce..1e3dc660beb23 100644 --- a/gemm.spvtxt +++ b/gemm.spvtxt @@ -1,13 +1,13 @@ ; SPIR-V ; Version: 1.0 ; Generator: Khronos; 0 -; Bound: 298 +; Bound: 1340 ; Schema: 0 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %16 "default_function_kernel0" %gl_WorkGroupID %gl_LocalInvocationID - OpExecutionMode %16 LocalSize 8 1 8 + OpExecutionMode %16 LocalSize 32 1 4 OpDecorate %_runtimearr_v4float ArrayStride 16 OpMemberDecorate %_struct_11 0 Offset 0 OpDecorate %_struct_11 BufferBlock @@ -18,8 +18,11 @@ OpDecorate %15 DescriptorSet 0 OpDecorate %15 Binding 2 OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId + OpDecorate %_arr_v4float_uint_36 ArrayStride 16 + OpMemberDecorate %_struct_26 0 Offset 0 OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId %int = OpTypeInt 32 1 + %uint = OpTypeInt 32 0 %bool = OpTypeBool %float = OpTypeFloat 32 %int_0 = OpConstant %int 0 @@ -36,19 +39,116 @@ %_ptr_Input_v3int = OpTypePointer Input %v3int %gl_WorkGroupID = OpVariable %_ptr_Input_v3int Input %_ptr_Input_int = OpTypePointer Input %int + %uint_36 = OpConstant %uint 36 +%_arr_v4float_uint_36 = OpTypeArray %v4float %uint_36 + %_struct_26 = OpTypeStruct %_arr_v4float_uint_36 +%_ptr_Function__struct_26 = OpTypePointer Function %_struct_26 %gl_LocalInvocationID = OpVariable %_ptr_Input_v3int Input %int_2 = OpConstant %int 2 - %int_32 = OpConstant %int 32 + %int_1 = OpConstant %int 1 + %v4bool = OpTypeVector %bool 4 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float - %int_1024 = OpConstant %int 1024 - %int_128 = OpConstant %int 128 + %int_4096 = OpConstant %int 4096 %int_4 = OpConstant %int 4 - %int_1 = OpConstant %int 1 + %int_32 = OpConstant %int 32 + %int_16 = OpConstant %int 16 + %int_1024 = OpConstant %int 1024 + %float_0 = OpConstant %float 0 + %67 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 +%_ptr_Function_v4float = OpTypePointer Function %v4float + %83 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1023 = OpConstant %int 1023 + %99 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1022 = OpConstant %int 1022 + %115 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 %int_3 = OpConstant %int 3 -%mat4v4float = OpTypeMatrix %v4float 4 - %294 = OpUndef %v4float + %int_1021 = OpConstant %int 1021 + %132 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_31 = OpConstant %int 31 + %int_992 = OpConstant %int 992 + %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_5 = OpConstant %int 5 + %173 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_6 = OpConstant %int 6 + %int_7 = OpConstant %int 7 + %int_8 = OpConstant %int 8 + %int_9 = OpConstant %int 9 + %int_10 = OpConstant %int 10 + %236 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_11 = OpConstant %int 11 + %259 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_12 = OpConstant %int 12 + %int_13 = OpConstant %int 13 + %int_1025 = OpConstant %int 1025 + %int_14 = OpConstant %int 14 + %int_1026 = OpConstant %int 1026 + %int_15 = OpConstant %int 15 + %int_1027 = OpConstant %int 1027 + %int_1056 = OpConstant %int 1056 + %326 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_17 = OpConstant %int 17 + %int_2048 = OpConstant %int 2048 + %350 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_18 = OpConstant %int 18 + %int_19 = OpConstant %int 19 + %int_2049 = OpConstant %int 2049 + %int_20 = OpConstant %int 20 + %int_2050 = OpConstant %int 2050 + %int_21 = OpConstant %int 21 + %int_2051 = OpConstant %int 2051 + %int_22 = OpConstant %int 22 + %int_2080 = OpConstant %int 2080 + %418 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_23 = OpConstant %int 23 + %int_3072 = OpConstant %int 3072 + %442 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_24 = OpConstant %int 24 + %int_25 = OpConstant %int 25 + %int_3073 = OpConstant %int 3073 + %int_26 = OpConstant %int 26 + %int_3074 = OpConstant %int 3074 + %int_27 = OpConstant %int 27 + %int_3075 = OpConstant %int 3075 + %int_28 = OpConstant %int 28 + %int_3104 = OpConstant %int 3104 + %510 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_29 = OpConstant %int 29 + %535 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_30 = OpConstant %int 30 + %551 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_4097 = OpConstant %int 4097 + %567 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_4098 = OpConstant %int 4098 + %583 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_33 = OpConstant %int 33 + %int_4099 = OpConstant %int 4099 + %600 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_34 = OpConstant %int 34 + %int_4128 = OpConstant %int 4128 + %619 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_35 = OpConstant %int 35 + %623 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_128 = OpConstant %int 128 + %int_64 = OpConstant %int 64 + %634 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %644 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %654 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %664 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %674 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %684 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %694 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %704 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %714 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %724 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %734 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %744 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %754 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %764 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %774 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_36 = OpConstant %int 36 %16 = OpFunction %void None %8 %17 = OpLabel + %28 = OpVariable %_ptr_Function__struct_26 Function %22 = OpAccessChain %_ptr_Input_int %gl_WorkGroupID %int_0 %23 = OpLoad %int %22 %30 = OpAccessChain %_ptr_Input_int %gl_LocalInvocationID %int_0 @@ -57,93 +157,1286 @@ %34 = OpLoad %int %33 %35 = OpAccessChain %_ptr_Input_int %gl_LocalInvocationID %int_2 %36 = OpLoad %int %35 - OpBranch %38 - %38 = OpLabel - %297 = OpPhi %v4float %294 %17 %229 %39 - %296 = OpPhi %v4float %294 %17 %184 %39 - %295 = OpPhi %v4float %294 %17 %139 %39 - %293 = OpPhi %v4float %294 %17 %94 %39 - %42 = OpPhi %int %int_0 %17 %231 %39 - %43 = OpSLessThan %bool %42 %int_32 - OpLoopMerge %41 %39 None - OpBranchConditional %43 %39 %41 128 1 - %39 = OpLabel - %49 = OpIMul %int %34 %int_1024 - %51 = OpIMul %int %36 %int_128 - %52 = OpIAdd %int %49 %51 - %54 = OpIMul %int %42 %int_4 + %38 = OpSLessThanEqual %bool %int_1 %23 + %39 = OpSLessThanEqual %bool %int_1 %31 + %40 = OpLogicalAnd %bool %38 %39 + %42 = OpCompositeConstruct %v4bool %40 %40 %40 %40 + %45 = OpIMul %int %23 %int_4096 + %47 = OpIMul %int %31 %int_4 + %48 = OpISub %int %47 %int_1 + %49 = OpSDiv %int %48 %int_4 + %51 = OpIMul %int %49 %int_32 + %52 = OpIAdd %int %45 %51 + %54 = OpIMul %int %34 %int_16 %55 = OpIAdd %int %52 %54 - %56 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %55 - %57 = OpLoad %v4float %56 None - %64 = OpIAdd %int %55 %int_1 - %65 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %64 - %66 = OpLoad %v4float %65 None - %72 = OpIAdd %int %55 %int_2 - %73 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %72 - %74 = OpLoad %v4float %73 None - %81 = OpIAdd %int %55 %int_3 - %82 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %81 - %83 = OpLoad %v4float %82 None - %84 = OpIMul %int %23 %int_1024 - %85 = OpIMul %int %31 %int_128 - %86 = OpIAdd %int %84 %85 - %88 = OpIAdd %int %86 %54 - %89 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %88 - %90 = OpLoad %v4float %89 None - %92 = OpCompositeConstruct %mat4v4float %57 %66 %74 %83 - %93 = OpVectorTimesMatrix %v4float %90 %92 - %94 = OpFAdd %v4float %293 %93 - %104 = OpLoad %v4float %56 None - %112 = OpLoad %v4float %65 None - %120 = OpLoad %v4float %73 None - %128 = OpLoad %v4float %82 None - %134 = OpIAdd %int %88 %int_1 - %135 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %134 - %136 = OpLoad %v4float %135 None - %137 = OpCompositeConstruct %mat4v4float %104 %112 %120 %128 - %138 = OpVectorTimesMatrix %v4float %136 %137 - %139 = OpFAdd %v4float %295 %138 - %149 = OpLoad %v4float %56 None - %157 = OpLoad %v4float %65 None - %165 = OpLoad %v4float %73 None - %173 = OpLoad %v4float %82 None - %179 = OpIAdd %int %88 %int_2 - %180 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %179 - %181 = OpLoad %v4float %180 None - %182 = OpCompositeConstruct %mat4v4float %149 %157 %165 %173 - %183 = OpVectorTimesMatrix %v4float %181 %182 - %184 = OpFAdd %v4float %296 %183 - %194 = OpLoad %v4float %56 None - %202 = OpLoad %v4float %65 None - %210 = OpLoad %v4float %73 None - %218 = OpLoad %v4float %82 None - %224 = OpIAdd %int %88 %int_3 - %225 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %224 - %226 = OpLoad %v4float %225 None - %227 = OpCompositeConstruct %mat4v4float %194 %202 %210 %218 - %228 = OpVectorTimesMatrix %v4float %226 %227 - %229 = OpFAdd %v4float %297 %228 - %231 = OpIAdd %int %42 %int_1 - OpBranch %38 - %41 = OpLabel - %234 = OpIMul %int %23 %int_1024 - %235 = OpIMul %int %31 %int_128 - %236 = OpIAdd %int %234 %235 - %237 = OpIMul %int %34 %int_32 - %238 = OpIAdd %int %236 %237 - %239 = OpIMul %int %36 %int_4 - %240 = OpIAdd %int %238 %239 - %241 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %240 - OpStore %241 %293 None - %251 = OpIAdd %int %240 %int_1 - %252 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %251 - OpStore %252 %295 None - %262 = OpIAdd %int %240 %int_2 - %263 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %262 - OpStore %263 %296 None - %273 = OpIAdd %int %240 %int_3 - %274 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %273 - OpStore %274 %297 None + %56 = OpIMul %int %36 %int_4 + %57 = OpIAdd %int %55 %56 + %58 = OpIMul %int %31 %int_4 + %59 = OpISub %int %58 %int_1 + %60 = OpSRem %int %59 %int_4 + %61 = OpIAdd %int %57 %60 + %63 = OpISub %int %61 %int_1024 + %64 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %63 + %65 = OpLoad %v4float %64 None + %68 = OpSelect %v4float %42 %65 %67 + %70 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_0 + OpStore %70 %68 None + %71 = OpSLessThanEqual %bool %int_1 %23 + %72 = OpCompositeConstruct %v4bool %71 %71 %71 %71 + %73 = OpIMul %int %23 %int_4096 + %74 = OpIMul %int %31 %int_32 + %75 = OpIAdd %int %73 %74 + %76 = OpIMul %int %34 %int_16 + %77 = OpIAdd %int %75 %76 + %78 = OpIMul %int %36 %int_4 + %79 = OpIAdd %int %77 %78 + %80 = OpISub %int %79 %int_1024 + %81 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %80 + %82 = OpLoad %v4float %81 None + %84 = OpSelect %v4float %72 %82 %83 + %85 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_1 + OpStore %85 %84 None + %86 = OpSLessThanEqual %bool %int_1 %23 + %87 = OpCompositeConstruct %v4bool %86 %86 %86 %86 + %88 = OpIMul %int %23 %int_4096 + %89 = OpIMul %int %31 %int_32 + %90 = OpIAdd %int %88 %89 + %91 = OpIMul %int %34 %int_16 + %92 = OpIAdd %int %90 %91 + %93 = OpIMul %int %36 %int_4 + %94 = OpIAdd %int %92 %93 + %96 = OpISub %int %94 %int_1023 + %97 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %96 + %98 = OpLoad %v4float %97 None + %100 = OpSelect %v4float %87 %98 %99 + %101 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_2 + OpStore %101 %100 None + %102 = OpSLessThanEqual %bool %int_1 %23 + %103 = OpCompositeConstruct %v4bool %102 %102 %102 %102 + %104 = OpIMul %int %23 %int_4096 + %105 = OpIMul %int %31 %int_32 + %106 = OpIAdd %int %104 %105 + %107 = OpIMul %int %34 %int_16 + %108 = OpIAdd %int %106 %107 + %109 = OpIMul %int %36 %int_4 + %110 = OpIAdd %int %108 %109 + %112 = OpISub %int %110 %int_1022 + %113 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %112 + %114 = OpLoad %v4float %113 None + %116 = OpSelect %v4float %103 %114 %115 + %118 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_3 + OpStore %118 %116 None + %119 = OpSLessThanEqual %bool %int_1 %23 + %120 = OpCompositeConstruct %v4bool %119 %119 %119 %119 + %121 = OpIMul %int %23 %int_4096 + %122 = OpIMul %int %31 %int_32 + %123 = OpIAdd %int %121 %122 + %124 = OpIMul %int %34 %int_16 + %125 = OpIAdd %int %123 %124 + %126 = OpIMul %int %36 %int_4 + %127 = OpIAdd %int %125 %126 + %129 = OpISub %int %127 %int_1021 + %130 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %129 + %131 = OpLoad %v4float %130 None + %133 = OpSelect %v4float %120 %131 %132 + %134 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_4 + OpStore %134 %133 None + %135 = OpSLessThanEqual %bool %int_1 %23 + %137 = OpSLessThan %bool %31 %int_31 + %138 = OpLogicalAnd %bool %135 %137 + %139 = OpCompositeConstruct %v4bool %138 %138 %138 %138 + %140 = OpIMul %int %23 %int_4096 + %141 = OpIMul %int %31 %int_32 + %142 = OpIAdd %int %140 %141 + %143 = OpIMul %int %34 %int_16 + %144 = OpIAdd %int %142 %143 + %145 = OpIMul %int %36 %int_4 + %146 = OpIAdd %int %144 %145 + %148 = OpISub %int %146 %int_992 + %149 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %148 + %150 = OpLoad %v4float %149 None + %152 = OpSelect %v4float %139 %150 %151 + %154 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_5 + OpStore %154 %152 None + %155 = OpSLessThanEqual %bool %int_1 %31 + %156 = OpCompositeConstruct %v4bool %155 %155 %155 %155 + %157 = OpIMul %int %23 %int_4096 + %158 = OpIMul %int %31 %int_4 + %159 = OpISub %int %158 %int_1 + %160 = OpSDiv %int %159 %int_4 + %161 = OpIMul %int %160 %int_32 + %162 = OpIAdd %int %157 %161 + %163 = OpIMul %int %34 %int_16 + %164 = OpIAdd %int %162 %163 + %165 = OpIMul %int %36 %int_4 + %166 = OpIAdd %int %164 %165 + %167 = OpIMul %int %31 %int_4 + %168 = OpISub %int %167 %int_1 + %169 = OpSRem %int %168 %int_4 + %170 = OpIAdd %int %166 %169 + %171 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %170 + %172 = OpLoad %v4float %171 None + %174 = OpSelect %v4float %156 %172 %173 + %176 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_6 + OpStore %176 %174 None + %177 = OpIMul %int %23 %int_4096 + %178 = OpIMul %int %31 %int_32 + %179 = OpIAdd %int %177 %178 + %180 = OpIMul %int %34 %int_16 + %181 = OpIAdd %int %179 %180 + %182 = OpIMul %int %36 %int_4 + %183 = OpIAdd %int %181 %182 + %184 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %183 + %185 = OpLoad %v4float %184 None + %187 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_7 + OpStore %187 %185 None + %188 = OpIMul %int %23 %int_4096 + %189 = OpIMul %int %31 %int_32 + %190 = OpIAdd %int %188 %189 + %191 = OpIMul %int %34 %int_16 + %192 = OpIAdd %int %190 %191 + %193 = OpIMul %int %36 %int_4 + %194 = OpIAdd %int %192 %193 + %195 = OpIAdd %int %194 %int_1 + %196 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %195 + %197 = OpLoad %v4float %196 None + %199 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_8 + OpStore %199 %197 None + %200 = OpIMul %int %23 %int_4096 + %201 = OpIMul %int %31 %int_32 + %202 = OpIAdd %int %200 %201 + %203 = OpIMul %int %34 %int_16 + %204 = OpIAdd %int %202 %203 + %205 = OpIMul %int %36 %int_4 + %206 = OpIAdd %int %204 %205 + %207 = OpIAdd %int %206 %int_2 + %208 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %207 + %209 = OpLoad %v4float %208 None + %211 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_9 + OpStore %211 %209 None + %212 = OpIMul %int %23 %int_4096 + %213 = OpIMul %int %31 %int_32 + %214 = OpIAdd %int %212 %213 + %215 = OpIMul %int %34 %int_16 + %216 = OpIAdd %int %214 %215 + %217 = OpIMul %int %36 %int_4 + %218 = OpIAdd %int %216 %217 + %219 = OpIAdd %int %218 %int_3 + %220 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %219 + %221 = OpLoad %v4float %220 None + %223 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_10 + OpStore %223 %221 None + %224 = OpSLessThan %bool %31 %int_31 + %225 = OpCompositeConstruct %v4bool %224 %224 %224 %224 + %226 = OpIMul %int %23 %int_4096 + %227 = OpIMul %int %31 %int_32 + %228 = OpIAdd %int %226 %227 + %229 = OpIMul %int %34 %int_16 + %230 = OpIAdd %int %228 %229 + %231 = OpIMul %int %36 %int_4 + %232 = OpIAdd %int %230 %231 + %233 = OpIAdd %int %232 %int_32 + %234 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %233 + %235 = OpLoad %v4float %234 None + %237 = OpSelect %v4float %225 %235 %236 + %239 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_11 + OpStore %239 %237 None + %240 = OpSLessThanEqual %bool %int_1 %31 + %241 = OpCompositeConstruct %v4bool %240 %240 %240 %240 + %242 = OpIMul %int %23 %int_4096 + %243 = OpIMul %int %31 %int_4 + %244 = OpISub %int %243 %int_1 + %245 = OpSDiv %int %244 %int_4 + %246 = OpIMul %int %245 %int_32 + %247 = OpIAdd %int %242 %246 + %248 = OpIMul %int %34 %int_16 + %249 = OpIAdd %int %247 %248 + %250 = OpIMul %int %36 %int_4 + %251 = OpIAdd %int %249 %250 + %252 = OpIMul %int %31 %int_4 + %253 = OpISub %int %252 %int_1 + %254 = OpSRem %int %253 %int_4 + %255 = OpIAdd %int %251 %254 + %256 = OpIAdd %int %255 %int_1024 + %257 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %256 + %258 = OpLoad %v4float %257 None + %260 = OpSelect %v4float %241 %258 %259 + %262 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_12 + OpStore %262 %260 None + %263 = OpIMul %int %23 %int_4096 + %264 = OpIMul %int %31 %int_32 + %265 = OpIAdd %int %263 %264 + %266 = OpIMul %int %34 %int_16 + %267 = OpIAdd %int %265 %266 + %268 = OpIMul %int %36 %int_4 + %269 = OpIAdd %int %267 %268 + %270 = OpIAdd %int %269 %int_1024 + %271 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %270 + %272 = OpLoad %v4float %271 None + %274 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_13 + OpStore %274 %272 None + %275 = OpIMul %int %23 %int_4096 + %276 = OpIMul %int %31 %int_32 + %277 = OpIAdd %int %275 %276 + %278 = OpIMul %int %34 %int_16 + %279 = OpIAdd %int %277 %278 + %280 = OpIMul %int %36 %int_4 + %281 = OpIAdd %int %279 %280 + %283 = OpIAdd %int %281 %int_1025 + %284 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %283 + %285 = OpLoad %v4float %284 None + %287 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_14 + OpStore %287 %285 None + %288 = OpIMul %int %23 %int_4096 + %289 = OpIMul %int %31 %int_32 + %290 = OpIAdd %int %288 %289 + %291 = OpIMul %int %34 %int_16 + %292 = OpIAdd %int %290 %291 + %293 = OpIMul %int %36 %int_4 + %294 = OpIAdd %int %292 %293 + %296 = OpIAdd %int %294 %int_1026 + %297 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %296 + %298 = OpLoad %v4float %297 None + %300 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_15 + OpStore %300 %298 None + %301 = OpIMul %int %23 %int_4096 + %302 = OpIMul %int %31 %int_32 + %303 = OpIAdd %int %301 %302 + %304 = OpIMul %int %34 %int_16 + %305 = OpIAdd %int %303 %304 + %306 = OpIMul %int %36 %int_4 + %307 = OpIAdd %int %305 %306 + %309 = OpIAdd %int %307 %int_1027 + %310 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %309 + %311 = OpLoad %v4float %310 None + %312 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_16 + OpStore %312 %311 None + %313 = OpSLessThan %bool %31 %int_31 + %314 = OpCompositeConstruct %v4bool %313 %313 %313 %313 + %315 = OpIMul %int %23 %int_4096 + %316 = OpIMul %int %31 %int_32 + %317 = OpIAdd %int %315 %316 + %318 = OpIMul %int %34 %int_16 + %319 = OpIAdd %int %317 %318 + %320 = OpIMul %int %36 %int_4 + %321 = OpIAdd %int %319 %320 + %323 = OpIAdd %int %321 %int_1056 + %324 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %323 + %325 = OpLoad %v4float %324 None + %327 = OpSelect %v4float %314 %325 %326 + %329 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_17 + OpStore %329 %327 None + %330 = OpSLessThanEqual %bool %int_1 %31 + %331 = OpCompositeConstruct %v4bool %330 %330 %330 %330 + %332 = OpIMul %int %23 %int_4096 + %333 = OpIMul %int %31 %int_4 + %334 = OpISub %int %333 %int_1 + %335 = OpSDiv %int %334 %int_4 + %336 = OpIMul %int %335 %int_32 + %337 = OpIAdd %int %332 %336 + %338 = OpIMul %int %34 %int_16 + %339 = OpIAdd %int %337 %338 + %340 = OpIMul %int %36 %int_4 + %341 = OpIAdd %int %339 %340 + %342 = OpIMul %int %31 %int_4 + %343 = OpISub %int %342 %int_1 + %344 = OpSRem %int %343 %int_4 + %345 = OpIAdd %int %341 %344 + %347 = OpIAdd %int %345 %int_2048 + %348 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %347 + %349 = OpLoad %v4float %348 None + %351 = OpSelect %v4float %331 %349 %350 + %353 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_18 + OpStore %353 %351 None + %354 = OpIMul %int %23 %int_4096 + %355 = OpIMul %int %31 %int_32 + %356 = OpIAdd %int %354 %355 + %357 = OpIMul %int %34 %int_16 + %358 = OpIAdd %int %356 %357 + %359 = OpIMul %int %36 %int_4 + %360 = OpIAdd %int %358 %359 + %361 = OpIAdd %int %360 %int_2048 + %362 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %361 + %363 = OpLoad %v4float %362 None + %365 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_19 + OpStore %365 %363 None + %366 = OpIMul %int %23 %int_4096 + %367 = OpIMul %int %31 %int_32 + %368 = OpIAdd %int %366 %367 + %369 = OpIMul %int %34 %int_16 + %370 = OpIAdd %int %368 %369 + %371 = OpIMul %int %36 %int_4 + %372 = OpIAdd %int %370 %371 + %374 = OpIAdd %int %372 %int_2049 + %375 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %374 + %376 = OpLoad %v4float %375 None + %378 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_20 + OpStore %378 %376 None + %379 = OpIMul %int %23 %int_4096 + %380 = OpIMul %int %31 %int_32 + %381 = OpIAdd %int %379 %380 + %382 = OpIMul %int %34 %int_16 + %383 = OpIAdd %int %381 %382 + %384 = OpIMul %int %36 %int_4 + %385 = OpIAdd %int %383 %384 + %387 = OpIAdd %int %385 %int_2050 + %388 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %387 + %389 = OpLoad %v4float %388 None + %391 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_21 + OpStore %391 %389 None + %392 = OpIMul %int %23 %int_4096 + %393 = OpIMul %int %31 %int_32 + %394 = OpIAdd %int %392 %393 + %395 = OpIMul %int %34 %int_16 + %396 = OpIAdd %int %394 %395 + %397 = OpIMul %int %36 %int_4 + %398 = OpIAdd %int %396 %397 + %400 = OpIAdd %int %398 %int_2051 + %401 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %400 + %402 = OpLoad %v4float %401 None + %404 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_22 + OpStore %404 %402 None + %405 = OpSLessThan %bool %31 %int_31 + %406 = OpCompositeConstruct %v4bool %405 %405 %405 %405 + %407 = OpIMul %int %23 %int_4096 + %408 = OpIMul %int %31 %int_32 + %409 = OpIAdd %int %407 %408 + %410 = OpIMul %int %34 %int_16 + %411 = OpIAdd %int %409 %410 + %412 = OpIMul %int %36 %int_4 + %413 = OpIAdd %int %411 %412 + %415 = OpIAdd %int %413 %int_2080 + %416 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %415 + %417 = OpLoad %v4float %416 None + %419 = OpSelect %v4float %406 %417 %418 + %421 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_23 + OpStore %421 %419 None + %422 = OpSLessThanEqual %bool %int_1 %31 + %423 = OpCompositeConstruct %v4bool %422 %422 %422 %422 + %424 = OpIMul %int %23 %int_4096 + %425 = OpIMul %int %31 %int_4 + %426 = OpISub %int %425 %int_1 + %427 = OpSDiv %int %426 %int_4 + %428 = OpIMul %int %427 %int_32 + %429 = OpIAdd %int %424 %428 + %430 = OpIMul %int %34 %int_16 + %431 = OpIAdd %int %429 %430 + %432 = OpIMul %int %36 %int_4 + %433 = OpIAdd %int %431 %432 + %434 = OpIMul %int %31 %int_4 + %435 = OpISub %int %434 %int_1 + %436 = OpSRem %int %435 %int_4 + %437 = OpIAdd %int %433 %436 + %439 = OpIAdd %int %437 %int_3072 + %440 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %439 + %441 = OpLoad %v4float %440 None + %443 = OpSelect %v4float %423 %441 %442 + %445 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_24 + OpStore %445 %443 None + %446 = OpIMul %int %23 %int_4096 + %447 = OpIMul %int %31 %int_32 + %448 = OpIAdd %int %446 %447 + %449 = OpIMul %int %34 %int_16 + %450 = OpIAdd %int %448 %449 + %451 = OpIMul %int %36 %int_4 + %452 = OpIAdd %int %450 %451 + %453 = OpIAdd %int %452 %int_3072 + %454 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %453 + %455 = OpLoad %v4float %454 None + %457 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_25 + OpStore %457 %455 None + %458 = OpIMul %int %23 %int_4096 + %459 = OpIMul %int %31 %int_32 + %460 = OpIAdd %int %458 %459 + %461 = OpIMul %int %34 %int_16 + %462 = OpIAdd %int %460 %461 + %463 = OpIMul %int %36 %int_4 + %464 = OpIAdd %int %462 %463 + %466 = OpIAdd %int %464 %int_3073 + %467 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %466 + %468 = OpLoad %v4float %467 None + %470 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_26 + OpStore %470 %468 None + %471 = OpIMul %int %23 %int_4096 + %472 = OpIMul %int %31 %int_32 + %473 = OpIAdd %int %471 %472 + %474 = OpIMul %int %34 %int_16 + %475 = OpIAdd %int %473 %474 + %476 = OpIMul %int %36 %int_4 + %477 = OpIAdd %int %475 %476 + %479 = OpIAdd %int %477 %int_3074 + %480 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %479 + %481 = OpLoad %v4float %480 None + %483 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_27 + OpStore %483 %481 None + %484 = OpIMul %int %23 %int_4096 + %485 = OpIMul %int %31 %int_32 + %486 = OpIAdd %int %484 %485 + %487 = OpIMul %int %34 %int_16 + %488 = OpIAdd %int %486 %487 + %489 = OpIMul %int %36 %int_4 + %490 = OpIAdd %int %488 %489 + %492 = OpIAdd %int %490 %int_3075 + %493 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %492 + %494 = OpLoad %v4float %493 None + %496 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_28 + OpStore %496 %494 None + %497 = OpSLessThan %bool %31 %int_31 + %498 = OpCompositeConstruct %v4bool %497 %497 %497 %497 + %499 = OpIMul %int %23 %int_4096 + %500 = OpIMul %int %31 %int_32 + %501 = OpIAdd %int %499 %500 + %502 = OpIMul %int %34 %int_16 + %503 = OpIAdd %int %501 %502 + %504 = OpIMul %int %36 %int_4 + %505 = OpIAdd %int %503 %504 + %507 = OpIAdd %int %505 %int_3104 + %508 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %507 + %509 = OpLoad %v4float %508 None + %511 = OpSelect %v4float %498 %509 %510 + %513 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_29 + OpStore %513 %511 None + %514 = OpSLessThan %bool %23 %int_31 + %515 = OpSLessThanEqual %bool %int_1 %31 + %516 = OpLogicalAnd %bool %514 %515 + %517 = OpCompositeConstruct %v4bool %516 %516 %516 %516 + %518 = OpIMul %int %23 %int_4096 + %519 = OpIMul %int %31 %int_4 + %520 = OpISub %int %519 %int_1 + %521 = OpSDiv %int %520 %int_4 + %522 = OpIMul %int %521 %int_32 + %523 = OpIAdd %int %518 %522 + %524 = OpIMul %int %34 %int_16 + %525 = OpIAdd %int %523 %524 + %526 = OpIMul %int %36 %int_4 + %527 = OpIAdd %int %525 %526 + %528 = OpIMul %int %31 %int_4 + %529 = OpISub %int %528 %int_1 + %530 = OpSRem %int %529 %int_4 + %531 = OpIAdd %int %527 %530 + %532 = OpIAdd %int %531 %int_4096 + %533 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %532 + %534 = OpLoad %v4float %533 None + %536 = OpSelect %v4float %517 %534 %535 + %538 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_30 + OpStore %538 %536 None + %539 = OpSLessThan %bool %23 %int_31 + %540 = OpCompositeConstruct %v4bool %539 %539 %539 %539 + %541 = OpIMul %int %23 %int_4096 + %542 = OpIMul %int %31 %int_32 + %543 = OpIAdd %int %541 %542 + %544 = OpIMul %int %34 %int_16 + %545 = OpIAdd %int %543 %544 + %546 = OpIMul %int %36 %int_4 + %547 = OpIAdd %int %545 %546 + %548 = OpIAdd %int %547 %int_4096 + %549 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %548 + %550 = OpLoad %v4float %549 None + %552 = OpSelect %v4float %540 %550 %551 + %553 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_31 + OpStore %553 %552 None + %554 = OpSLessThan %bool %23 %int_31 + %555 = OpCompositeConstruct %v4bool %554 %554 %554 %554 + %556 = OpIMul %int %23 %int_4096 + %557 = OpIMul %int %31 %int_32 + %558 = OpIAdd %int %556 %557 + %559 = OpIMul %int %34 %int_16 + %560 = OpIAdd %int %558 %559 + %561 = OpIMul %int %36 %int_4 + %562 = OpIAdd %int %560 %561 + %564 = OpIAdd %int %562 %int_4097 + %565 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %564 + %566 = OpLoad %v4float %565 None + %568 = OpSelect %v4float %555 %566 %567 + %569 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_32 + OpStore %569 %568 None + %570 = OpSLessThan %bool %23 %int_31 + %571 = OpCompositeConstruct %v4bool %570 %570 %570 %570 + %572 = OpIMul %int %23 %int_4096 + %573 = OpIMul %int %31 %int_32 + %574 = OpIAdd %int %572 %573 + %575 = OpIMul %int %34 %int_16 + %576 = OpIAdd %int %574 %575 + %577 = OpIMul %int %36 %int_4 + %578 = OpIAdd %int %576 %577 + %580 = OpIAdd %int %578 %int_4098 + %581 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %580 + %582 = OpLoad %v4float %581 None + %584 = OpSelect %v4float %571 %582 %583 + %586 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_33 + OpStore %586 %584 None + %587 = OpSLessThan %bool %23 %int_31 + %588 = OpCompositeConstruct %v4bool %587 %587 %587 %587 + %589 = OpIMul %int %23 %int_4096 + %590 = OpIMul %int %31 %int_32 + %591 = OpIAdd %int %589 %590 + %592 = OpIMul %int %34 %int_16 + %593 = OpIAdd %int %591 %592 + %594 = OpIMul %int %36 %int_4 + %595 = OpIAdd %int %593 %594 + %597 = OpIAdd %int %595 %int_4099 + %598 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %597 + %599 = OpLoad %v4float %598 None + %601 = OpSelect %v4float %588 %599 %600 + %603 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_34 + OpStore %603 %601 None + %604 = OpSLessThan %bool %23 %int_31 + %605 = OpSLessThan %bool %31 %int_31 + %606 = OpLogicalAnd %bool %604 %605 + %607 = OpCompositeConstruct %v4bool %606 %606 %606 %606 + %608 = OpIMul %int %23 %int_4096 + %609 = OpIMul %int %31 %int_32 + %610 = OpIAdd %int %608 %609 + %611 = OpIMul %int %34 %int_16 + %612 = OpIAdd %int %610 %611 + %613 = OpIMul %int %36 %int_4 + %614 = OpIAdd %int %612 %613 + %616 = OpIAdd %int %614 %int_4128 + %617 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %616 + %618 = OpLoad %v4float %617 None + %620 = OpSelect %v4float %607 %618 %619 + %622 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %int_35 + OpStore %622 %620 None + %624 = OpIMul %int %23 %int_4096 + %626 = OpIMul %int %31 %int_128 + %627 = OpIAdd %int %624 %626 + %629 = OpIMul %int %34 %int_64 + %630 = OpIAdd %int %627 %629 + %631 = OpIMul %int %36 %int_16 + %632 = OpIAdd %int %630 %631 + %633 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %632 + OpStore %633 %623 None + %635 = OpIMul %int %23 %int_4096 + %636 = OpIMul %int %31 %int_128 + %637 = OpIAdd %int %635 %636 + %638 = OpIMul %int %34 %int_64 + %639 = OpIAdd %int %637 %638 + %640 = OpIMul %int %36 %int_16 + %641 = OpIAdd %int %639 %640 + %642 = OpIAdd %int %641 %int_1 + %643 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %642 + OpStore %643 %634 None + %645 = OpIMul %int %23 %int_4096 + %646 = OpIMul %int %31 %int_128 + %647 = OpIAdd %int %645 %646 + %648 = OpIMul %int %34 %int_64 + %649 = OpIAdd %int %647 %648 + %650 = OpIMul %int %36 %int_16 + %651 = OpIAdd %int %649 %650 + %652 = OpIAdd %int %651 %int_2 + %653 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %652 + OpStore %653 %644 None + %655 = OpIMul %int %23 %int_4096 + %656 = OpIMul %int %31 %int_128 + %657 = OpIAdd %int %655 %656 + %658 = OpIMul %int %34 %int_64 + %659 = OpIAdd %int %657 %658 + %660 = OpIMul %int %36 %int_16 + %661 = OpIAdd %int %659 %660 + %662 = OpIAdd %int %661 %int_3 + %663 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %662 + OpStore %663 %654 None + %665 = OpIMul %int %23 %int_4096 + %666 = OpIMul %int %31 %int_128 + %667 = OpIAdd %int %665 %666 + %668 = OpIMul %int %34 %int_64 + %669 = OpIAdd %int %667 %668 + %670 = OpIMul %int %36 %int_16 + %671 = OpIAdd %int %669 %670 + %672 = OpIAdd %int %671 %int_4 + %673 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %672 + OpStore %673 %664 None + %675 = OpIMul %int %23 %int_4096 + %676 = OpIMul %int %31 %int_128 + %677 = OpIAdd %int %675 %676 + %678 = OpIMul %int %34 %int_64 + %679 = OpIAdd %int %677 %678 + %680 = OpIMul %int %36 %int_16 + %681 = OpIAdd %int %679 %680 + %682 = OpIAdd %int %681 %int_5 + %683 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %682 + OpStore %683 %674 None + %685 = OpIMul %int %23 %int_4096 + %686 = OpIMul %int %31 %int_128 + %687 = OpIAdd %int %685 %686 + %688 = OpIMul %int %34 %int_64 + %689 = OpIAdd %int %687 %688 + %690 = OpIMul %int %36 %int_16 + %691 = OpIAdd %int %689 %690 + %692 = OpIAdd %int %691 %int_6 + %693 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %692 + OpStore %693 %684 None + %695 = OpIMul %int %23 %int_4096 + %696 = OpIMul %int %31 %int_128 + %697 = OpIAdd %int %695 %696 + %698 = OpIMul %int %34 %int_64 + %699 = OpIAdd %int %697 %698 + %700 = OpIMul %int %36 %int_16 + %701 = OpIAdd %int %699 %700 + %702 = OpIAdd %int %701 %int_7 + %703 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %702 + OpStore %703 %694 None + %705 = OpIMul %int %23 %int_4096 + %706 = OpIMul %int %31 %int_128 + %707 = OpIAdd %int %705 %706 + %708 = OpIMul %int %34 %int_64 + %709 = OpIAdd %int %707 %708 + %710 = OpIMul %int %36 %int_16 + %711 = OpIAdd %int %709 %710 + %712 = OpIAdd %int %711 %int_8 + %713 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %712 + OpStore %713 %704 None + %715 = OpIMul %int %23 %int_4096 + %716 = OpIMul %int %31 %int_128 + %717 = OpIAdd %int %715 %716 + %718 = OpIMul %int %34 %int_64 + %719 = OpIAdd %int %717 %718 + %720 = OpIMul %int %36 %int_16 + %721 = OpIAdd %int %719 %720 + %722 = OpIAdd %int %721 %int_9 + %723 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %722 + OpStore %723 %714 None + %725 = OpIMul %int %23 %int_4096 + %726 = OpIMul %int %31 %int_128 + %727 = OpIAdd %int %725 %726 + %728 = OpIMul %int %34 %int_64 + %729 = OpIAdd %int %727 %728 + %730 = OpIMul %int %36 %int_16 + %731 = OpIAdd %int %729 %730 + %732 = OpIAdd %int %731 %int_10 + %733 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %732 + OpStore %733 %724 None + %735 = OpIMul %int %23 %int_4096 + %736 = OpIMul %int %31 %int_128 + %737 = OpIAdd %int %735 %736 + %738 = OpIMul %int %34 %int_64 + %739 = OpIAdd %int %737 %738 + %740 = OpIMul %int %36 %int_16 + %741 = OpIAdd %int %739 %740 + %742 = OpIAdd %int %741 %int_11 + %743 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %742 + OpStore %743 %734 None + %745 = OpIMul %int %23 %int_4096 + %746 = OpIMul %int %31 %int_128 + %747 = OpIAdd %int %745 %746 + %748 = OpIMul %int %34 %int_64 + %749 = OpIAdd %int %747 %748 + %750 = OpIMul %int %36 %int_16 + %751 = OpIAdd %int %749 %750 + %752 = OpIAdd %int %751 %int_12 + %753 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %752 + OpStore %753 %744 None + %755 = OpIMul %int %23 %int_4096 + %756 = OpIMul %int %31 %int_128 + %757 = OpIAdd %int %755 %756 + %758 = OpIMul %int %34 %int_64 + %759 = OpIAdd %int %757 %758 + %760 = OpIMul %int %36 %int_16 + %761 = OpIAdd %int %759 %760 + %762 = OpIAdd %int %761 %int_13 + %763 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %762 + OpStore %763 %754 None + %765 = OpIMul %int %23 %int_4096 + %766 = OpIMul %int %31 %int_128 + %767 = OpIAdd %int %765 %766 + %768 = OpIMul %int %34 %int_64 + %769 = OpIAdd %int %767 %768 + %770 = OpIMul %int %36 %int_16 + %771 = OpIAdd %int %769 %770 + %772 = OpIAdd %int %771 %int_14 + %773 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %772 + OpStore %773 %764 None + %775 = OpIMul %int %23 %int_4096 + %776 = OpIMul %int %31 %int_128 + %777 = OpIAdd %int %775 %776 + %778 = OpIMul %int %34 %int_64 + %779 = OpIAdd %int %777 %778 + %780 = OpIMul %int %36 %int_16 + %781 = OpIAdd %int %779 %780 + %782 = OpIAdd %int %781 %int_15 + %783 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %782 + OpStore %783 %774 None + OpBranch %784 + %784 = OpLabel + %788 = OpPhi %int %int_0 %17 %1339 %786 + %789 = OpSLessThan %bool %788 %int_3 + OpLoopMerge %787 %786 None + OpBranchConditional %789 %785 %787 128 1 + %785 = OpLabel + OpBranch %790 + %790 = OpLabel + %794 = OpPhi %int %int_0 %785 %1338 %792 + %795 = OpSLessThan %bool %794 %int_3 + OpLoopMerge %793 %792 None + OpBranchConditional %795 %791 %793 128 1 + %791 = OpLabel + %796 = OpIMul %int %23 %int_4096 + %797 = OpIMul %int %31 %int_128 + %798 = OpIAdd %int %796 %797 + %799 = OpIMul %int %34 %int_64 + %800 = OpIAdd %int %798 %799 + %801 = OpIMul %int %36 %int_16 + %802 = OpIAdd %int %800 %801 + %803 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %802 + %804 = OpLoad %v4float %803 None + %805 = OpIMul %int %788 %int_6 + %806 = OpIAdd %int %805 %794 + %807 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %806 + %808 = OpLoad %v4float %807 None + %810 = OpIMul %int %34 %int_36 + %811 = OpIMul %int %36 %int_9 + %812 = OpIAdd %int %810 %811 + %813 = OpIMul %int %788 %int_3 + %814 = OpIAdd %int %812 %813 + %815 = OpIAdd %int %814 %794 + %816 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %815 + %817 = OpLoad %v4float %816 None + %818 = OpFMul %v4float %808 %817 + %819 = OpFAdd %v4float %804 %818 + %820 = OpIMul %int %23 %int_4096 + %821 = OpIMul %int %31 %int_128 + %822 = OpIAdd %int %820 %821 + %823 = OpIMul %int %34 %int_64 + %824 = OpIAdd %int %822 %823 + %825 = OpIMul %int %36 %int_16 + %826 = OpIAdd %int %824 %825 + %827 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %826 + OpStore %827 %819 None + %828 = OpIMul %int %23 %int_4096 + %829 = OpIMul %int %31 %int_128 + %830 = OpIAdd %int %828 %829 + %831 = OpIMul %int %34 %int_64 + %832 = OpIAdd %int %830 %831 + %833 = OpIMul %int %36 %int_16 + %834 = OpIAdd %int %832 %833 + %835 = OpIAdd %int %834 %int_1 + %836 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %835 + %837 = OpLoad %v4float %836 None + %838 = OpIMul %int %788 %int_6 + %839 = OpIAdd %int %838 %794 + %840 = OpIAdd %int %839 %int_1 + %841 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %840 + %842 = OpLoad %v4float %841 None + %843 = OpIMul %int %34 %int_36 + %844 = OpIMul %int %36 %int_9 + %845 = OpIAdd %int %843 %844 + %846 = OpIMul %int %788 %int_3 + %847 = OpIAdd %int %845 %846 + %848 = OpIAdd %int %847 %794 + %849 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %848 + %850 = OpLoad %v4float %849 None + %851 = OpFMul %v4float %842 %850 + %852 = OpFAdd %v4float %837 %851 + %853 = OpIMul %int %23 %int_4096 + %854 = OpIMul %int %31 %int_128 + %855 = OpIAdd %int %853 %854 + %856 = OpIMul %int %34 %int_64 + %857 = OpIAdd %int %855 %856 + %858 = OpIMul %int %36 %int_16 + %859 = OpIAdd %int %857 %858 + %860 = OpIAdd %int %859 %int_1 + %861 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %860 + OpStore %861 %852 None + %862 = OpIMul %int %23 %int_4096 + %863 = OpIMul %int %31 %int_128 + %864 = OpIAdd %int %862 %863 + %865 = OpIMul %int %34 %int_64 + %866 = OpIAdd %int %864 %865 + %867 = OpIMul %int %36 %int_16 + %868 = OpIAdd %int %866 %867 + %869 = OpIAdd %int %868 %int_2 + %870 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %869 + %871 = OpLoad %v4float %870 None + %872 = OpIMul %int %788 %int_6 + %873 = OpIAdd %int %872 %794 + %874 = OpIAdd %int %873 %int_2 + %875 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %874 + %876 = OpLoad %v4float %875 None + %877 = OpIMul %int %34 %int_36 + %878 = OpIMul %int %36 %int_9 + %879 = OpIAdd %int %877 %878 + %880 = OpIMul %int %788 %int_3 + %881 = OpIAdd %int %879 %880 + %882 = OpIAdd %int %881 %794 + %883 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %882 + %884 = OpLoad %v4float %883 None + %885 = OpFMul %v4float %876 %884 + %886 = OpFAdd %v4float %871 %885 + %887 = OpIMul %int %23 %int_4096 + %888 = OpIMul %int %31 %int_128 + %889 = OpIAdd %int %887 %888 + %890 = OpIMul %int %34 %int_64 + %891 = OpIAdd %int %889 %890 + %892 = OpIMul %int %36 %int_16 + %893 = OpIAdd %int %891 %892 + %894 = OpIAdd %int %893 %int_2 + %895 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %894 + OpStore %895 %886 None + %896 = OpIMul %int %23 %int_4096 + %897 = OpIMul %int %31 %int_128 + %898 = OpIAdd %int %896 %897 + %899 = OpIMul %int %34 %int_64 + %900 = OpIAdd %int %898 %899 + %901 = OpIMul %int %36 %int_16 + %902 = OpIAdd %int %900 %901 + %903 = OpIAdd %int %902 %int_3 + %904 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %903 + %905 = OpLoad %v4float %904 None + %906 = OpIMul %int %788 %int_6 + %907 = OpIAdd %int %906 %794 + %908 = OpIAdd %int %907 %int_3 + %909 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %908 + %910 = OpLoad %v4float %909 None + %911 = OpIMul %int %34 %int_36 + %912 = OpIMul %int %36 %int_9 + %913 = OpIAdd %int %911 %912 + %914 = OpIMul %int %788 %int_3 + %915 = OpIAdd %int %913 %914 + %916 = OpIAdd %int %915 %794 + %917 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %916 + %918 = OpLoad %v4float %917 None + %919 = OpFMul %v4float %910 %918 + %920 = OpFAdd %v4float %905 %919 + %921 = OpIMul %int %23 %int_4096 + %922 = OpIMul %int %31 %int_128 + %923 = OpIAdd %int %921 %922 + %924 = OpIMul %int %34 %int_64 + %925 = OpIAdd %int %923 %924 + %926 = OpIMul %int %36 %int_16 + %927 = OpIAdd %int %925 %926 + %928 = OpIAdd %int %927 %int_3 + %929 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %928 + OpStore %929 %920 None + %930 = OpIMul %int %23 %int_4096 + %931 = OpIMul %int %31 %int_128 + %932 = OpIAdd %int %930 %931 + %933 = OpIMul %int %34 %int_64 + %934 = OpIAdd %int %932 %933 + %935 = OpIMul %int %36 %int_16 + %936 = OpIAdd %int %934 %935 + %937 = OpIAdd %int %936 %int_4 + %938 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %937 + %939 = OpLoad %v4float %938 None + %940 = OpIMul %int %788 %int_6 + %941 = OpIAdd %int %940 %794 + %942 = OpIAdd %int %941 %int_6 + %943 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %942 + %944 = OpLoad %v4float %943 None + %945 = OpIMul %int %34 %int_36 + %946 = OpIMul %int %36 %int_9 + %947 = OpIAdd %int %945 %946 + %948 = OpIMul %int %788 %int_3 + %949 = OpIAdd %int %947 %948 + %950 = OpIAdd %int %949 %794 + %951 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %950 + %952 = OpLoad %v4float %951 None + %953 = OpFMul %v4float %944 %952 + %954 = OpFAdd %v4float %939 %953 + %955 = OpIMul %int %23 %int_4096 + %956 = OpIMul %int %31 %int_128 + %957 = OpIAdd %int %955 %956 + %958 = OpIMul %int %34 %int_64 + %959 = OpIAdd %int %957 %958 + %960 = OpIMul %int %36 %int_16 + %961 = OpIAdd %int %959 %960 + %962 = OpIAdd %int %961 %int_4 + %963 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %962 + OpStore %963 %954 None + %964 = OpIMul %int %23 %int_4096 + %965 = OpIMul %int %31 %int_128 + %966 = OpIAdd %int %964 %965 + %967 = OpIMul %int %34 %int_64 + %968 = OpIAdd %int %966 %967 + %969 = OpIMul %int %36 %int_16 + %970 = OpIAdd %int %968 %969 + %971 = OpIAdd %int %970 %int_5 + %972 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %971 + %973 = OpLoad %v4float %972 None + %974 = OpIMul %int %788 %int_6 + %975 = OpIAdd %int %974 %794 + %976 = OpIAdd %int %975 %int_7 + %977 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %976 + %978 = OpLoad %v4float %977 None + %979 = OpIMul %int %34 %int_36 + %980 = OpIMul %int %36 %int_9 + %981 = OpIAdd %int %979 %980 + %982 = OpIMul %int %788 %int_3 + %983 = OpIAdd %int %981 %982 + %984 = OpIAdd %int %983 %794 + %985 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %984 + %986 = OpLoad %v4float %985 None + %987 = OpFMul %v4float %978 %986 + %988 = OpFAdd %v4float %973 %987 + %989 = OpIMul %int %23 %int_4096 + %990 = OpIMul %int %31 %int_128 + %991 = OpIAdd %int %989 %990 + %992 = OpIMul %int %34 %int_64 + %993 = OpIAdd %int %991 %992 + %994 = OpIMul %int %36 %int_16 + %995 = OpIAdd %int %993 %994 + %996 = OpIAdd %int %995 %int_5 + %997 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %996 + OpStore %997 %988 None + %998 = OpIMul %int %23 %int_4096 + %999 = OpIMul %int %31 %int_128 + %1000 = OpIAdd %int %998 %999 + %1001 = OpIMul %int %34 %int_64 + %1002 = OpIAdd %int %1000 %1001 + %1003 = OpIMul %int %36 %int_16 + %1004 = OpIAdd %int %1002 %1003 + %1005 = OpIAdd %int %1004 %int_6 + %1006 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1005 + %1007 = OpLoad %v4float %1006 None + %1008 = OpIMul %int %788 %int_6 + %1009 = OpIAdd %int %1008 %794 + %1010 = OpIAdd %int %1009 %int_8 + %1011 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1010 + %1012 = OpLoad %v4float %1011 None + %1013 = OpIMul %int %34 %int_36 + %1014 = OpIMul %int %36 %int_9 + %1015 = OpIAdd %int %1013 %1014 + %1016 = OpIMul %int %788 %int_3 + %1017 = OpIAdd %int %1015 %1016 + %1018 = OpIAdd %int %1017 %794 + %1019 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1018 + %1020 = OpLoad %v4float %1019 None + %1021 = OpFMul %v4float %1012 %1020 + %1022 = OpFAdd %v4float %1007 %1021 + %1023 = OpIMul %int %23 %int_4096 + %1024 = OpIMul %int %31 %int_128 + %1025 = OpIAdd %int %1023 %1024 + %1026 = OpIMul %int %34 %int_64 + %1027 = OpIAdd %int %1025 %1026 + %1028 = OpIMul %int %36 %int_16 + %1029 = OpIAdd %int %1027 %1028 + %1030 = OpIAdd %int %1029 %int_6 + %1031 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1030 + OpStore %1031 %1022 None + %1032 = OpIMul %int %23 %int_4096 + %1033 = OpIMul %int %31 %int_128 + %1034 = OpIAdd %int %1032 %1033 + %1035 = OpIMul %int %34 %int_64 + %1036 = OpIAdd %int %1034 %1035 + %1037 = OpIMul %int %36 %int_16 + %1038 = OpIAdd %int %1036 %1037 + %1039 = OpIAdd %int %1038 %int_7 + %1040 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1039 + %1041 = OpLoad %v4float %1040 None + %1042 = OpIMul %int %788 %int_6 + %1043 = OpIAdd %int %1042 %794 + %1044 = OpIAdd %int %1043 %int_9 + %1045 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1044 + %1046 = OpLoad %v4float %1045 None + %1047 = OpIMul %int %34 %int_36 + %1048 = OpIMul %int %36 %int_9 + %1049 = OpIAdd %int %1047 %1048 + %1050 = OpIMul %int %788 %int_3 + %1051 = OpIAdd %int %1049 %1050 + %1052 = OpIAdd %int %1051 %794 + %1053 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1052 + %1054 = OpLoad %v4float %1053 None + %1055 = OpFMul %v4float %1046 %1054 + %1056 = OpFAdd %v4float %1041 %1055 + %1057 = OpIMul %int %23 %int_4096 + %1058 = OpIMul %int %31 %int_128 + %1059 = OpIAdd %int %1057 %1058 + %1060 = OpIMul %int %34 %int_64 + %1061 = OpIAdd %int %1059 %1060 + %1062 = OpIMul %int %36 %int_16 + %1063 = OpIAdd %int %1061 %1062 + %1064 = OpIAdd %int %1063 %int_7 + %1065 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1064 + OpStore %1065 %1056 None + %1066 = OpIMul %int %23 %int_4096 + %1067 = OpIMul %int %31 %int_128 + %1068 = OpIAdd %int %1066 %1067 + %1069 = OpIMul %int %34 %int_64 + %1070 = OpIAdd %int %1068 %1069 + %1071 = OpIMul %int %36 %int_16 + %1072 = OpIAdd %int %1070 %1071 + %1073 = OpIAdd %int %1072 %int_8 + %1074 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1073 + %1075 = OpLoad %v4float %1074 None + %1076 = OpIMul %int %788 %int_6 + %1077 = OpIAdd %int %1076 %794 + %1078 = OpIAdd %int %1077 %int_12 + %1079 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1078 + %1080 = OpLoad %v4float %1079 None + %1081 = OpIMul %int %34 %int_36 + %1082 = OpIMul %int %36 %int_9 + %1083 = OpIAdd %int %1081 %1082 + %1084 = OpIMul %int %788 %int_3 + %1085 = OpIAdd %int %1083 %1084 + %1086 = OpIAdd %int %1085 %794 + %1087 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1086 + %1088 = OpLoad %v4float %1087 None + %1089 = OpFMul %v4float %1080 %1088 + %1090 = OpFAdd %v4float %1075 %1089 + %1091 = OpIMul %int %23 %int_4096 + %1092 = OpIMul %int %31 %int_128 + %1093 = OpIAdd %int %1091 %1092 + %1094 = OpIMul %int %34 %int_64 + %1095 = OpIAdd %int %1093 %1094 + %1096 = OpIMul %int %36 %int_16 + %1097 = OpIAdd %int %1095 %1096 + %1098 = OpIAdd %int %1097 %int_8 + %1099 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1098 + OpStore %1099 %1090 None + %1100 = OpIMul %int %23 %int_4096 + %1101 = OpIMul %int %31 %int_128 + %1102 = OpIAdd %int %1100 %1101 + %1103 = OpIMul %int %34 %int_64 + %1104 = OpIAdd %int %1102 %1103 + %1105 = OpIMul %int %36 %int_16 + %1106 = OpIAdd %int %1104 %1105 + %1107 = OpIAdd %int %1106 %int_9 + %1108 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1107 + %1109 = OpLoad %v4float %1108 None + %1110 = OpIMul %int %788 %int_6 + %1111 = OpIAdd %int %1110 %794 + %1112 = OpIAdd %int %1111 %int_13 + %1113 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1112 + %1114 = OpLoad %v4float %1113 None + %1115 = OpIMul %int %34 %int_36 + %1116 = OpIMul %int %36 %int_9 + %1117 = OpIAdd %int %1115 %1116 + %1118 = OpIMul %int %788 %int_3 + %1119 = OpIAdd %int %1117 %1118 + %1120 = OpIAdd %int %1119 %794 + %1121 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1120 + %1122 = OpLoad %v4float %1121 None + %1123 = OpFMul %v4float %1114 %1122 + %1124 = OpFAdd %v4float %1109 %1123 + %1125 = OpIMul %int %23 %int_4096 + %1126 = OpIMul %int %31 %int_128 + %1127 = OpIAdd %int %1125 %1126 + %1128 = OpIMul %int %34 %int_64 + %1129 = OpIAdd %int %1127 %1128 + %1130 = OpIMul %int %36 %int_16 + %1131 = OpIAdd %int %1129 %1130 + %1132 = OpIAdd %int %1131 %int_9 + %1133 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1132 + OpStore %1133 %1124 None + %1134 = OpIMul %int %23 %int_4096 + %1135 = OpIMul %int %31 %int_128 + %1136 = OpIAdd %int %1134 %1135 + %1137 = OpIMul %int %34 %int_64 + %1138 = OpIAdd %int %1136 %1137 + %1139 = OpIMul %int %36 %int_16 + %1140 = OpIAdd %int %1138 %1139 + %1141 = OpIAdd %int %1140 %int_10 + %1142 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1141 + %1143 = OpLoad %v4float %1142 None + %1144 = OpIMul %int %788 %int_6 + %1145 = OpIAdd %int %1144 %794 + %1146 = OpIAdd %int %1145 %int_14 + %1147 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1146 + %1148 = OpLoad %v4float %1147 None + %1149 = OpIMul %int %34 %int_36 + %1150 = OpIMul %int %36 %int_9 + %1151 = OpIAdd %int %1149 %1150 + %1152 = OpIMul %int %788 %int_3 + %1153 = OpIAdd %int %1151 %1152 + %1154 = OpIAdd %int %1153 %794 + %1155 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1154 + %1156 = OpLoad %v4float %1155 None + %1157 = OpFMul %v4float %1148 %1156 + %1158 = OpFAdd %v4float %1143 %1157 + %1159 = OpIMul %int %23 %int_4096 + %1160 = OpIMul %int %31 %int_128 + %1161 = OpIAdd %int %1159 %1160 + %1162 = OpIMul %int %34 %int_64 + %1163 = OpIAdd %int %1161 %1162 + %1164 = OpIMul %int %36 %int_16 + %1165 = OpIAdd %int %1163 %1164 + %1166 = OpIAdd %int %1165 %int_10 + %1167 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1166 + OpStore %1167 %1158 None + %1168 = OpIMul %int %23 %int_4096 + %1169 = OpIMul %int %31 %int_128 + %1170 = OpIAdd %int %1168 %1169 + %1171 = OpIMul %int %34 %int_64 + %1172 = OpIAdd %int %1170 %1171 + %1173 = OpIMul %int %36 %int_16 + %1174 = OpIAdd %int %1172 %1173 + %1175 = OpIAdd %int %1174 %int_11 + %1176 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1175 + %1177 = OpLoad %v4float %1176 None + %1178 = OpIMul %int %788 %int_6 + %1179 = OpIAdd %int %1178 %794 + %1180 = OpIAdd %int %1179 %int_15 + %1181 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1180 + %1182 = OpLoad %v4float %1181 None + %1183 = OpIMul %int %34 %int_36 + %1184 = OpIMul %int %36 %int_9 + %1185 = OpIAdd %int %1183 %1184 + %1186 = OpIMul %int %788 %int_3 + %1187 = OpIAdd %int %1185 %1186 + %1188 = OpIAdd %int %1187 %794 + %1189 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1188 + %1190 = OpLoad %v4float %1189 None + %1191 = OpFMul %v4float %1182 %1190 + %1192 = OpFAdd %v4float %1177 %1191 + %1193 = OpIMul %int %23 %int_4096 + %1194 = OpIMul %int %31 %int_128 + %1195 = OpIAdd %int %1193 %1194 + %1196 = OpIMul %int %34 %int_64 + %1197 = OpIAdd %int %1195 %1196 + %1198 = OpIMul %int %36 %int_16 + %1199 = OpIAdd %int %1197 %1198 + %1200 = OpIAdd %int %1199 %int_11 + %1201 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1200 + OpStore %1201 %1192 None + %1202 = OpIMul %int %23 %int_4096 + %1203 = OpIMul %int %31 %int_128 + %1204 = OpIAdd %int %1202 %1203 + %1205 = OpIMul %int %34 %int_64 + %1206 = OpIAdd %int %1204 %1205 + %1207 = OpIMul %int %36 %int_16 + %1208 = OpIAdd %int %1206 %1207 + %1209 = OpIAdd %int %1208 %int_12 + %1210 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1209 + %1211 = OpLoad %v4float %1210 None + %1212 = OpIMul %int %788 %int_6 + %1213 = OpIAdd %int %1212 %794 + %1214 = OpIAdd %int %1213 %int_18 + %1215 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1214 + %1216 = OpLoad %v4float %1215 None + %1217 = OpIMul %int %34 %int_36 + %1218 = OpIMul %int %36 %int_9 + %1219 = OpIAdd %int %1217 %1218 + %1220 = OpIMul %int %788 %int_3 + %1221 = OpIAdd %int %1219 %1220 + %1222 = OpIAdd %int %1221 %794 + %1223 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1222 + %1224 = OpLoad %v4float %1223 None + %1225 = OpFMul %v4float %1216 %1224 + %1226 = OpFAdd %v4float %1211 %1225 + %1227 = OpIMul %int %23 %int_4096 + %1228 = OpIMul %int %31 %int_128 + %1229 = OpIAdd %int %1227 %1228 + %1230 = OpIMul %int %34 %int_64 + %1231 = OpIAdd %int %1229 %1230 + %1232 = OpIMul %int %36 %int_16 + %1233 = OpIAdd %int %1231 %1232 + %1234 = OpIAdd %int %1233 %int_12 + %1235 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1234 + OpStore %1235 %1226 None + %1236 = OpIMul %int %23 %int_4096 + %1237 = OpIMul %int %31 %int_128 + %1238 = OpIAdd %int %1236 %1237 + %1239 = OpIMul %int %34 %int_64 + %1240 = OpIAdd %int %1238 %1239 + %1241 = OpIMul %int %36 %int_16 + %1242 = OpIAdd %int %1240 %1241 + %1243 = OpIAdd %int %1242 %int_13 + %1244 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1243 + %1245 = OpLoad %v4float %1244 None + %1246 = OpIMul %int %788 %int_6 + %1247 = OpIAdd %int %1246 %794 + %1248 = OpIAdd %int %1247 %int_19 + %1249 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1248 + %1250 = OpLoad %v4float %1249 None + %1251 = OpIMul %int %34 %int_36 + %1252 = OpIMul %int %36 %int_9 + %1253 = OpIAdd %int %1251 %1252 + %1254 = OpIMul %int %788 %int_3 + %1255 = OpIAdd %int %1253 %1254 + %1256 = OpIAdd %int %1255 %794 + %1257 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1256 + %1258 = OpLoad %v4float %1257 None + %1259 = OpFMul %v4float %1250 %1258 + %1260 = OpFAdd %v4float %1245 %1259 + %1261 = OpIMul %int %23 %int_4096 + %1262 = OpIMul %int %31 %int_128 + %1263 = OpIAdd %int %1261 %1262 + %1264 = OpIMul %int %34 %int_64 + %1265 = OpIAdd %int %1263 %1264 + %1266 = OpIMul %int %36 %int_16 + %1267 = OpIAdd %int %1265 %1266 + %1268 = OpIAdd %int %1267 %int_13 + %1269 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1268 + OpStore %1269 %1260 None + %1270 = OpIMul %int %23 %int_4096 + %1271 = OpIMul %int %31 %int_128 + %1272 = OpIAdd %int %1270 %1271 + %1273 = OpIMul %int %34 %int_64 + %1274 = OpIAdd %int %1272 %1273 + %1275 = OpIMul %int %36 %int_16 + %1276 = OpIAdd %int %1274 %1275 + %1277 = OpIAdd %int %1276 %int_14 + %1278 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1277 + %1279 = OpLoad %v4float %1278 None + %1280 = OpIMul %int %788 %int_6 + %1281 = OpIAdd %int %1280 %794 + %1282 = OpIAdd %int %1281 %int_20 + %1283 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1282 + %1284 = OpLoad %v4float %1283 None + %1285 = OpIMul %int %34 %int_36 + %1286 = OpIMul %int %36 %int_9 + %1287 = OpIAdd %int %1285 %1286 + %1288 = OpIMul %int %788 %int_3 + %1289 = OpIAdd %int %1287 %1288 + %1290 = OpIAdd %int %1289 %794 + %1291 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1290 + %1292 = OpLoad %v4float %1291 None + %1293 = OpFMul %v4float %1284 %1292 + %1294 = OpFAdd %v4float %1279 %1293 + %1295 = OpIMul %int %23 %int_4096 + %1296 = OpIMul %int %31 %int_128 + %1297 = OpIAdd %int %1295 %1296 + %1298 = OpIMul %int %34 %int_64 + %1299 = OpIAdd %int %1297 %1298 + %1300 = OpIMul %int %36 %int_16 + %1301 = OpIAdd %int %1299 %1300 + %1302 = OpIAdd %int %1301 %int_14 + %1303 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1302 + OpStore %1303 %1294 None + %1304 = OpIMul %int %23 %int_4096 + %1305 = OpIMul %int %31 %int_128 + %1306 = OpIAdd %int %1304 %1305 + %1307 = OpIMul %int %34 %int_64 + %1308 = OpIAdd %int %1306 %1307 + %1309 = OpIMul %int %36 %int_16 + %1310 = OpIAdd %int %1308 %1309 + %1311 = OpIAdd %int %1310 %int_15 + %1312 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1311 + %1313 = OpLoad %v4float %1312 None + %1314 = OpIMul %int %788 %int_6 + %1315 = OpIAdd %int %1314 %794 + %1316 = OpIAdd %int %1315 %int_21 + %1317 = OpInBoundsAccessChain %_ptr_Function_v4float %28 %int_0 %1316 + %1318 = OpLoad %v4float %1317 None + %1319 = OpIMul %int %34 %int_36 + %1320 = OpIMul %int %36 %int_9 + %1321 = OpIAdd %int %1319 %1320 + %1322 = OpIMul %int %788 %int_3 + %1323 = OpIAdd %int %1321 %1322 + %1324 = OpIAdd %int %1323 %794 + %1325 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1324 + %1326 = OpLoad %v4float %1325 None + %1327 = OpFMul %v4float %1318 %1326 + %1328 = OpFAdd %v4float %1313 %1327 + %1329 = OpIMul %int %23 %int_4096 + %1330 = OpIMul %int %31 %int_128 + %1331 = OpIAdd %int %1329 %1330 + %1332 = OpIMul %int %34 %int_64 + %1333 = OpIAdd %int %1331 %1332 + %1334 = OpIMul %int %36 %int_16 + %1335 = OpIAdd %int %1333 %1334 + %1336 = OpIAdd %int %1335 %int_15 + %1337 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1336 + OpStore %1337 %1328 None + OpBranch %792 + %792 = OpLabel + %1338 = OpIAdd %int %794 %int_1 + OpBranch %790 + %793 = OpLabel + OpBranch %786 + %786 = OpLabel + %1339 = OpIAdd %int %788 %int_1 + OpBranch %784 + %787 = OpLabel OpReturn OpFunctionEnd diff --git a/shader3.spvtxt b/shader3.spvtxt index 1c54c65b9e307..ce2e463b7482d 100644 --- a/shader3.spvtxt +++ b/shader3.spvtxt @@ -1,13 +1,13 @@ ; SPIR-V ; Version: 1.0 ; Generator: Khronos; 0 -; Bound: 200 +; Bound: 1231 ; Schema: 0 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %16 "default_function_kernel0" %gl_WorkGroupID %gl_LocalInvocationID - OpExecutionMode %16 LocalSize 8 1 24 + OpExecutionMode %16 LocalSize 32 1 8 OpDecorate %_runtimearr_v4float ArrayStride 16 OpMemberDecorate %_struct_11 0 Offset 0 OpDecorate %_struct_11 BufferBlock @@ -39,95 +39,396 @@ %gl_LocalInvocationID = OpVariable %_ptr_Input_v3int Input %int_2 = OpConstant %int 2 %float_0 = OpConstant %float 0 - %38 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 - %41 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 - %int_1 = OpConstant %int 1 - %44 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 - %46 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 - %int_3 = OpConstant %int 3 - %int_144 = OpConstant %int 144 + %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float - %int_4608 = OpConstant %int 4608 - %int_576 = OpConstant %int 576 + %int_1024 = OpConstant %int 1024 + %int_32 = OpConstant %int 32 %int_4 = OpConstant %int 4 -%mat4v4float = OpTypeMatrix %v4float 4 - %int_768 = OpConstant %int 768 - %int_96 = OpConstant %int 96 + %44 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1 = OpConstant %int 1 + %53 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %61 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_3 = OpConstant %int 3 + %v4bool = OpTypeVector %bool 4 + %97 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_9 = OpConstant %int 9 + %129 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1023 = OpConstant %int 1023 + %162 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1022 = OpConstant %int 1022 + %195 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %226 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %258 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %291 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1021 = OpConstant %int 1021 + %325 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %357 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %389 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %422 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_31 = OpConstant %int 31 + %int_992 = OpConstant %int 992 + %459 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %497 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_5 = OpConstant %int 5 + %814 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_111 = OpConstant %int 111 + %856 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_6 = OpConstant %int 6 + %889 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1025 = OpConstant %int 1025 + %923 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1026 = OpConstant %int 1026 + %957 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %989 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_7 = OpConstant %int 7 + %1022 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %1055 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1027 = OpConstant %int 1027 + %1089 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %1121 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_8 = OpConstant %int 8 + %1154 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %1187 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 + %int_1056 = OpConstant %int 1056 + %1223 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 %16 = OpFunction %void None %8 %17 = OpLabel %22 = OpAccessChain %_ptr_Input_int %gl_WorkGroupID %int_0 %23 = OpLoad %int %22 - %30 = OpAccessChain %_ptr_Input_int %gl_LocalInvocationID %int_0 + %25 = OpAccessChain %_ptr_Input_int %gl_LocalInvocationID %int_0 + %26 = OpLoad %int %25 + %30 = OpAccessChain %_ptr_Input_int %gl_LocalInvocationID %int_2 %31 = OpLoad %int %30 - %35 = OpAccessChain %_ptr_Input_int %gl_LocalInvocationID %int_2 - %36 = OpLoad %int %35 - OpBranch %50 - %50 = OpLabel - %199 = OpPhi %v4float %46 %17 %134 %51 - %198 = OpPhi %v4float %44 %17 %121 %51 - %197 = OpPhi %v4float %41 %17 %108 %51 - %196 = OpPhi %v4float %38 %17 %95 %51 - %54 = OpPhi %int %int_0 %17 %136 %51 - %55 = OpSLessThan %bool %54 %int_144 - OpLoopMerge %53 %51 None - OpBranchConditional %55 %51 %53 128 1 - %51 = OpLabel - %60 = OpIMul %int %23 %int_4608 - %62 = OpIMul %int %31 %int_576 - %63 = OpIAdd %int %60 %62 - %65 = OpIMul %int %54 %int_4 - %66 = OpIAdd %int %63 %65 - %67 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %66 - %68 = OpLoad %v4float %67 None - %69 = OpIMul %int %36 %int_576 - %71 = OpIAdd %int %69 %65 - %72 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %71 - %73 = OpLoad %v4float %72 None - %77 = OpIAdd %int %71 %int_1 - %78 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %77 - %79 = OpLoad %v4float %78 None - %83 = OpIAdd %int %71 %int_2 - %84 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %83 - %85 = OpLoad %v4float %84 None - %89 = OpIAdd %int %71 %int_3 - %90 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %89 - %91 = OpLoad %v4float %90 None - %93 = OpCompositeConstruct %mat4v4float %73 %79 %85 %91 - %94 = OpVectorTimesMatrix %v4float %68 %93 - %95 = OpFAdd %v4float %196 %94 - %104 = OpIAdd %int %66 %int_1 - %105 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %104 - %106 = OpLoad %v4float %105 None - %107 = OpVectorTimesMatrix %v4float %106 %93 - %108 = OpFAdd %v4float %197 %107 - %117 = OpIAdd %int %66 %int_2 - %118 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %117 - %119 = OpLoad %v4float %118 None - %120 = OpVectorTimesMatrix %v4float %119 %93 - %121 = OpFAdd %v4float %198 %120 - %130 = OpIAdd %int %66 %int_3 - %131 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %130 - %132 = OpLoad %v4float %131 None - %133 = OpVectorTimesMatrix %v4float %132 %93 - %134 = OpFAdd %v4float %199 %133 - %136 = OpIAdd %int %54 %int_1 - OpBranch %50 - %53 = OpLabel - %140 = OpIMul %int %23 %int_768 - %142 = OpIMul %int %31 %int_96 - %143 = OpIAdd %int %140 %142 - %144 = OpIMul %int %36 %int_4 - %145 = OpIAdd %int %143 %144 - %146 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %145 - OpStore %146 %196 None - %154 = OpIAdd %int %145 %int_1 - %155 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %154 - OpStore %155 %197 None - %163 = OpIAdd %int %145 %int_2 - %164 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %163 - OpStore %164 %198 None - %172 = OpIAdd %int %145 %int_3 - %173 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %172 - OpStore %173 %199 None + %36 = OpIMul %int %23 %int_1024 + %38 = OpIMul %int %26 %int_32 + %39 = OpIAdd %int %36 %38 + %41 = OpIMul %int %31 %int_4 + %42 = OpIAdd %int %39 %41 + %43 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %42 + OpStore %43 %33 None + %51 = OpIAdd %int %42 %int_1 + %52 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %51 + OpStore %52 %44 None + %59 = OpIAdd %int %42 %int_2 + %60 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %59 + OpStore %60 %53 None + %68 = OpIAdd %int %42 %int_3 + %69 = OpInBoundsAccessChain %_ptr_Uniform_v4float %13 %int_0 %68 + OpStore %69 %61 None + %76 = OpLoad %v4float %43 None + %77 = OpSLessThanEqual %bool %int_1 %23 + %78 = OpSLessThanEqual %bool %int_1 %26 + %79 = OpLogicalAnd %bool %77 %78 + %81 = OpCompositeConstruct %v4bool %79 %79 %79 %79 + %83 = OpIMul %int %26 %int_4 + %84 = OpISub %int %83 %int_1 + %85 = OpSDiv %int %84 %int_4 + %86 = OpIMul %int %85 %int_32 + %87 = OpIAdd %int %36 %86 + %89 = OpIAdd %int %87 %41 + %92 = OpSRem %int %84 %int_4 + %93 = OpIAdd %int %89 %92 + %94 = OpISub %int %93 %int_1024 + %95 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %94 + %96 = OpLoad %v4float %95 None + %98 = OpSelect %v4float %81 %96 %97 + %100 = OpIMul %int %31 %int_9 + %101 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %100 + %102 = OpLoad %v4float %101 None + %103 = OpFMul %v4float %98 %102 + %104 = OpFAdd %v4float %76 %103 + OpStore %43 %104 None + %118 = OpLoad %v4float %52 None + %120 = OpCompositeConstruct %v4bool %77 %77 %77 %77 + %126 = OpISub %int %42 %int_1024 + %127 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %126 + %128 = OpLoad %v4float %127 None + %130 = OpSelect %v4float %120 %128 %129 + %133 = OpLoad %v4float %101 None + %134 = OpFMul %v4float %130 %133 + %135 = OpFAdd %v4float %118 %134 + OpStore %52 %135 None + %150 = OpLoad %v4float %60 None + %159 = OpISub %int %42 %int_1023 + %160 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %159 + %161 = OpLoad %v4float %160 None + %163 = OpSelect %v4float %120 %161 %162 + %166 = OpLoad %v4float %101 None + %167 = OpFMul %v4float %163 %166 + %168 = OpFAdd %v4float %150 %167 + OpStore %60 %168 None + %183 = OpLoad %v4float %69 None + %192 = OpISub %int %42 %int_1022 + %193 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %192 + %194 = OpLoad %v4float %193 None + %196 = OpSelect %v4float %120 %194 %195 + %199 = OpLoad %v4float %101 None + %200 = OpFMul %v4float %196 %199 + %201 = OpFAdd %v4float %183 %200 + OpStore %69 %201 None + %215 = OpLoad %v4float %43 None + %225 = OpLoad %v4float %127 None + %227 = OpSelect %v4float %120 %225 %226 + %229 = OpIAdd %int %100 %int_1 + %230 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %229 + %231 = OpLoad %v4float %230 None + %232 = OpFMul %v4float %227 %231 + %233 = OpFAdd %v4float %215 %232 + OpStore %43 %233 None + %247 = OpLoad %v4float %52 None + %257 = OpLoad %v4float %160 None + %259 = OpSelect %v4float %120 %257 %258 + %263 = OpLoad %v4float %230 None + %264 = OpFMul %v4float %259 %263 + %265 = OpFAdd %v4float %247 %264 + OpStore %52 %265 None + %280 = OpLoad %v4float %60 None + %290 = OpLoad %v4float %193 None + %292 = OpSelect %v4float %120 %290 %291 + %296 = OpLoad %v4float %230 None + %297 = OpFMul %v4float %292 %296 + %298 = OpFAdd %v4float %280 %297 + OpStore %60 %298 None + %313 = OpLoad %v4float %69 None + %322 = OpISub %int %42 %int_1021 + %323 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %322 + %324 = OpLoad %v4float %323 None + %326 = OpSelect %v4float %120 %324 %325 + %330 = OpLoad %v4float %230 None + %331 = OpFMul %v4float %326 %330 + %332 = OpFAdd %v4float %313 %331 + OpStore %69 %332 None + %346 = OpLoad %v4float %43 None + %356 = OpLoad %v4float %160 None + %358 = OpSelect %v4float %120 %356 %357 + %360 = OpIAdd %int %100 %int_2 + %361 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %360 + %362 = OpLoad %v4float %361 None + %363 = OpFMul %v4float %358 %362 + %364 = OpFAdd %v4float %346 %363 + OpStore %43 %364 None + %378 = OpLoad %v4float %52 None + %388 = OpLoad %v4float %193 None + %390 = OpSelect %v4float %120 %388 %389 + %394 = OpLoad %v4float %361 None + %395 = OpFMul %v4float %390 %394 + %396 = OpFAdd %v4float %378 %395 + OpStore %52 %396 None + %411 = OpLoad %v4float %60 None + %421 = OpLoad %v4float %323 None + %423 = OpSelect %v4float %120 %421 %422 + %427 = OpLoad %v4float %361 None + %428 = OpFMul %v4float %423 %427 + %429 = OpFAdd %v4float %411 %428 + OpStore %60 %429 None + %444 = OpLoad %v4float %69 None + %447 = OpSLessThan %bool %26 %int_31 + %448 = OpLogicalAnd %bool %77 %447 + %449 = OpCompositeConstruct %v4bool %448 %448 %448 %448 + %456 = OpISub %int %42 %int_992 + %457 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %456 + %458 = OpLoad %v4float %457 None + %460 = OpSelect %v4float %449 %458 %459 + %464 = OpLoad %v4float %361 None + %465 = OpFMul %v4float %460 %464 + %466 = OpFAdd %v4float %444 %465 + OpStore %69 %466 None + %480 = OpLoad %v4float %43 None + %482 = OpCompositeConstruct %v4bool %78 %78 %78 %78 + %495 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %93 + %496 = OpLoad %v4float %495 None + %498 = OpSelect %v4float %482 %496 %497 + %500 = OpIAdd %int %100 %int_3 + %501 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %500 + %502 = OpLoad %v4float %501 None + %503 = OpFMul %v4float %498 %502 + %504 = OpFAdd %v4float %480 %503 + OpStore %43 %504 None + %518 = OpLoad %v4float %52 None + %524 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %42 + %525 = OpLoad %v4float %524 None + %529 = OpLoad %v4float %501 None + %530 = OpFMul %v4float %525 %529 + %531 = OpFAdd %v4float %518 %530 + OpStore %52 %531 None + %546 = OpLoad %v4float %60 None + %553 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %51 + %554 = OpLoad %v4float %553 None + %558 = OpLoad %v4float %501 None + %559 = OpFMul %v4float %554 %558 + %560 = OpFAdd %v4float %546 %559 + OpStore %60 %560 None + %575 = OpLoad %v4float %69 None + %582 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %59 + %583 = OpLoad %v4float %582 None + %587 = OpLoad %v4float %501 None + %588 = OpFMul %v4float %583 %587 + %589 = OpFAdd %v4float %575 %588 + OpStore %69 %589 None + %603 = OpLoad %v4float %43 None + %610 = OpLoad %v4float %524 None + %612 = OpIAdd %int %100 %int_4 + %613 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %612 + %614 = OpLoad %v4float %613 None + %615 = OpFMul %v4float %610 %614 + %616 = OpFAdd %v4float %603 %615 + OpStore %43 %616 None + %630 = OpLoad %v4float %52 None + %638 = OpLoad %v4float %553 None + %642 = OpLoad %v4float %613 None + %643 = OpFMul %v4float %638 %642 + %644 = OpFAdd %v4float %630 %643 + OpStore %52 %644 None + %659 = OpLoad %v4float %60 None + %667 = OpLoad %v4float %582 None + %671 = OpLoad %v4float %613 None + %672 = OpFMul %v4float %667 %671 + %673 = OpFAdd %v4float %659 %672 + OpStore %60 %673 None + %688 = OpLoad %v4float %69 None + %695 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %68 + %696 = OpLoad %v4float %695 None + %700 = OpLoad %v4float %613 None + %701 = OpFMul %v4float %696 %700 + %702 = OpFAdd %v4float %688 %701 + OpStore %69 %702 None + %716 = OpLoad %v4float %43 None + %724 = OpLoad %v4float %553 None + %727 = OpIAdd %int %100 %int_5 + %728 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %727 + %729 = OpLoad %v4float %728 None + %730 = OpFMul %v4float %724 %729 + %731 = OpFAdd %v4float %716 %730 + OpStore %43 %731 None + %745 = OpLoad %v4float %52 None + %753 = OpLoad %v4float %582 None + %757 = OpLoad %v4float %728 None + %758 = OpFMul %v4float %753 %757 + %759 = OpFAdd %v4float %745 %758 + OpStore %52 %759 None + %774 = OpLoad %v4float %60 None + %782 = OpLoad %v4float %695 None + %786 = OpLoad %v4float %728 None + %787 = OpFMul %v4float %782 %786 + %788 = OpFAdd %v4float %774 %787 + OpStore %60 %788 None + %803 = OpLoad %v4float %69 None + %805 = OpCompositeConstruct %v4bool %447 %447 %447 %447 + %811 = OpIAdd %int %42 %int_32 + %812 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %811 + %813 = OpLoad %v4float %812 None + %815 = OpSelect %v4float %805 %813 %814 + %819 = OpLoad %v4float %728 None + %820 = OpFMul %v4float %815 %819 + %821 = OpFAdd %v4float %803 %820 + OpStore %69 %821 None + %835 = OpLoad %v4float %43 None + %837 = OpSLessThan %bool %23 %int_111 + %839 = OpLogicalAnd %bool %837 %78 + %840 = OpCompositeConstruct %v4bool %839 %839 %839 %839 + %853 = OpIAdd %int %93 %int_1024 + %854 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %853 + %855 = OpLoad %v4float %854 None + %857 = OpSelect %v4float %840 %855 %856 + %860 = OpIAdd %int %100 %int_6 + %861 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %860 + %862 = OpLoad %v4float %861 None + %863 = OpFMul %v4float %857 %862 + %864 = OpFAdd %v4float %835 %863 + OpStore %43 %864 None + %878 = OpLoad %v4float %52 None + %880 = OpCompositeConstruct %v4bool %837 %837 %837 %837 + %886 = OpIAdd %int %42 %int_1024 + %887 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %886 + %888 = OpLoad %v4float %887 None + %890 = OpSelect %v4float %880 %888 %889 + %894 = OpLoad %v4float %861 None + %895 = OpFMul %v4float %890 %894 + %896 = OpFAdd %v4float %878 %895 + OpStore %52 %896 None + %911 = OpLoad %v4float %60 None + %920 = OpIAdd %int %42 %int_1025 + %921 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %920 + %922 = OpLoad %v4float %921 None + %924 = OpSelect %v4float %880 %922 %923 + %928 = OpLoad %v4float %861 None + %929 = OpFMul %v4float %924 %928 + %930 = OpFAdd %v4float %911 %929 + OpStore %60 %930 None + %945 = OpLoad %v4float %69 None + %954 = OpIAdd %int %42 %int_1026 + %955 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %954 + %956 = OpLoad %v4float %955 None + %958 = OpSelect %v4float %880 %956 %957 + %962 = OpLoad %v4float %861 None + %963 = OpFMul %v4float %958 %962 + %964 = OpFAdd %v4float %945 %963 + OpStore %69 %964 None + %978 = OpLoad %v4float %43 None + %988 = OpLoad %v4float %887 None + %990 = OpSelect %v4float %880 %988 %989 + %993 = OpIAdd %int %100 %int_7 + %994 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %993 + %995 = OpLoad %v4float %994 None + %996 = OpFMul %v4float %990 %995 + %997 = OpFAdd %v4float %978 %996 + OpStore %43 %997 None + %1011 = OpLoad %v4float %52 None + %1021 = OpLoad %v4float %921 None + %1023 = OpSelect %v4float %880 %1021 %1022 + %1027 = OpLoad %v4float %994 None + %1028 = OpFMul %v4float %1023 %1027 + %1029 = OpFAdd %v4float %1011 %1028 + OpStore %52 %1029 None + %1044 = OpLoad %v4float %60 None + %1054 = OpLoad %v4float %955 None + %1056 = OpSelect %v4float %880 %1054 %1055 + %1060 = OpLoad %v4float %994 None + %1061 = OpFMul %v4float %1056 %1060 + %1062 = OpFAdd %v4float %1044 %1061 + OpStore %60 %1062 None + %1077 = OpLoad %v4float %69 None + %1086 = OpIAdd %int %42 %int_1027 + %1087 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1086 + %1088 = OpLoad %v4float %1087 None + %1090 = OpSelect %v4float %880 %1088 %1089 + %1094 = OpLoad %v4float %994 None + %1095 = OpFMul %v4float %1090 %1094 + %1096 = OpFAdd %v4float %1077 %1095 + OpStore %69 %1096 None + %1110 = OpLoad %v4float %43 None + %1120 = OpLoad %v4float %921 None + %1122 = OpSelect %v4float %880 %1120 %1121 + %1125 = OpIAdd %int %100 %int_8 + %1126 = OpInBoundsAccessChain %_ptr_Uniform_v4float %15 %int_0 %1125 + %1127 = OpLoad %v4float %1126 None + %1128 = OpFMul %v4float %1122 %1127 + %1129 = OpFAdd %v4float %1110 %1128 + OpStore %43 %1129 None + %1143 = OpLoad %v4float %52 None + %1153 = OpLoad %v4float %955 None + %1155 = OpSelect %v4float %880 %1153 %1154 + %1159 = OpLoad %v4float %1126 None + %1160 = OpFMul %v4float %1155 %1159 + %1161 = OpFAdd %v4float %1143 %1160 + OpStore %52 %1161 None + %1176 = OpLoad %v4float %60 None + %1186 = OpLoad %v4float %1087 None + %1188 = OpSelect %v4float %880 %1186 %1187 + %1192 = OpLoad %v4float %1126 None + %1193 = OpFMul %v4float %1188 %1192 + %1194 = OpFAdd %v4float %1176 %1193 + OpStore %60 %1194 None + %1209 = OpLoad %v4float %69 None + %1212 = OpLogicalAnd %bool %837 %447 + %1213 = OpCompositeConstruct %v4bool %1212 %1212 %1212 %1212 + %1220 = OpIAdd %int %42 %int_1056 + %1221 = OpInBoundsAccessChain %_ptr_Uniform_v4float %14 %int_0 %1220 + %1222 = OpLoad %v4float %1221 None + %1224 = OpSelect %v4float %1213 %1222 %1223 + %1228 = OpLoad %v4float %1126 None + %1229 = OpFMul %v4float %1224 %1228 + %1230 = OpFAdd %v4float %1209 %1229 + OpStore %69 %1230 None OpReturn OpFunctionEnd diff --git a/src/runtime/vulkan/README.md b/src/runtime/vulkan/README.md new file mode 100644 index 0000000000000..f1d395bbe1494 --- /dev/null +++ b/src/runtime/vulkan/README.md @@ -0,0 +1,25 @@ + +The dispatch/threading mechanism is as follows. + +We maintain a set of thread-local command buffers. + +These command buffers are stored in the ThreadLocal context. + +When an Vulkan PackedFunc operator() is invoked, we acquire the current command +buffer (where the acquisition process handles allocating and initializing new +ones on-demand). + +We then do the standard: + +- `begin_command_buffer()` +- `record_prepare_compute_barrier()` +- `record_bind_pipeline()` +- `record_update_bindings()` +- `record_push_constants()` +- `record_dispatch()` + +loop on every `operator()` invocation. + +On synchronization events, we `end_command_buffer`, and issue a +`queue_submit_and_wait_fence()` operation. + diff --git a/src/runtime/vulkan/vulkan_common.h b/src/runtime/vulkan/vulkan_common.h index e00c9498f9579..5802faf645ab4 100644 --- a/src/runtime/vulkan/vulkan_common.h +++ b/src/runtime/vulkan/vulkan_common.h @@ -290,6 +290,7 @@ class VulkanThreadEntry { private: /*! \brief the command pools */ std::vector > pool_; + std::unique_ptr current_buffer_; }; // inline implementation diff --git a/src/runtime/vulkan/vulkan_module.cc b/src/runtime/vulkan/vulkan_module.cc index c1db14d35674c..476ab2b2733ec 100644 --- a/src/runtime/vulkan/vulkan_module.cc +++ b/src/runtime/vulkan/vulkan_module.cc @@ -265,6 +265,7 @@ class VulkanWrappedFunc { TVMRetValue* rv, const ArgUnion* pack_args) const { vulkan::VulkanThreadEntry* tls = vulkan::VulkanThreadEntry::ThreadLocal(); + int device_id = tls->context.device_id; CHECK_LT(device_id, kVulkanMaxNumDevice); const vulkan::VulkanContext& vctx = w_->context_[device_id];