blob: 9408cfaeed62f5970a2ffd597db0356dcdf095d6 [file] [log] [blame]
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %gl_FragCoord %_GLF_color
OpExecutionMode %main OriginUpperLeft
OpSource ESSL 320
OpName %main "main"
OpName %merge_i1_i1_i1_ "merge(i1;i1;i1;"
OpName %from "from"
OpName %mid "mid"
OpName %to "to"
OpName %func_i1_i1_ "func(i1;i1;"
OpName %m "m"
OpName %high "high"
OpName %mergeSort_ "mergeSort("
OpName %k "k"
OpName %i "i"
OpName %j "j"
OpName %data "data"
OpName %temp "temp"
OpName %i_0 "i"
OpName %x "x"
OpName %gl_FragCoord "gl_FragCoord"
OpName %low "low"
OpName %high_0 "high"
OpName %m_0 "m"
OpName %i_1 "i"
OpName %from_0 "from"
OpName %mid_0 "mid"
OpName %to_0 "to"
OpName %param "param"
OpName %param_0 "param"
OpName %param_1 "param"
OpName %param_2 "param"
OpName %param_3 "param"
OpName %i_2 "i"
OpName %buf0 "buf0"
OpMemberName %buf0 0 "injectionSwitch"
OpName %_ ""
OpName %j_0 "j"
OpName %grey "grey"
OpName %_GLF_color "_GLF_color"
OpDecorate %gl_FragCoord BuiltIn FragCoord
OpMemberDecorate %buf0 0 Offset 0
OpDecorate %buf0 Block
OpDecorate %_ DescriptorSet 0
OpDecorate %_ Binding 0
OpDecorate %_GLF_color Location 0
%void = OpTypeVoid
%38 = OpTypeFunction %void
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%41 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
%42 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
%int_1 = OpConstant %int 1
%bool = OpTypeBool
%uint = OpTypeInt 32 0
%uint_10 = OpConstant %uint 10
%_arr_int_uint_10 = OpTypeArray %int %uint_10
%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
%data = OpVariable %_ptr_Private__arr_int_uint_10 Private
%_ptr_Private_int = OpTypePointer Private %int
%temp = OpVariable %_ptr_Private__arr_int_uint_10 Private
%int_10 = OpConstant %int 10
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Input_v4float = OpTypePointer Input %v4float
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
%uint_0 = OpConstant %uint 0
%_ptr_Input_float = OpTypePointer Input %float
%float_0 = OpConstant %float 0
%false = OpConstantFalse %bool
%int_0 = OpConstant %int 0
%int_4 = OpConstant %int 4
%int_2 = OpConstant %int 2
%int_9 = OpConstant %int 9
%v2float = OpTypeVector %float 2
%buf0 = OpTypeStruct %v2float
%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
%_ = OpVariable %_ptr_Uniform_buf0 Uniform
%_ptr_Uniform_float = OpTypePointer Uniform %float
%int_3 = OpConstant %int 3
%int_n1 = OpConstant %int -1
%int_n2 = OpConstant %int -2
%int_n3 = OpConstant %int -3
%int_n4 = OpConstant %int -4
%int_n5 = OpConstant %int -5
%uint_1 = OpConstant %uint 1
%int_30 = OpConstant %int 30
%_ptr_Function_float = OpTypePointer Function %float
%float_0_5 = OpConstant %float 0.5
%float_10 = OpConstant %float 10
%int_60 = OpConstant %int 60
%int_90 = OpConstant %int 90
%int_120 = OpConstant %int 120
%int_150 = OpConstant %int 150
%int_180 = OpConstant %int 180
%int_5 = OpConstant %int 5
%int_210 = OpConstant %int 210
%int_6 = OpConstant %int 6
%int_240 = OpConstant %int 240
%int_7 = OpConstant %int 7
%int_270 = OpConstant %int 270
%int_8 = OpConstant %int 8
%_ptr_Output_v4float = OpTypePointer Output %v4float
%_GLF_color = OpVariable %_ptr_Output_v4float Output
%v3float = OpTypeVector %float 3
%float_1 = OpConstant %float 1
%main = OpFunction %void None %38
%91 = OpLabel
%i_2 = OpVariable %_ptr_Function_int Function
%j_0 = OpVariable %_ptr_Function_int Function
%grey = OpVariable %_ptr_Function_float Function
%92 = OpAccessChain %_ptr_Uniform_float %_ %int_0 %uint_0
%93 = OpLoad %float %92
%94 = OpConvertFToS %int %93
OpStore %i_2 %94
OpBranch %95
%95 = OpLabel
OpLoopMerge %96 %97 None
OpBranch %98
%98 = OpLabel
%99 = OpLoad %int %i_2
OpSelectionMerge %100 None
OpSwitch %99 %100 0 %101 1 %102 2 %103 3 %104 4 %105 5 %106 6 %107 7 %108 8 %109 9 %110
%101 = OpLabel
%111 = OpLoad %int %i_2
%112 = OpAccessChain %_ptr_Private_int %data %111
OpStore %112 %int_4
OpBranch %100
%102 = OpLabel
%113 = OpLoad %int %i_2
%114 = OpAccessChain %_ptr_Private_int %data %113
OpStore %114 %int_3
OpBranch %100
%103 = OpLabel
%115 = OpLoad %int %i_2
%116 = OpAccessChain %_ptr_Private_int %data %115
OpStore %116 %int_2
OpBranch %100
%104 = OpLabel
%117 = OpLoad %int %i_2
%118 = OpAccessChain %_ptr_Private_int %data %117
OpStore %118 %int_1
OpBranch %100
%105 = OpLabel
%119 = OpLoad %int %i_2
%120 = OpAccessChain %_ptr_Private_int %data %119
OpStore %120 %int_0
OpBranch %100
%106 = OpLabel
%121 = OpLoad %int %i_2
%122 = OpAccessChain %_ptr_Private_int %data %121
OpStore %122 %int_n1
OpBranch %100
%107 = OpLabel
%123 = OpLoad %int %i_2
%124 = OpAccessChain %_ptr_Private_int %data %123
OpStore %124 %int_n2
OpBranch %100
%108 = OpLabel
%125 = OpLoad %int %i_2
%126 = OpAccessChain %_ptr_Private_int %data %125
OpStore %126 %int_n3
OpBranch %100
%109 = OpLabel
%127 = OpLoad %int %i_2
%128 = OpAccessChain %_ptr_Private_int %data %127
OpStore %128 %int_n4
OpBranch %100
%110 = OpLabel
%129 = OpLoad %int %i_2
%130 = OpAccessChain %_ptr_Private_int %data %129
OpStore %130 %int_n5
OpBranch %100
%100 = OpLabel
%131 = OpLoad %int %i_2
%132 = OpIAdd %int %131 %int_1
OpStore %i_2 %132
OpBranch %97
%97 = OpLabel
%133 = OpLoad %int %i_2
%134 = OpSLessThan %bool %133 %int_10
OpBranchConditional %134 %95 %96
%96 = OpLabel
OpStore %j_0 %int_0
OpBranch %135
%135 = OpLabel
OpLoopMerge %136 %137 None
OpBranch %138
%138 = OpLabel
%139 = OpLoad %int %j_0
%140 = OpSLessThan %bool %139 %int_10
OpBranchConditional %140 %141 %136
%141 = OpLabel
%142 = OpLoad %int %j_0
%143 = OpLoad %int %j_0
%144 = OpAccessChain %_ptr_Private_int %data %143
%145 = OpLoad %int %144
%146 = OpAccessChain %_ptr_Private_int %temp %142
OpStore %146 %145
OpBranch %137
%137 = OpLabel
%147 = OpLoad %int %j_0
%148 = OpIAdd %int %147 %int_1
OpStore %j_0 %148
OpBranch %135
%136 = OpLabel
%149 = OpFunctionCall %void %mergeSort_
%150 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%151 = OpLoad %float %150
%152 = OpConvertFToS %int %151
%153 = OpSLessThan %bool %152 %int_30
OpSelectionMerge %154 None
OpBranchConditional %153 %155 %156
%155 = OpLabel
%157 = OpAccessChain %_ptr_Private_int %data %int_0
%158 = OpLoad %int %157
%159 = OpConvertSToF %float %158
%160 = OpFDiv %float %159 %float_10
%161 = OpFAdd %float %float_0_5 %160
OpStore %grey %161
OpBranch %154
%156 = OpLabel
%162 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%163 = OpLoad %float %162
%164 = OpConvertFToS %int %163
%165 = OpSLessThan %bool %164 %int_60
OpSelectionMerge %166 None
OpBranchConditional %165 %167 %168
%167 = OpLabel
%169 = OpAccessChain %_ptr_Private_int %data %int_1
%170 = OpLoad %int %169
%171 = OpConvertSToF %float %170
%172 = OpFDiv %float %171 %float_10
%173 = OpFAdd %float %float_0_5 %172
OpStore %grey %173
OpBranch %166
%168 = OpLabel
%174 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%175 = OpLoad %float %174
%176 = OpConvertFToS %int %175
%177 = OpSLessThan %bool %176 %int_90
OpSelectionMerge %178 None
OpBranchConditional %177 %179 %180
%179 = OpLabel
%181 = OpAccessChain %_ptr_Private_int %data %int_2
%182 = OpLoad %int %181
%183 = OpConvertSToF %float %182
%184 = OpFDiv %float %183 %float_10
%185 = OpFAdd %float %float_0_5 %184
OpStore %grey %185
OpBranch %178
%180 = OpLabel
%186 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%187 = OpLoad %float %186
%188 = OpConvertFToS %int %187
%189 = OpSLessThan %bool %188 %int_120
OpSelectionMerge %190 None
OpBranchConditional %189 %191 %192
%191 = OpLabel
%193 = OpAccessChain %_ptr_Private_int %data %int_3
%194 = OpLoad %int %193
%195 = OpConvertSToF %float %194
%196 = OpFDiv %float %195 %float_10
%197 = OpFAdd %float %float_0_5 %196
OpStore %grey %197
OpBranch %190
%192 = OpLabel
%198 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%199 = OpLoad %float %198
%200 = OpConvertFToS %int %199
%201 = OpSLessThan %bool %200 %int_150
OpSelectionMerge %202 None
OpBranchConditional %201 %203 %204
%203 = OpLabel
OpKill
%204 = OpLabel
%205 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%206 = OpLoad %float %205
%207 = OpConvertFToS %int %206
%208 = OpSLessThan %bool %207 %int_180
OpSelectionMerge %209 None
OpBranchConditional %208 %210 %211
%210 = OpLabel
%212 = OpAccessChain %_ptr_Private_int %data %int_5
%213 = OpLoad %int %212
%214 = OpConvertSToF %float %213
%215 = OpFDiv %float %214 %float_10
%216 = OpFAdd %float %float_0_5 %215
OpStore %grey %216
OpBranch %209
%211 = OpLabel
%217 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%218 = OpLoad %float %217
%219 = OpConvertFToS %int %218
%220 = OpSLessThan %bool %219 %int_210
OpSelectionMerge %221 None
OpBranchConditional %220 %222 %223
%222 = OpLabel
%224 = OpAccessChain %_ptr_Private_int %data %int_6
%225 = OpLoad %int %224
%226 = OpConvertSToF %float %225
%227 = OpFDiv %float %226 %float_10
%228 = OpFAdd %float %float_0_5 %227
OpStore %grey %228
OpBranch %221
%223 = OpLabel
%229 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%230 = OpLoad %float %229
%231 = OpConvertFToS %int %230
%232 = OpSLessThan %bool %231 %int_240
OpSelectionMerge %233 None
OpBranchConditional %232 %234 %235
%234 = OpLabel
%236 = OpAccessChain %_ptr_Private_int %data %int_7
%237 = OpLoad %int %236
%238 = OpConvertSToF %float %237
%239 = OpFDiv %float %238 %float_10
%240 = OpFAdd %float %float_0_5 %239
OpStore %grey %240
OpBranch %233
%235 = OpLabel
%241 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
%242 = OpLoad %float %241
%243 = OpConvertFToS %int %242
%244 = OpSLessThan %bool %243 %int_270
OpSelectionMerge %245 None
OpBranchConditional %244 %246 %247
%246 = OpLabel
%248 = OpAccessChain %_ptr_Private_int %data %int_8
%249 = OpLoad %int %248
%250 = OpConvertSToF %float %249
%251 = OpFDiv %float %250 %float_10
%252 = OpFAdd %float %float_0_5 %251
OpStore %grey %252
OpBranch %245
%247 = OpLabel
OpKill
%245 = OpLabel
OpBranch %233
%233 = OpLabel
OpBranch %221
%221 = OpLabel
OpBranch %209
%209 = OpLabel
OpBranch %202
%202 = OpLabel
OpBranch %190
%190 = OpLabel
OpBranch %178
%178 = OpLabel
OpBranch %166
%166 = OpLabel
OpBranch %154
%154 = OpLabel
%253 = OpLoad %float %grey
%254 = OpCompositeConstruct %v3float %253 %253 %253
%255 = OpCompositeExtract %float %254 0
%256 = OpCompositeExtract %float %254 1
%257 = OpCompositeExtract %float %254 2
%258 = OpCompositeConstruct %v4float %255 %256 %257 %float_1
OpStore %_GLF_color %258
OpReturn
OpFunctionEnd
%merge_i1_i1_i1_ = OpFunction %void None %41
%from = OpFunctionParameter %_ptr_Function_int
%mid = OpFunctionParameter %_ptr_Function_int
%to = OpFunctionParameter %_ptr_Function_int
%259 = OpLabel
%k = OpVariable %_ptr_Function_int Function
%i = OpVariable %_ptr_Function_int Function
%j = OpVariable %_ptr_Function_int Function
%i_0 = OpVariable %_ptr_Function_int Function
%260 = OpLoad %int %from
OpStore %k %260
%261 = OpLoad %int %from
OpStore %i %261
%262 = OpLoad %int %mid
%263 = OpIAdd %int %262 %int_1
OpStore %j %263
OpBranch %264
%264 = OpLabel
OpLoopMerge %265 %266 None
OpBranch %267
%267 = OpLabel
%268 = OpLoad %int %i
%269 = OpLoad %int %mid
%270 = OpSLessThanEqual %bool %268 %269
%271 = OpLoad %int %j
%272 = OpLoad %int %to
%273 = OpSLessThanEqual %bool %271 %272
%274 = OpLogicalAnd %bool %270 %273
OpBranchConditional %274 %275 %265
%275 = OpLabel
%276 = OpLoad %int %i
%277 = OpAccessChain %_ptr_Private_int %data %276
%278 = OpLoad %int %277
%279 = OpLoad %int %j
%280 = OpAccessChain %_ptr_Private_int %data %279
%281 = OpLoad %int %280
%282 = OpSLessThan %bool %278 %281
OpSelectionMerge %283 None
OpBranchConditional %282 %284 %285
%284 = OpLabel
%286 = OpLoad %int %k
%287 = OpIAdd %int %286 %int_1
OpStore %k %287
%288 = OpLoad %int %i
%289 = OpIAdd %int %288 %int_1
OpStore %i %289
%290 = OpAccessChain %_ptr_Private_int %data %288
%291 = OpLoad %int %290
%292 = OpAccessChain %_ptr_Private_int %temp %286
OpStore %292 %291
OpBranch %283
%285 = OpLabel
%293 = OpLoad %int %k
%294 = OpIAdd %int %293 %int_1
OpStore %k %294
%295 = OpLoad %int %j
%296 = OpIAdd %int %295 %int_1
OpStore %j %296
%297 = OpAccessChain %_ptr_Private_int %data %295
%298 = OpLoad %int %297
%299 = OpAccessChain %_ptr_Private_int %temp %293
OpStore %299 %298
OpBranch %283
%283 = OpLabel
OpBranch %266
%266 = OpLabel
OpBranch %264
%265 = OpLabel
OpBranch %300
%300 = OpLabel
OpLoopMerge %301 %302 None
OpBranch %303
%303 = OpLabel
%304 = OpLoad %int %i
%305 = OpSLessThan %bool %304 %int_10
%306 = OpLoad %int %i
%307 = OpLoad %int %mid
%308 = OpSLessThanEqual %bool %306 %307
%309 = OpLogicalAnd %bool %305 %308
OpBranchConditional %309 %310 %301
%310 = OpLabel
%311 = OpLoad %int %k
%312 = OpIAdd %int %311 %int_1
OpStore %k %312
%313 = OpLoad %int %i
%314 = OpIAdd %int %313 %int_1
OpStore %i %314
%315 = OpAccessChain %_ptr_Private_int %data %313
%316 = OpLoad %int %315
%317 = OpAccessChain %_ptr_Private_int %temp %311
OpStore %317 %316
OpBranch %302
%302 = OpLabel
OpBranch %300
%301 = OpLabel
%318 = OpLoad %int %from
OpStore %i_0 %318
OpBranch %319
%319 = OpLabel
OpLoopMerge %320 %321 None
OpBranch %322
%322 = OpLabel
%323 = OpLoad %int %i_0
%324 = OpLoad %int %to
%325 = OpSLessThanEqual %bool %323 %324
OpBranchConditional %325 %326 %320
%326 = OpLabel
%327 = OpLoad %int %i_0
%328 = OpLoad %int %i_0
%329 = OpAccessChain %_ptr_Private_int %temp %328
%330 = OpLoad %int %329
%331 = OpAccessChain %_ptr_Private_int %data %327
OpStore %331 %330
OpBranch %321
%321 = OpLabel
%332 = OpLoad %int %i_0
%333 = OpIAdd %int %332 %int_1
OpStore %i_0 %333
OpBranch %319
%320 = OpLabel
OpReturn
OpFunctionEnd
%func_i1_i1_ = OpFunction %int None %42
%m = OpFunctionParameter %_ptr_Function_int
%high = OpFunctionParameter %_ptr_Function_int
%334 = OpLabel
%x = OpVariable %_ptr_Function_int Function
%335 = OpVariable %_ptr_Function_int Function
%336 = OpVariable %_ptr_Function_int Function
%337 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
%338 = OpLoad %float %337
%339 = OpFOrdGreaterThanEqual %bool %338 %float_0
OpSelectionMerge %340 None
OpBranchConditional %339 %341 %342
%341 = OpLabel
OpSelectionMerge %343 None
OpBranchConditional %false %344 %345
%344 = OpLabel
%346 = OpLoad %int %high
%347 = OpShiftLeftLogical %int %346 %int_0
OpStore %336 %347
OpBranch %343
%345 = OpLabel
OpStore %336 %int_4
OpBranch %343
%343 = OpLabel
%348 = OpLoad %int %336
%349 = OpShiftLeftLogical %int %int_1 %348
OpStore %335 %349
OpBranch %340
%342 = OpLabel
OpStore %335 %int_1
OpBranch %340
%340 = OpLabel
%350 = OpLoad %int %335
OpStore %x %350
%351 = OpLoad %int %x
%352 = OpShiftRightArithmetic %int %351 %int_4
OpStore %x %352
%353 = OpLoad %int %m
%354 = OpIMul %int %int_2 %353
%355 = OpLoad %int %m
%356 = OpIMul %int %int_2 %355
%357 = OpLoad %int %m
%358 = OpIMul %int %int_2 %357
%359 = OpLoad %int %x
%360 = OpSDiv %int %358 %359
%361 = OpExtInst %int %1 SClamp %354 %356 %360
OpReturnValue %361
OpFunctionEnd
%mergeSort_ = OpFunction %void None %38
%362 = OpLabel
%low = OpVariable %_ptr_Function_int Function
%high_0 = OpVariable %_ptr_Function_int Function
%m_0 = OpVariable %_ptr_Function_int Function
%i_1 = OpVariable %_ptr_Function_int Function
%from_0 = OpVariable %_ptr_Function_int Function
%mid_0 = OpVariable %_ptr_Function_int Function
%to_0 = OpVariable %_ptr_Function_int Function
%param = OpVariable %_ptr_Function_int Function
%param_0 = OpVariable %_ptr_Function_int Function
%param_1 = OpVariable %_ptr_Function_int Function
%param_2 = OpVariable %_ptr_Function_int Function
%param_3 = OpVariable %_ptr_Function_int Function
OpStore %low %int_0
OpStore %high_0 %int_9
OpStore %m_0 %int_1
OpBranch %363
%363 = OpLabel
OpLoopMerge %364 %365 None
OpBranch %366
%366 = OpLabel
%367 = OpLoad %int %m_0
%368 = OpLoad %int %high_0
%369 = OpSLessThanEqual %bool %367 %368
OpBranchConditional %369 %370 %364
%370 = OpLabel
%371 = OpLoad %int %low
OpStore %i_1 %371
OpBranch %372
%372 = OpLabel
OpLoopMerge %373 %374 None
OpBranch %375
%375 = OpLabel
%376 = OpLoad %int %i_1
%377 = OpLoad %int %high_0
%378 = OpSLessThan %bool %376 %377
OpBranchConditional %378 %379 %373
%379 = OpLabel
%380 = OpLoad %int %i_1
OpStore %from_0 %380
%381 = OpLoad %int %i_1
%382 = OpLoad %int %m_0
%383 = OpIAdd %int %381 %382
%384 = OpISub %int %383 %int_1
OpStore %mid_0 %384
%385 = OpLoad %int %i_1
%386 = OpLoad %int %m_0
%387 = OpIMul %int %int_2 %386
%388 = OpIAdd %int %385 %387
%389 = OpISub %int %388 %int_1
%390 = OpLoad %int %high_0
%391 = OpExtInst %int %1 SMin %389 %390
OpStore %to_0 %391
%392 = OpLoad %int %from_0
OpStore %param %392
%393 = OpLoad %int %mid_0
OpStore %param_0 %393
%394 = OpLoad %int %to_0
OpStore %param_1 %394
%395 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_0 %param_1
OpBranch %374
%374 = OpLabel
%396 = OpLoad %int %m_0
OpStore %param_2 %396
%397 = OpLoad %int %high_0
OpStore %param_3 %397
%398 = OpFunctionCall %int %func_i1_i1_ %param_2 %param_3
%399 = OpLoad %int %i_1
%400 = OpIAdd %int %399 %398
OpStore %i_1 %400
OpBranch %372
%373 = OpLabel
OpBranch %365
%365 = OpLabel
%401 = OpLoad %int %m_0
%402 = OpIMul %int %int_2 %401
OpStore %m_0 %402
OpBranch %363
%364 = OpLabel
OpReturn
OpFunctionEnd