; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 ; Bound: 254 ; Schema: 0 OpCapability Shader OpCapability ImageQuery OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %tint_symbol_2 %tint_symbol %tint_symbol_1 OpExecutionMode %main LocalSize 64 1 1 OpName %samp "samp" OpName %Params "Params" OpMemberName %Params 0 "filterDim" OpMemberName %Params 1 "blockDim" OpName %params "params" OpName %inputTex "inputTex" OpName %outputTex "outputTex" OpName %Flip "Flip" OpMemberName %Flip 0 "value" OpName %flip "flip" OpName %tile "tile" OpName %tint_symbol "tint_symbol" OpName %tint_symbol_1 "tint_symbol_1" OpName %tint_symbol_2 "tint_symbol_2" OpName %main "main" OpName %idx "idx" OpName %r "r" OpName %c "c" OpName %loadIndex "loadIndex" OpName %r_0 "r" OpName %c_0 "c" OpName %writeIndex "writeIndex" OpName %acc "acc" OpName %f "f" OpName %i "i" OpDecorate %samp DescriptorSet 0 OpDecorate %samp Binding 0 OpDecorate %Params Block OpMemberDecorate %Params 0 Offset 0 OpMemberDecorate %Params 1 Offset 4 OpDecorate %params NonWritable OpDecorate %params DescriptorSet 0 OpDecorate %params Binding 1 OpDecorate %inputTex DescriptorSet 1 OpDecorate %inputTex Binding 1 OpDecorate %outputTex NonReadable OpDecorate %outputTex DescriptorSet 1 OpDecorate %outputTex Binding 2 OpDecorate %Flip Block OpMemberDecorate %Flip 0 Offset 0 OpDecorate %flip NonWritable OpDecorate %flip DescriptorSet 1 OpDecorate %flip Binding 3 OpDecorate %_arr_v3float_uint_256 ArrayStride 16 OpDecorate %_arr__arr_v3float_uint_256_uint_4 ArrayStride 4096 OpDecorate %tint_symbol BuiltIn WorkgroupId OpDecorate %tint_symbol_1 BuiltIn LocalInvocationId OpDecorate %tint_symbol_2 BuiltIn LocalInvocationIndex %3 = OpTypeSampler %_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3 %samp = OpVariable %_ptr_UniformConstant_3 UniformConstant %uint = OpTypeInt 32 0 %Params = OpTypeStruct %uint %uint %_ptr_Uniform_Params = OpTypePointer Uniform %Params %params = OpVariable %_ptr_Uniform_Params Uniform %float = OpTypeFloat 32 %10 = OpTypeImage %float 2D 0 0 0 1 Unknown %_ptr_UniformConstant_10 = OpTypePointer UniformConstant %10 %inputTex = OpVariable %_ptr_UniformConstant_10 UniformConstant %14 = OpTypeImage %float 2D 0 0 0 2 Rgba8 %_ptr_UniformConstant_14 = OpTypePointer UniformConstant %14 %outputTex = OpVariable %_ptr_UniformConstant_14 UniformConstant %Flip = OpTypeStruct %uint %_ptr_Uniform_Flip = OpTypePointer Uniform %Flip %flip = OpVariable %_ptr_Uniform_Flip Uniform %v3float = OpTypeVector %float 3 %uint_256 = OpConstant %uint 256 %_arr_v3float_uint_256 = OpTypeArray %v3float %uint_256 %uint_4 = OpConstant %uint 4 %_arr__arr_v3float_uint_256_uint_4 = OpTypeArray %_arr_v3float_uint_256 %uint_4 %_ptr_Workgroup__arr__arr_v3float_uint_256_uint_4 = OpTypePointer Workgroup %_arr__arr_v3float_uint_256_uint_4 %tile = OpVariable %_ptr_Workgroup__arr__arr_v3float_uint_256_uint_4 Workgroup %v3uint = OpTypeVector %uint 3 %_ptr_Input_v3uint = OpTypePointer Input %v3uint %tint_symbol = OpVariable %_ptr_Input_v3uint Input %tint_symbol_1 = OpVariable %_ptr_Input_v3uint Input %_ptr_Input_uint = OpTypePointer Input %uint %tint_symbol_2 = OpVariable %_ptr_Input_uint Input %void = OpTypeVoid %31 = OpTypeFunction %void %_ptr_Function_uint = OpTypePointer Function %uint %38 = OpConstantNull %uint %uint_1024 = OpConstant %uint 1024 %bool = OpTypeBool %_ptr_Workgroup_v3float = OpTypePointer Workgroup %v3float %56 = OpConstantNull %v3float %uint_64 = OpConstant %uint 64 %uint_2 = OpConstant %uint 2 %uint_264 = OpConstant %uint 264 %uint_0 = OpConstant %uint 0 %_ptr_Uniform_uint = OpTypePointer Uniform %uint %uint_1 = OpConstant %uint 1 %int = OpTypeInt 32 1 %v2int = OpTypeVector %int 2 %int_0 = OpConstant %int 0 %v2uint = OpTypeVector %uint 2 %85 = OpConstantComposite %v2uint %uint_4 %uint_1 %_ptr_Function_v2int = OpTypePointer Function %v2int %119 = OpConstantNull %v2int %v4float = OpTypeVector %float 4 %138 = OpTypeSampledImage %10 %v2float = OpTypeVector %float 2 %float_0_25 = OpConstant %float 0.25 %144 = OpConstantComposite %v2float %float_0_25 %float_0_25 %float_0 = OpConstant %float 0 %v2bool = OpTypeVector %bool 2 %209 = OpConstantComposite %v3float %float_0 %float_0 %float_0 %_ptr_Function_v3float = OpTypePointer Function %v3float %float_1 = OpConstant %float 1 %main = OpFunction %void None %31 %34 = OpLabel %idx = OpVariable %_ptr_Function_uint Function %38 %r = OpVariable %_ptr_Function_uint Function %38 %c = OpVariable %_ptr_Function_uint Function %38 %loadIndex = OpVariable %_ptr_Function_v2int Function %119 %r_0 = OpVariable %_ptr_Function_uint Function %38 %c_0 = OpVariable %_ptr_Function_uint Function %38 %writeIndex = OpVariable %_ptr_Function_v2int Function %119 %acc = OpVariable %_ptr_Function_v3float Function %56 %f = OpVariable %_ptr_Function_uint Function %38 %i = OpVariable %_ptr_Function_uint Function %38 %35 = OpLoad %uint %tint_symbol_2 OpStore %idx %35 OpBranch %39 %39 = OpLabel OpLoopMerge %40 %41 None OpBranch %42 %42 = OpLabel %44 = OpLoad %uint %idx %46 = OpULessThan %bool %44 %uint_1024 %43 = OpLogicalNot %bool %46 OpSelectionMerge %48 None OpBranchConditional %43 %49 %48 %49 = OpLabel OpBranch %40 %48 = OpLabel %50 = OpLoad %uint %idx %51 = OpUDiv %uint %50 %uint_256 %52 = OpLoad %uint %idx %53 = OpUMod %uint %52 %uint_256 %55 = OpAccessChain %_ptr_Workgroup_v3float %tile %51 %53 OpStore %55 %56 OpBranch %41 %41 = OpLabel %57 = OpLoad %uint %idx %59 = OpIAdd %uint %57 %uint_64 OpStore %idx %59 OpBranch %39 %40 = OpLabel OpControlBarrier %uint_2 %uint_2 %uint_264 %65 = OpAccessChain %_ptr_Uniform_uint %params %uint_0 %66 = OpLoad %uint %65 %68 = OpISub %uint %66 %uint_1 %69 = OpUDiv %uint %68 %uint_2 %73 = OpLoad %10 %inputTex %70 = OpImageQuerySizeLod %v2int %73 %int_0 %77 = OpLoad %v3uint %tint_symbol %78 = OpVectorShuffle %v2uint %77 %77 0 1 %79 = OpAccessChain %_ptr_Uniform_uint %params %uint_1 %80 = OpLoad %uint %79 %81 = OpCompositeConstruct %v2uint %80 %uint_4 %82 = OpIMul %v2uint %78 %81 %83 = OpLoad %v3uint %tint_symbol_1 %84 = OpVectorShuffle %v2uint %83 %83 0 1 %86 = OpIMul %v2uint %84 %85 %87 = OpIAdd %v2uint %82 %86 %75 = OpBitcast %v2int %87 %88 = OpBitcast %int %69 %89 = OpCompositeConstruct %v2int %88 %int_0 %90 = OpISub %v2int %75 %89 OpStore %r %uint_0 OpBranch %92 %92 = OpLabel OpLoopMerge %93 %94 None OpBranch %95 %95 = OpLabel %97 = OpLoad %uint %r %98 = OpULessThan %bool %97 %uint_4 %96 = OpLogicalNot %bool %98 OpSelectionMerge %99 None OpBranchConditional %96 %100 %99 %100 = OpLabel OpBranch %93 %99 = OpLabel OpStore %c %uint_0 OpBranch %102 %102 = OpLabel OpLoopMerge %103 %104 None OpBranch %105 %105 = OpLabel %107 = OpLoad %uint %c %108 = OpULessThan %bool %107 %uint_4 %106 = OpLogicalNot %bool %108 OpSelectionMerge %109 None OpBranchConditional %106 %110 %109 %110 = OpLabel OpBranch %103 %109 = OpLabel %112 = OpLoad %uint %c %111 = OpBitcast %int %112 %114 = OpLoad %uint %r %113 = OpBitcast %int %114 %115 = OpCompositeConstruct %v2int %111 %113 %116 = OpIAdd %v2int %90 %115 OpStore %loadIndex %116 %120 = OpAccessChain %_ptr_Uniform_uint %flip %uint_0 %121 = OpLoad %uint %120 %122 = OpINotEqual %bool %121 %uint_0 OpSelectionMerge %123 None OpBranchConditional %122 %124 %123 %124 = OpLabel %125 = OpLoad %v2int %loadIndex %126 = OpVectorShuffle %v2int %125 %125 1 0 OpStore %loadIndex %126 OpBranch %123 %123 = OpLabel %127 = OpLoad %uint %r %128 = OpAccessChain %_ptr_Input_uint %tint_symbol_1 %uint_0 %129 = OpLoad %uint %128 %130 = OpIMul %uint %uint_4 %129 %131 = OpLoad %uint %c %132 = OpIAdd %uint %130 %131 %133 = OpAccessChain %_ptr_Workgroup_v3float %tile %127 %132 %136 = OpLoad %3 %samp %137 = OpLoad %10 %inputTex %139 = OpSampledImage %138 %137 %136 %142 = OpLoad %v2int %loadIndex %140 = OpConvertSToF %v2float %142 %145 = OpFAdd %v2float %140 %144 %146 = OpConvertSToF %v2float %70 %147 = OpFDiv %v2float %145 %146 %134 = OpImageSampleExplicitLod %v4float %139 %147 Lod %float_0 %149 = OpVectorShuffle %v3float %134 %134 0 1 2 OpStore %133 %149 OpBranch %104 %104 = OpLabel %150 = OpLoad %uint %c %151 = OpIAdd %uint %150 %uint_1 OpStore %c %151 OpBranch %102 %103 = OpLabel OpBranch %94 %94 = OpLabel %152 = OpLoad %uint %r %153 = OpIAdd %uint %152 %uint_1 OpStore %r %153 OpBranch %92 %93 = OpLabel OpControlBarrier %uint_2 %uint_2 %uint_264 OpStore %r_0 %uint_0 OpBranch %156 %156 = OpLabel OpLoopMerge %157 %158 None OpBranch %159 %159 = OpLabel %161 = OpLoad %uint %r_0 %162 = OpULessThan %bool %161 %uint_4 %160 = OpLogicalNot %bool %162 OpSelectionMerge %163 None OpBranchConditional %160 %164 %163 %164 = OpLabel OpBranch %157 %163 = OpLabel OpStore %c_0 %uint_0 OpBranch %166 %166 = OpLabel OpLoopMerge %167 %168 None OpBranch %169 %169 = OpLabel %171 = OpLoad %uint %c_0 %172 = OpULessThan %bool %171 %uint_4 %170 = OpLogicalNot %bool %172 OpSelectionMerge %173 None OpBranchConditional %170 %174 %173 %174 = OpLabel OpBranch %167 %173 = OpLabel %176 = OpLoad %uint %c_0 %175 = OpBitcast %int %176 %178 = OpLoad %uint %r_0 %177 = OpBitcast %int %178 %179 = OpCompositeConstruct %v2int %175 %177 %180 = OpIAdd %v2int %90 %179 OpStore %writeIndex %180 %182 = OpAccessChain %_ptr_Uniform_uint %flip %uint_0 %183 = OpLoad %uint %182 %184 = OpINotEqual %bool %183 %uint_0 OpSelectionMerge %185 None OpBranchConditional %184 %186 %185 %186 = OpLabel %187 = OpLoad %v2int %writeIndex %188 = OpVectorShuffle %v2int %187 %187 1 0 OpStore %writeIndex %188 OpBranch %185 %185 = OpLabel %189 = OpAccessChain %_ptr_Input_uint %tint_symbol_1 %uint_0 %190 = OpLoad %uint %189 %191 = OpIMul %uint %uint_4 %190 %192 = OpLoad %uint %c_0 %193 = OpIAdd %uint %191 %192 %194 = OpUGreaterThanEqual %bool %193 %69 OpSelectionMerge %195 None OpBranchConditional %194 %196 %195 %196 = OpLabel %197 = OpISub %uint %uint_256 %69 %198 = OpULessThan %bool %193 %197 OpBranch %195 %195 = OpLabel %199 = OpPhi %bool %194 %185 %198 %196 OpSelectionMerge %200 None OpBranchConditional %199 %201 %200 %201 = OpLabel %203 = OpLoad %v2int %writeIndex %204 = OpSLessThan %v2bool %203 %70 %202 = OpAll %bool %204 OpBranch %200 %200 = OpLabel %206 = OpPhi %bool %199 %195 %202 %201 OpSelectionMerge %207 None OpBranchConditional %206 %208 %207 %208 = OpLabel OpStore %acc %209 OpStore %f %uint_0 OpBranch %213 %213 = OpLabel OpLoopMerge %214 %215 None OpBranch %216 %216 = OpLabel %218 = OpLoad %uint %f %219 = OpAccessChain %_ptr_Uniform_uint %params %uint_0 %220 = OpLoad %uint %219 %221 = OpULessThan %bool %218 %220 %217 = OpLogicalNot %bool %221 OpSelectionMerge %222 None OpBranchConditional %217 %223 %222 %223 = OpLabel OpBranch %214 %222 = OpLabel %224 = OpLoad %uint %f %225 = OpIAdd %uint %193 %224 %226 = OpISub %uint %225 %69 OpStore %i %226 %228 = OpLoad %v3float %acc %231 = OpAccessChain %_ptr_Uniform_uint %params %uint_0 %232 = OpLoad %uint %231 %230 = OpConvertUToF %float %232 %233 = OpFDiv %float %float_1 %230 %234 = OpLoad %uint %r_0 %235 = OpLoad %uint %i %236 = OpAccessChain %_ptr_Workgroup_v3float %tile %234 %235 %237 = OpLoad %v3float %236 %238 = OpVectorTimesScalar %v3float %237 %233 %239 = OpFAdd %v3float %228 %238 OpStore %acc %239 OpBranch %215 %215 = OpLabel %240 = OpLoad %uint %f %241 = OpIAdd %uint %240 %uint_1 OpStore %f %241 OpBranch %213 %214 = OpLabel %243 = OpLoad %14 %outputTex %244 = OpLoad %v2int %writeIndex %245 = OpLoad %v3float %acc %246 = OpCompositeExtract %float %245 0 %247 = OpCompositeExtract %float %245 1 %248 = OpCompositeExtract %float %245 2 %249 = OpCompositeConstruct %v4float %246 %247 %248 %float_1 OpImageWrite %243 %244 %249 OpBranch %207 %207 = OpLabel OpBranch %168 %168 = OpLabel %250 = OpLoad %uint %c_0 %251 = OpIAdd %uint %250 %uint_1 OpStore %c_0 %251 OpBranch %166 %167 = OpLabel OpBranch %158 %158 = OpLabel %252 = OpLoad %uint %r_0 %253 = OpIAdd %uint %252 %uint_1 OpStore %r_0 %253 OpBranch %156 %157 = OpLabel OpReturn OpFunctionEnd