blob: 29414dce8e0c472c88a24d71db07ee7c2e2154d2 [file] [log] [blame]
; 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