AST: Fix shift conversions, which don't require matching types.
authorJohn Kessenich <cepheus@frii.com>
Fri, 16 Mar 2018 03:07:35 +0000 (21:07 -0600)
committerJohn Kessenich <cepheus@frii.com>
Fri, 16 Mar 2018 03:11:36 +0000 (21:11 -0600)
The base and shift amount need to be integers, but not of the same type.
This fixes #1296 and replaces #1297.

Test/baseResults/spv.int16.frag.out
Test/baseResults/spv.int32.frag.out
Test/baseResults/spv.int64.frag.out
Test/baseResults/spv.rankShift.comp.out [new file with mode: 0755]
Test/baseResults/spv.vulkan110.int16.frag.out
Test/spv.int64.frag
Test/spv.rankShift.comp [new file with mode: 0644]
glslang/MachineIndependent/Intermediate.cpp
gtests/Spv.FromFile.cpp

index 22f5138..8355569 100644 (file)
@@ -1,7 +1,7 @@
 spv.int16.frag
 // Module Version 10000
 // Generated by (magic number): 80006
-// Id's are bound by 525
+// Id's are bound by 523
 
                               Capability Shader
                               Capability Float16
@@ -55,48 +55,48 @@ spv.int16.frag
                               Name 220  "i"
                               Name 227  "uv"
                               Name 243  "i64"
-                              Name 283  "b"
-                              Name 345  "i16v"
-                              Name 348  "i16"
-                              Name 358  "u16v"
-                              Name 360  "u16"
-                              Name 430  "i32"
-                              Name 433  "i64"
-                              Name 436  "i16v4"
-                              Name 439  "u32"
-                              Name 440  "u16v2"
-                              Name 444  "u64"
-                              Name 447  "u16v4"
-                              Name 459  "bv"
-                              Name 520  "Block"
-                              MemberName 520(Block) 0  "i16"
-                              MemberName 520(Block) 1  "i16v2"
-                              MemberName 520(Block) 2  "i16v3"
-                              MemberName 520(Block) 3  "i16v4"
-                              MemberName 520(Block) 4  "u16"
-                              MemberName 520(Block) 5  "u16v2"
-                              MemberName 520(Block) 6  "u16v3"
-                              MemberName 520(Block) 7  "u16v4"
-                              Name 522  "block"
-                              Name 523  "si16"
-                              Name 524  "su16"
+                              Name 281  "b"
+                              Name 343  "i16v"
+                              Name 346  "i16"
+                              Name 356  "u16v"
+                              Name 358  "u16"
+                              Name 428  "i32"
+                              Name 431  "i64"
+                              Name 434  "i16v4"
+                              Name 437  "u32"
+                              Name 438  "u16v2"
+                              Name 442  "u64"
+                              Name 445  "u16v4"
+                              Name 457  "bv"
+                              Name 518  "Block"
+                              MemberName 518(Block) 0  "i16"
+                              MemberName 518(Block) 1  "i16v2"
+                              MemberName 518(Block) 2  "i16v3"
+                              MemberName 518(Block) 3  "i16v4"
+                              MemberName 518(Block) 4  "u16"
+                              MemberName 518(Block) 5  "u16v2"
+                              MemberName 518(Block) 6  "u16v3"
+                              MemberName 518(Block) 7  "u16v4"
+                              Name 520  "block"
+                              Name 521  "si16"
+                              Name 522  "su16"
                               MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 24(Uniforms) Block
                               Decorate 26 DescriptorSet 0
                               Decorate 26 Binding 0
-                              MemberDecorate 520(Block) 0 Offset 0
-                              MemberDecorate 520(Block) 1 Offset 4
-                              MemberDecorate 520(Block) 2 Offset 8
-                              MemberDecorate 520(Block) 3 Offset 16
-                              MemberDecorate 520(Block) 4 Offset 24
-                              MemberDecorate 520(Block) 5 Offset 28
-                              MemberDecorate 520(Block) 6 Offset 32
-                              MemberDecorate 520(Block) 7 Offset 40
-                              Decorate 520(Block) Block
-                              Decorate 522(block) DescriptorSet 0
-                              Decorate 522(block) Binding 1
-                              Decorate 523(si16) SpecId 100
-                              Decorate 524(su16) SpecId 101
+                              MemberDecorate 518(Block) 0 Offset 0
+                              MemberDecorate 518(Block) 1 Offset 4
+                              MemberDecorate 518(Block) 2 Offset 8
+                              MemberDecorate 518(Block) 3 Offset 16
+                              MemberDecorate 518(Block) 4 Offset 24
+                              MemberDecorate 518(Block) 5 Offset 28
+                              MemberDecorate 518(Block) 6 Offset 32
+                              MemberDecorate 518(Block) 7 Offset 40
+                              Decorate 518(Block) Block
+                              Decorate 520(block) DescriptorSet 0
+                              Decorate 520(block) Binding 1
+                              Decorate 521(si16) SpecId 100
+                              Decorate 522(su16) SpecId 101
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 16 1
@@ -171,28 +171,28 @@ spv.int16.frag
              242:             TypePointer Function 71(int)
              264:     17(int) Constant 1
              270:     17(int) Constant 2
-             275:             TypeVector 27(int) 3
-             282:             TypePointer Function 173(bool)
-             284:     17(int) Constant 0
-             298:             TypePointer Function 17(int)
-             356:   52(ivec2) ConstantComposite 21 21
-             365:  193(ivec3) ConstantComposite 184 184 184
-             407:   173(bool) ConstantTrue
-             414:   173(bool) ConstantFalse
-             415:  174(bvec2) ConstantComposite 414 414
-             427:             TypeVector 173(bool) 3
-             428:  427(bvec3) ConstantComposite 414 414 414
-             434:             TypeVector 14(int) 4
-             435:             TypePointer Function 434(ivec4)
-             443:             TypePointer Function 77(int)
-             445:             TypeVector 36(int) 4
-             446:             TypePointer Function 445(ivec4)
-             458:             TypePointer Function 427(bvec3)
-      520(Block):             TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4)
-             521:             TypePointer Uniform 520(Block)
-      522(block):    521(ptr) Variable Uniform
-       523(si16):     14(int) SpecConstant 4294967286
-       524(su16):     36(int) SpecConstant 20
+             276:             TypeVector 27(int) 3
+             280:             TypePointer Function 173(bool)
+             282:     17(int) Constant 0
+             296:             TypePointer Function 17(int)
+             354:   52(ivec2) ConstantComposite 21 21
+             363:  193(ivec3) ConstantComposite 184 184 184
+             405:   173(bool) ConstantTrue
+             412:   173(bool) ConstantFalse
+             413:  174(bvec2) ConstantComposite 412 412
+             425:             TypeVector 173(bool) 3
+             426:  425(bvec3) ConstantComposite 412 412 412
+             432:             TypeVector 14(int) 4
+             433:             TypePointer Function 432(ivec4)
+             441:             TypePointer Function 77(int)
+             443:             TypeVector 36(int) 4
+             444:             TypePointer Function 443(ivec4)
+             456:             TypePointer Function 425(bvec3)
+      518(Block):             TypeStruct 14(int) 52(ivec2) 197(ivec3) 432(ivec4) 36(int) 57(ivec2) 193(ivec3) 443(ivec4)
+             519:             TypePointer Uniform 518(Block)
+      520(block):    519(ptr) Variable Uniform
+       521(si16):     14(int) SpecConstant 4294967286
+       522(su16):     36(int) SpecConstant 20
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -371,7 +371,7 @@ spv.int16.frag
           220(i):    219(ptr) Variable Function
          227(uv):    226(ptr) Variable Function
         243(i64):    242(ptr) Variable Function
-          283(b):    282(ptr) Variable Function
+          281(b):    280(ptr) Variable Function
              196:  193(ivec3) Load 195(u16v)
              198:  197(ivec3) CompositeConstruct 179 179 179
              199:  193(ivec3) IAdd 196 198
@@ -460,287 +460,285 @@ spv.int16.frag
              273:     14(int) ShiftLeftLogical 269 272
                               Store 200(i16) 273
              274:  193(ivec3) Load 195(u16v)
-             276:  275(ivec3) UConvert 274
-             277:  275(ivec3) Bitcast 276
-             278:     27(int) Load 220(i)
-             279:  275(ivec3) CompositeConstruct 278 278 278
-             280:  275(ivec3) ShiftLeftLogical 277 279
-             281:  225(ivec3) Bitcast 280
-                              Store 227(uv) 281
-             285:     37(ptr) AccessChain 195(u16v) 284
-             286:     36(int) Load 285
-             287:     14(int) Load 200(i16)
-             288:     36(int) Bitcast 287
-             289:   173(bool) INotEqual 286 288
-                              Store 283(b) 289
-             290:     14(int) Load 200(i16)
-             291:     36(int) Bitcast 290
-             292:     37(ptr) AccessChain 195(u16v) 284
-             293:     36(int) Load 292
-             294:   173(bool) IEqual 291 293
-                              Store 283(b) 294
-             295:     37(ptr) AccessChain 195(u16v) 284
-             296:     36(int) Load 295
-             297:     17(int) UConvert 296
-             299:    298(ptr) AccessChain 227(uv) 264
-             300:     17(int) Load 299
-             301:   173(bool) UGreaterThan 297 300
-                              Store 283(b) 301
-             302:     14(int) Load 200(i16)
-             303:     27(int) SConvert 302
-             304:     27(int) Load 220(i)
-             305:   173(bool) SLessThan 303 304
-                              Store 283(b) 305
-             306:     37(ptr) AccessChain 195(u16v) 264
-             307:     36(int) Load 306
-             308:     17(int) UConvert 307
-             309:    298(ptr) AccessChain 227(uv) 284
-             310:     17(int) Load 309
-             311:   173(bool) UGreaterThanEqual 308 310
-                              Store 283(b) 311
-             312:     14(int) Load 200(i16)
-             313:     27(int) SConvert 312
-             314:     27(int) Load 220(i)
-             315:   173(bool) SLessThanEqual 313 314
-                              Store 283(b) 315
-             316:     14(int) Load 200(i16)
-             317:     27(int) SConvert 316
-             318:     17(int) Bitcast 317
-             319:  225(ivec3) Load 227(uv)
-             320:  225(ivec3) CompositeConstruct 318 318 318
-             321:  225(ivec3) BitwiseOr 319 320
-                              Store 227(uv) 321
-             322:     14(int) Load 200(i16)
-             323:     27(int) SConvert 322
-             324:     27(int) Load 220(i)
-             325:     27(int) BitwiseOr 323 324
-                              Store 220(i) 325
-             326:     14(int) Load 200(i16)
-             327:     71(int) SConvert 326
-             328:     71(int) Load 243(i64)
-             329:     71(int) BitwiseAnd 328 327
-                              Store 243(i64) 329
-             330:  193(ivec3) Load 195(u16v)
-             331:  225(ivec3) UConvert 330
-             332:  225(ivec3) Load 227(uv)
-             333:  225(ivec3) BitwiseAnd 331 332
-                              Store 227(uv) 333
-             334:     14(int) Load 200(i16)
-             335:     27(int) SConvert 334
-             336:     17(int) Bitcast 335
-             337:  225(ivec3) Load 227(uv)
-             338:  225(ivec3) CompositeConstruct 336 336 336
-             339:  225(ivec3) BitwiseXor 337 338
-                              Store 227(uv) 339
-             340:  193(ivec3) Load 195(u16v)
-             341:     14(int) Load 200(i16)
-             342:     36(int) Bitcast 341
-             343:  193(ivec3) CompositeConstruct 342 342 342
-             344:  193(ivec3) BitwiseXor 340 343
-                              Store 195(u16v) 344
+             275:     27(int) Load 220(i)
+             277:  276(ivec3) CompositeConstruct 275 275 275
+             278:  193(ivec3) ShiftLeftLogical 274 277
+             279:  225(ivec3) UConvert 278
+                              Store 227(uv) 279
+             283:     37(ptr) AccessChain 195(u16v) 282
+             284:     36(int) Load 283
+             285:     14(int) Load 200(i16)
+             286:     36(int) Bitcast 285
+             287:   173(bool) INotEqual 284 286
+                              Store 281(b) 287
+             288:     14(int) Load 200(i16)
+             289:     36(int) Bitcast 288
+             290:     37(ptr) AccessChain 195(u16v) 282
+             291:     36(int) Load 290
+             292:   173(bool) IEqual 289 291
+                              Store 281(b) 292
+             293:     37(ptr) AccessChain 195(u16v) 282
+             294:     36(int) Load 293
+             295:     17(int) UConvert 294
+             297:    296(ptr) AccessChain 227(uv) 264
+             298:     17(int) Load 297
+             299:   173(bool) UGreaterThan 295 298
+                              Store 281(b) 299
+             300:     14(int) Load 200(i16)
+             301:     27(int) SConvert 300
+             302:     27(int) Load 220(i)
+             303:   173(bool) SLessThan 301 302
+                              Store 281(b) 303
+             304:     37(ptr) AccessChain 195(u16v) 264
+             305:     36(int) Load 304
+             306:     17(int) UConvert 305
+             307:    296(ptr) AccessChain 227(uv) 282
+             308:     17(int) Load 307
+             309:   173(bool) UGreaterThanEqual 306 308
+                              Store 281(b) 309
+             310:     14(int) Load 200(i16)
+             311:     27(int) SConvert 310
+             312:     27(int) Load 220(i)
+             313:   173(bool) SLessThanEqual 311 312
+                              Store 281(b) 313
+             314:     14(int) Load 200(i16)
+             315:     27(int) SConvert 314
+             316:     17(int) Bitcast 315
+             317:  225(ivec3) Load 227(uv)
+             318:  225(ivec3) CompositeConstruct 316 316 316
+             319:  225(ivec3) BitwiseOr 317 318
+                              Store 227(uv) 319
+             320:     14(int) Load 200(i16)
+             321:     27(int) SConvert 320
+             322:     27(int) Load 220(i)
+             323:     27(int) BitwiseOr 321 322
+                              Store 220(i) 323
+             324:     14(int) Load 200(i16)
+             325:     71(int) SConvert 324
+             326:     71(int) Load 243(i64)
+             327:     71(int) BitwiseAnd 326 325
+                              Store 243(i64) 327
+             328:  193(ivec3) Load 195(u16v)
+             329:  225(ivec3) UConvert 328
+             330:  225(ivec3) Load 227(uv)
+             331:  225(ivec3) BitwiseAnd 329 330
+                              Store 227(uv) 331
+             332:     14(int) Load 200(i16)
+             333:     27(int) SConvert 332
+             334:     17(int) Bitcast 333
+             335:  225(ivec3) Load 227(uv)
+             336:  225(ivec3) CompositeConstruct 334 334 334
+             337:  225(ivec3) BitwiseXor 335 336
+                              Store 227(uv) 337
+             338:  193(ivec3) Load 195(u16v)
+             339:     14(int) Load 200(i16)
+             340:     36(int) Bitcast 339
+             341:  193(ivec3) CompositeConstruct 340 340 340
+             342:  193(ivec3) BitwiseXor 338 341
+                              Store 195(u16v) 342
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       345(i16v):     53(ptr) Variable Function
-        348(i16):     15(ptr) Variable Function
-       358(u16v):    194(ptr) Variable Function
-        360(u16):     37(ptr) Variable Function
-        430(i32):    219(ptr) Variable Function
-        433(i64):    242(ptr) Variable Function
-      436(i16v4):    435(ptr) Variable Function
-        439(u32):    298(ptr) Variable Function
-      440(u16v2):     58(ptr) Variable Function
-        444(u64):    443(ptr) Variable Function
-      447(u16v4):    446(ptr) Variable Function
-         459(bv):    458(ptr) Variable Function
-             346:   52(ivec2) Load 345(i16v)
-             347:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346
-                              Store 345(i16v) 347
-             349:     14(int) Load 348(i16)
-             350:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349
-                              Store 348(i16) 350
-             351:   52(ivec2) Load 345(i16v)
-             352:     14(int) Load 348(i16)
-             353:   52(ivec2) CompositeConstruct 352 352
-             354:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353
-                              Store 345(i16v) 354
-             355:   52(ivec2) Load 345(i16v)
-             357:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356
-                              Store 345(i16v) 357
-             359:  193(ivec3) Load 358(u16v)
-             361:     36(int) Load 360(u16)
-             362:  193(ivec3) CompositeConstruct 361 361 361
-             363:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362
-                              Store 358(u16v) 363
-             364:  193(ivec3) Load 358(u16v)
-             366:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365
-                              Store 358(u16v) 366
-             367:   52(ivec2) Load 345(i16v)
-             368:     14(int) Load 348(i16)
-             369:   52(ivec2) CompositeConstruct 368 368
-             370:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369
-                              Store 345(i16v) 370
-             371:   52(ivec2) Load 345(i16v)
-             372:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356
-                              Store 345(i16v) 372
-             373:  193(ivec3) Load 358(u16v)
-             374:     36(int) Load 360(u16)
-             375:  193(ivec3) CompositeConstruct 374 374 374
-             376:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375
-                              Store 358(u16v) 376
-             377:  193(ivec3) Load 358(u16v)
-             378:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365
-                              Store 358(u16v) 378
-             379:   52(ivec2) Load 345(i16v)
-             380:     14(int) Load 348(i16)
-             381:     14(int) SNegate 380
-             382:     14(int) Load 348(i16)
-             383:   52(ivec2) CompositeConstruct 381 381
-             384:   52(ivec2) CompositeConstruct 382 382
-             385:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384
-                              Store 345(i16v) 385
-             386:   52(ivec2) Load 345(i16v)
-             387:   52(ivec2) Load 345(i16v)
-             388:   52(ivec2) SNegate 387
-             389:   52(ivec2) Load 345(i16v)
-             390:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389
-                              Store 345(i16v) 390
-             391:  193(ivec3) Load 358(u16v)
-             392:     36(int) Load 360(u16)
-             393:     36(int) SNegate 392
-             394:     36(int) Load 360(u16)
-             395:  193(ivec3) CompositeConstruct 393 393 393
-             396:  193(ivec3) CompositeConstruct 394 394 394
-             397:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396
-                              Store 358(u16v) 397
-             398:  193(ivec3) Load 358(u16v)
-             399:  193(ivec3) Load 358(u16v)
-             400:  193(ivec3) SNegate 399
-             401:  193(ivec3) Load 358(u16v)
-             402:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401
-                              Store 358(u16v) 402
-             403:     15(ptr) AccessChain 345(i16v) 284
+       343(i16v):     53(ptr) Variable Function
+        346(i16):     15(ptr) Variable Function
+       356(u16v):    194(ptr) Variable Function
+        358(u16):     37(ptr) Variable Function
+        428(i32):    219(ptr) Variable Function
+        431(i64):    242(ptr) Variable Function
+      434(i16v4):    433(ptr) Variable Function
+        437(u32):    296(ptr) Variable Function
+      438(u16v2):     58(ptr) Variable Function
+        442(u64):    441(ptr) Variable Function
+      445(u16v4):    444(ptr) Variable Function
+         457(bv):    456(ptr) Variable Function
+             344:   52(ivec2) Load 343(i16v)
+             345:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344
+                              Store 343(i16v) 345
+             347:     14(int) Load 346(i16)
+             348:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 347
+                              Store 346(i16) 348
+             349:   52(ivec2) Load 343(i16v)
+             350:     14(int) Load 346(i16)
+             351:   52(ivec2) CompositeConstruct 350 350
+             352:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351
+                              Store 343(i16v) 352
+             353:   52(ivec2) Load 343(i16v)
+             355:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354
+                              Store 343(i16v) 355
+             357:  193(ivec3) Load 356(u16v)
+             359:     36(int) Load 358(u16)
+             360:  193(ivec3) CompositeConstruct 359 359 359
+             361:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360
+                              Store 356(u16v) 361
+             362:  193(ivec3) Load 356(u16v)
+             364:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363
+                              Store 356(u16v) 364
+             365:   52(ivec2) Load 343(i16v)
+             366:     14(int) Load 346(i16)
+             367:   52(ivec2) CompositeConstruct 366 366
+             368:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367
+                              Store 343(i16v) 368
+             369:   52(ivec2) Load 343(i16v)
+             370:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354
+                              Store 343(i16v) 370
+             371:  193(ivec3) Load 356(u16v)
+             372:     36(int) Load 358(u16)
+             373:  193(ivec3) CompositeConstruct 372 372 372
+             374:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373
+                              Store 356(u16v) 374
+             375:  193(ivec3) Load 356(u16v)
+             376:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363
+                              Store 356(u16v) 376
+             377:   52(ivec2) Load 343(i16v)
+             378:     14(int) Load 346(i16)
+             379:     14(int) SNegate 378
+             380:     14(int) Load 346(i16)
+             381:   52(ivec2) CompositeConstruct 379 379
+             382:   52(ivec2) CompositeConstruct 380 380
+             383:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382
+                              Store 343(i16v) 383
+             384:   52(ivec2) Load 343(i16v)
+             385:   52(ivec2) Load 343(i16v)
+             386:   52(ivec2) SNegate 385
+             387:   52(ivec2) Load 343(i16v)
+             388:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387
+                              Store 343(i16v) 388
+             389:  193(ivec3) Load 356(u16v)
+             390:     36(int) Load 358(u16)
+             391:     36(int) SNegate 390
+             392:     36(int) Load 358(u16)
+             393:  193(ivec3) CompositeConstruct 391 391 391
+             394:  193(ivec3) CompositeConstruct 392 392 392
+             395:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394
+                              Store 356(u16v) 395
+             396:  193(ivec3) Load 356(u16v)
+             397:  193(ivec3) Load 356(u16v)
+             398:  193(ivec3) SNegate 397
+             399:  193(ivec3) Load 356(u16v)
+             400:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399
+                              Store 356(u16v) 400
+             401:     15(ptr) AccessChain 343(i16v) 282
+             402:     14(int) Load 401
+             403:     15(ptr) AccessChain 343(i16v) 264
              404:     14(int) Load 403
-             405:     15(ptr) AccessChain 345(i16v) 264
-             406:     14(int) Load 405
-             408:     14(int) Select 407 406 404
-                              Store 348(i16) 408
-             409:     14(int) Load 348(i16)
-             410:   52(ivec2) CompositeConstruct 409 409
-             411:     14(int) Load 348(i16)
-             412:     14(int) SNegate 411
-             413:   52(ivec2) CompositeConstruct 412 412
-             416:   52(ivec2) Select 415 413 410
-                              Store 345(i16v) 416
-             417:     37(ptr) AccessChain 358(u16v) 284
+             406:     14(int) Select 405 404 402
+                              Store 346(i16) 406
+             407:     14(int) Load 346(i16)
+             408:   52(ivec2) CompositeConstruct 407 407
+             409:     14(int) Load 346(i16)
+             410:     14(int) SNegate 409
+             411:   52(ivec2) CompositeConstruct 410 410
+             414:   52(ivec2) Select 413 411 408
+                              Store 343(i16v) 414
+             415:     37(ptr) AccessChain 356(u16v) 282
+             416:     36(int) Load 415
+             417:     37(ptr) AccessChain 356(u16v) 264
              418:     36(int) Load 417
-             419:     37(ptr) AccessChain 358(u16v) 264
-             420:     36(int) Load 419
-             421:     36(int) Select 407 420 418
-                              Store 360(u16) 421
-             422:     36(int) Load 360(u16)
-             423:  193(ivec3) CompositeConstruct 422 422 422
-             424:     36(int) Load 360(u16)
-             425:     36(int) SNegate 424
-             426:  193(ivec3) CompositeConstruct 425 425 425
-             429:  193(ivec3) Select 428 426 423
-                              Store 358(u16v) 429
-             431:   52(ivec2) Load 345(i16v)
-             432:     27(int) Bitcast 431
-                              Store 430(i32) 432
-             437:  434(ivec4) Load 436(i16v4)
-             438:     71(int) Bitcast 437
-                              Store 433(i64) 438
-             441:   57(ivec2) Load 440(u16v2)
-             442:     17(int) Bitcast 441
-                              Store 439(u32) 442
-             448:  445(ivec4) Load 447(u16v4)
-             449:     77(int) Bitcast 448
-                              Store 444(u64) 449
-             450:     27(int) Load 430(i32)
-             451:   52(ivec2) Bitcast 450
-                              Store 345(i16v) 451
-             452:     71(int) Load 433(i64)
-             453:  434(ivec4) Bitcast 452
-                              Store 436(i16v4) 453
-             454:     17(int) Load 439(u32)
-             455:   57(ivec2) Bitcast 454
-                              Store 440(u16v2) 455
-             456:     77(int) Load 444(u64)
-             457:  445(ivec4) Bitcast 456
-                              Store 447(u16v4) 457
-             460:  193(ivec3) Load 358(u16v)
-             461:     36(int) Load 360(u16)
-             462:  193(ivec3) CompositeConstruct 461 461 461
-             463:  427(bvec3) ULessThan 460 462
-                              Store 459(bv) 463
-             464:   52(ivec2) Load 345(i16v)
-             465:     14(int) Load 348(i16)
-             466:   52(ivec2) CompositeConstruct 465 465
-             467:  174(bvec2) SLessThan 464 466
-             468:  427(bvec3) Load 459(bv)
-             469:  427(bvec3) VectorShuffle 468 467 3 4 2
-                              Store 459(bv) 469
-             470:  193(ivec3) Load 358(u16v)
-             471:     36(int) Load 360(u16)
-             472:  193(ivec3) CompositeConstruct 471 471 471
-             473:  427(bvec3) ULessThanEqual 470 472
-                              Store 459(bv) 473
-             474:   52(ivec2) Load 345(i16v)
-             475:     14(int) Load 348(i16)
-             476:   52(ivec2) CompositeConstruct 475 475
-             477:  174(bvec2) SLessThanEqual 474 476
-             478:  427(bvec3) Load 459(bv)
-             479:  427(bvec3) VectorShuffle 478 477 3 4 2
-                              Store 459(bv) 479
-             480:  193(ivec3) Load 358(u16v)
-             481:     36(int) Load 360(u16)
-             482:  193(ivec3) CompositeConstruct 481 481 481
-             483:  427(bvec3) UGreaterThan 480 482
-                              Store 459(bv) 483
-             484:   52(ivec2) Load 345(i16v)
-             485:     14(int) Load 348(i16)
-             486:   52(ivec2) CompositeConstruct 485 485
-             487:  174(bvec2) SGreaterThan 484 486
-             488:  427(bvec3) Load 459(bv)
-             489:  427(bvec3) VectorShuffle 488 487 3 4 2
-                              Store 459(bv) 489
-             490:  193(ivec3) Load 358(u16v)
-             491:     36(int) Load 360(u16)
-             492:  193(ivec3) CompositeConstruct 491 491 491
-             493:  427(bvec3) UGreaterThanEqual 490 492
-                              Store 459(bv) 493
-             494:   52(ivec2) Load 345(i16v)
-             495:     14(int) Load 348(i16)
-             496:   52(ivec2) CompositeConstruct 495 495
-             497:  174(bvec2) SGreaterThanEqual 494 496
-             498:  427(bvec3) Load 459(bv)
-             499:  427(bvec3) VectorShuffle 498 497 3 4 2
-                              Store 459(bv) 499
-             500:  193(ivec3) Load 358(u16v)
-             501:     36(int) Load 360(u16)
-             502:  193(ivec3) CompositeConstruct 501 501 501
-             503:  427(bvec3) IEqual 500 502
-                              Store 459(bv) 503
-             504:   52(ivec2) Load 345(i16v)
-             505:     14(int) Load 348(i16)
-             506:   52(ivec2) CompositeConstruct 505 505
-             507:  174(bvec2) IEqual 504 506
-             508:  427(bvec3) Load 459(bv)
-             509:  427(bvec3) VectorShuffle 508 507 3 4 2
-                              Store 459(bv) 509
-             510:  193(ivec3) Load 358(u16v)
-             511:     36(int) Load 360(u16)
-             512:  193(ivec3) CompositeConstruct 511 511 511
-             513:  427(bvec3) INotEqual 510 512
-                              Store 459(bv) 513
-             514:   52(ivec2) Load 345(i16v)
-             515:     14(int) Load 348(i16)
-             516:   52(ivec2) CompositeConstruct 515 515
-             517:  174(bvec2) INotEqual 514 516
-             518:  427(bvec3) Load 459(bv)
-             519:  427(bvec3) VectorShuffle 518 517 3 4 2
-                              Store 459(bv) 519
+             419:     36(int) Select 405 418 416
+                              Store 358(u16) 419
+             420:     36(int) Load 358(u16)
+             421:  193(ivec3) CompositeConstruct 420 420 420
+             422:     36(int) Load 358(u16)
+             423:     36(int) SNegate 422
+             424:  193(ivec3) CompositeConstruct 423 423 423
+             427:  193(ivec3) Select 426 424 421
+                              Store 356(u16v) 427
+             429:   52(ivec2) Load 343(i16v)
+             430:     27(int) Bitcast 429
+                              Store 428(i32) 430
+             435:  432(ivec4) Load 434(i16v4)
+             436:     71(int) Bitcast 435
+                              Store 431(i64) 436
+             439:   57(ivec2) Load 438(u16v2)
+             440:     17(int) Bitcast 439
+                              Store 437(u32) 440
+             446:  443(ivec4) Load 445(u16v4)
+             447:     77(int) Bitcast 446
+                              Store 442(u64) 447
+             448:     27(int) Load 428(i32)
+             449:   52(ivec2) Bitcast 448
+                              Store 343(i16v) 449
+             450:     71(int) Load 431(i64)
+             451:  432(ivec4) Bitcast 450
+                              Store 434(i16v4) 451
+             452:     17(int) Load 437(u32)
+             453:   57(ivec2) Bitcast 452
+                              Store 438(u16v2) 453
+             454:     77(int) Load 442(u64)
+             455:  443(ivec4) Bitcast 454
+                              Store 445(u16v4) 455
+             458:  193(ivec3) Load 356(u16v)
+             459:     36(int) Load 358(u16)
+             460:  193(ivec3) CompositeConstruct 459 459 459
+             461:  425(bvec3) ULessThan 458 460
+                              Store 457(bv) 461
+             462:   52(ivec2) Load 343(i16v)
+             463:     14(int) Load 346(i16)
+             464:   52(ivec2) CompositeConstruct 463 463
+             465:  174(bvec2) SLessThan 462 464
+             466:  425(bvec3) Load 457(bv)
+             467:  425(bvec3) VectorShuffle 466 465 3 4 2
+                              Store 457(bv) 467
+             468:  193(ivec3) Load 356(u16v)
+             469:     36(int) Load 358(u16)
+             470:  193(ivec3) CompositeConstruct 469 469 469
+             471:  425(bvec3) ULessThanEqual 468 470
+                              Store 457(bv) 471
+             472:   52(ivec2) Load 343(i16v)
+             473:     14(int) Load 346(i16)
+             474:   52(ivec2) CompositeConstruct 473 473
+             475:  174(bvec2) SLessThanEqual 472 474
+             476:  425(bvec3) Load 457(bv)
+             477:  425(bvec3) VectorShuffle 476 475 3 4 2
+                              Store 457(bv) 477
+             478:  193(ivec3) Load 356(u16v)
+             479:     36(int) Load 358(u16)
+             480:  193(ivec3) CompositeConstruct 479 479 479
+             481:  425(bvec3) UGreaterThan 478 480
+                              Store 457(bv) 481
+             482:   52(ivec2) Load 343(i16v)
+             483:     14(int) Load 346(i16)
+             484:   52(ivec2) CompositeConstruct 483 483
+             485:  174(bvec2) SGreaterThan 482 484
+             486:  425(bvec3) Load 457(bv)
+             487:  425(bvec3) VectorShuffle 486 485 3 4 2
+                              Store 457(bv) 487
+             488:  193(ivec3) Load 356(u16v)
+             489:     36(int) Load 358(u16)
+             490:  193(ivec3) CompositeConstruct 489 489 489
+             491:  425(bvec3) UGreaterThanEqual 488 490
+                              Store 457(bv) 491
+             492:   52(ivec2) Load 343(i16v)
+             493:     14(int) Load 346(i16)
+             494:   52(ivec2) CompositeConstruct 493 493
+             495:  174(bvec2) SGreaterThanEqual 492 494
+             496:  425(bvec3) Load 457(bv)
+             497:  425(bvec3) VectorShuffle 496 495 3 4 2
+                              Store 457(bv) 497
+             498:  193(ivec3) Load 356(u16v)
+             499:     36(int) Load 358(u16)
+             500:  193(ivec3) CompositeConstruct 499 499 499
+             501:  425(bvec3) IEqual 498 500
+                              Store 457(bv) 501
+             502:   52(ivec2) Load 343(i16v)
+             503:     14(int) Load 346(i16)
+             504:   52(ivec2) CompositeConstruct 503 503
+             505:  174(bvec2) IEqual 502 504
+             506:  425(bvec3) Load 457(bv)
+             507:  425(bvec3) VectorShuffle 506 505 3 4 2
+                              Store 457(bv) 507
+             508:  193(ivec3) Load 356(u16v)
+             509:     36(int) Load 358(u16)
+             510:  193(ivec3) CompositeConstruct 509 509 509
+             511:  425(bvec3) INotEqual 508 510
+                              Store 457(bv) 511
+             512:   52(ivec2) Load 343(i16v)
+             513:     14(int) Load 346(i16)
+             514:   52(ivec2) CompositeConstruct 513 513
+             515:  174(bvec2) INotEqual 512 514
+             516:  425(bvec3) Load 457(bv)
+             517:  425(bvec3) VectorShuffle 516 515 3 4 2
+                              Store 457(bv) 517
                               Return
                               FunctionEnd
index a6d07d0..c615672 100644 (file)
@@ -1,7 +1,7 @@
 spv.int32.frag
 // Module Version 10300
 // Generated by (magic number): 80006
-// Id's are bound by 495
+// Id's are bound by 493
 
                               Capability Shader
                               Capability Float16
@@ -52,54 +52,54 @@ spv.int32.frag
                               Name 210  "i"
                               Name 214  "uv"
                               Name 227  "i64"
-                              Name 262  "b"
-                              Name 314  "i32v"
-                              Name 317  "i32"
-                              Name 327  "u32v"
-                              Name 329  "u32"
-                              Name 401  "i8v4"
-                              Name 404  "i16v2"
-                              Name 409  "u8v4"
-                              Name 412  "u16v2"
-                              Name 415  "i64"
-                              Name 418  "u32v2"
-                              Name 420  "u64"
-                              Name 424  "bv"
-                              Name 487  "Block"
-                              MemberName 487(Block) 0  "i32"
-                              MemberName 487(Block) 1  "i32v2"
-                              MemberName 487(Block) 2  "i32v3"
-                              MemberName 487(Block) 3  "i32v4"
-                              MemberName 487(Block) 4  "u32"
-                              MemberName 487(Block) 5  "u32v2"
-                              MemberName 487(Block) 6  "u32v3"
-                              MemberName 487(Block) 7  "u32v4"
-                              Name 489  "block"
-                              Name 490  "si32"
-                              Name 491  "su32"
-                              Name 492  "si"
-                              Name 493  "su"
-                              Name 494  "sb"
+                              Name 260  "b"
+                              Name 312  "i32v"
+                              Name 315  "i32"
+                              Name 325  "u32v"
+                              Name 327  "u32"
+                              Name 399  "i8v4"
+                              Name 402  "i16v2"
+                              Name 407  "u8v4"
+                              Name 410  "u16v2"
+                              Name 413  "i64"
+                              Name 416  "u32v2"
+                              Name 418  "u64"
+                              Name 422  "bv"
+                              Name 485  "Block"
+                              MemberName 485(Block) 0  "i32"
+                              MemberName 485(Block) 1  "i32v2"
+                              MemberName 485(Block) 2  "i32v3"
+                              MemberName 485(Block) 3  "i32v4"
+                              MemberName 485(Block) 4  "u32"
+                              MemberName 485(Block) 5  "u32v2"
+                              MemberName 485(Block) 6  "u32v3"
+                              MemberName 485(Block) 7  "u32v4"
+                              Name 487  "block"
+                              Name 488  "si32"
+                              Name 489  "su32"
+                              Name 490  "si"
+                              Name 491  "su"
+                              Name 492  "sb"
                               MemberDecorate 27(Uniforms) 0 Offset 0
                               Decorate 27(Uniforms) Block
                               Decorate 29 DescriptorSet 0
                               Decorate 29 Binding 0
-                              MemberDecorate 487(Block) 0 Offset 0
-                              MemberDecorate 487(Block) 1 Offset 8
-                              MemberDecorate 487(Block) 2 Offset 16
-                              MemberDecorate 487(Block) 3 Offset 32
-                              MemberDecorate 487(Block) 4 Offset 48
-                              MemberDecorate 487(Block) 5 Offset 56
-                              MemberDecorate 487(Block) 6 Offset 64
-                              MemberDecorate 487(Block) 7 Offset 80
-                              Decorate 487(Block) Block
-                              Decorate 489(block) DescriptorSet 0
-                              Decorate 489(block) Binding 1
-                              Decorate 490(si32) SpecId 100
-                              Decorate 491(su32) SpecId 101
-                              Decorate 492(si) SpecId 102
-                              Decorate 493(su) SpecId 103
-                              Decorate 494(sb) SpecId 104
+                              MemberDecorate 485(Block) 0 Offset 0
+                              MemberDecorate 485(Block) 1 Offset 8
+                              MemberDecorate 485(Block) 2 Offset 16
+                              MemberDecorate 485(Block) 3 Offset 32
+                              MemberDecorate 485(Block) 4 Offset 48
+                              MemberDecorate 485(Block) 5 Offset 56
+                              MemberDecorate 485(Block) 6 Offset 64
+                              MemberDecorate 485(Block) 7 Offset 80
+                              Decorate 485(Block) Block
+                              Decorate 487(block) DescriptorSet 0
+                              Decorate 487(block) Binding 1
+                              Decorate 488(si32) SpecId 100
+                              Decorate 489(su32) SpecId 101
+                              Decorate 490(si) SpecId 102
+                              Decorate 491(su) SpecId 103
+                              Decorate 492(sb) SpecId 104
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 32 0
@@ -171,30 +171,30 @@ spv.int32.frag
              188:             TypeVector 18(int) 3
              226:             TypePointer Function 57(int)
              251:     14(int) Constant 2
-             261:             TypePointer Function 165(bool)
-             325:   52(ivec2) ConstantComposite 24 24
-             334:  184(ivec3) ConstantComposite 175 175 175
-             376:   165(bool) ConstantTrue
-             383:   165(bool) ConstantFalse
-             384:  166(bvec2) ConstantComposite 383 383
-             396:             TypeVector 165(bool) 3
-             397:  396(bvec3) ConstantComposite 383 383 383
-             399:             TypeVector 91(int) 4
-             400:             TypePointer Function 399(ivec4)
-             407:             TypeVector 120(int) 4
-             408:             TypePointer Function 407(ivec4)
-             419:             TypePointer Function 63(int)
-             423:             TypePointer Function 396(bvec3)
-             485:             TypeVector 18(int) 4
-             486:             TypeVector 14(int) 4
-      487(Block):             TypeStruct 18(int) 52(ivec2) 188(ivec3) 485(ivec4) 14(int) 49(ivec2) 184(ivec3) 486(ivec4)
-             488:             TypePointer Uniform 487(Block)
-      489(block):    488(ptr) Variable Uniform
-       490(si32):     18(int) SpecConstant 4294967286
-       491(su32):     14(int) SpecConstant 20
-         492(si):     18(int) SpecConstant 4294967291
-         493(su):     14(int) SpecConstant 4
-         494(sb):   165(bool) SpecConstantTrue
+             259:             TypePointer Function 165(bool)
+             323:   52(ivec2) ConstantComposite 24 24
+             332:  184(ivec3) ConstantComposite 175 175 175
+             374:   165(bool) ConstantTrue
+             381:   165(bool) ConstantFalse
+             382:  166(bvec2) ConstantComposite 381 381
+             394:             TypeVector 165(bool) 3
+             395:  394(bvec3) ConstantComposite 381 381 381
+             397:             TypeVector 91(int) 4
+             398:             TypePointer Function 397(ivec4)
+             405:             TypeVector 120(int) 4
+             406:             TypePointer Function 405(ivec4)
+             417:             TypePointer Function 63(int)
+             421:             TypePointer Function 394(bvec3)
+             483:             TypeVector 18(int) 4
+             484:             TypeVector 14(int) 4
+      485(Block):             TypeStruct 18(int) 52(ivec2) 188(ivec3) 483(ivec4) 14(int) 49(ivec2) 184(ivec3) 484(ivec4)
+             486:             TypePointer Uniform 485(Block)
+      487(block):    486(ptr) Variable Uniform
+       488(si32):     18(int) SpecConstant 4294967286
+       489(su32):     14(int) SpecConstant 20
+         490(si):     18(int) SpecConstant 4294967291
+         491(su):     14(int) SpecConstant 4
+         492(sb):   165(bool) SpecConstantTrue
          4(main):           2 Function None 3
                5:             Label
                               Store 16(u32Max) 17
@@ -360,7 +360,7 @@ spv.int32.frag
           210(i):     19(ptr) Variable Function
          214(uv):    185(ptr) Variable Function
         227(i64):    226(ptr) Variable Function
-          262(b):    261(ptr) Variable Function
+          260(b):    259(ptr) Variable Function
              187:  184(ivec3) Load 186(u32v)
              189:  188(ivec3) CompositeConstruct 170 170 170
              190:  184(ivec3) IAdd 187 189
@@ -440,275 +440,273 @@ spv.int32.frag
              250:     57(int) Load 227(i64)
              252:     38(ptr) AccessChain 186(u32v) 251
              253:     14(int) Load 252
-             254:     57(int) UConvert 253
-             255:     57(int) Bitcast 254
-             256:     57(int) ShiftLeftLogical 250 255
-                              Store 227(i64) 256
-             257:  184(ivec3) Load 186(u32v)
-             258:     18(int) Load 210(i)
-             259:  188(ivec3) CompositeConstruct 258 258 258
-             260:  184(ivec3) ShiftLeftLogical 257 259
-                              Store 214(uv) 260
-             263:     38(ptr) AccessChain 186(u32v) 175
-             264:     14(int) Load 263
-             265:     18(int) Load 191(i32)
-             266:     14(int) Bitcast 265
-             267:   165(bool) INotEqual 264 266
-                              Store 262(b) 267
-             268:     18(int) Load 191(i32)
-             269:     14(int) Bitcast 268
-             270:     38(ptr) AccessChain 186(u32v) 175
-             271:     14(int) Load 270
-             272:   165(bool) IEqual 269 271
-                              Store 262(b) 272
-             273:     38(ptr) AccessChain 186(u32v) 175
+             254:     57(int) ShiftLeftLogical 250 253
+                              Store 227(i64) 254
+             255:  184(ivec3) Load 186(u32v)
+             256:     18(int) Load 210(i)
+             257:  188(ivec3) CompositeConstruct 256 256 256
+             258:  184(ivec3) ShiftLeftLogical 255 257
+                              Store 214(uv) 258
+             261:     38(ptr) AccessChain 186(u32v) 175
+             262:     14(int) Load 261
+             263:     18(int) Load 191(i32)
+             264:     14(int) Bitcast 263
+             265:   165(bool) INotEqual 262 264
+                              Store 260(b) 265
+             266:     18(int) Load 191(i32)
+             267:     14(int) Bitcast 266
+             268:     38(ptr) AccessChain 186(u32v) 175
+             269:     14(int) Load 268
+             270:   165(bool) IEqual 267 269
+                              Store 260(b) 270
+             271:     38(ptr) AccessChain 186(u32v) 175
+             272:     14(int) Load 271
+             273:     38(ptr) AccessChain 214(uv) 176
              274:     14(int) Load 273
-             275:     38(ptr) AccessChain 214(uv) 176
-             276:     14(int) Load 275
-             277:   165(bool) UGreaterThan 274 276
-                              Store 262(b) 277
-             278:     18(int) Load 191(i32)
-             279:     18(int) Load 210(i)
-             280:   165(bool) SLessThan 278 279
-                              Store 262(b) 280
-             281:     38(ptr) AccessChain 186(u32v) 176
+             275:   165(bool) UGreaterThan 272 274
+                              Store 260(b) 275
+             276:     18(int) Load 191(i32)
+             277:     18(int) Load 210(i)
+             278:   165(bool) SLessThan 276 277
+                              Store 260(b) 278
+             279:     38(ptr) AccessChain 186(u32v) 176
+             280:     14(int) Load 279
+             281:     38(ptr) AccessChain 214(uv) 175
              282:     14(int) Load 281
-             283:     38(ptr) AccessChain 214(uv) 175
-             284:     14(int) Load 283
-             285:   165(bool) UGreaterThanEqual 282 284
-                              Store 262(b) 285
-             286:     18(int) Load 191(i32)
-             287:     18(int) Load 210(i)
-             288:   165(bool) SLessThanEqual 286 287
-                              Store 262(b) 288
-             289:     18(int) Load 191(i32)
-             290:     14(int) Bitcast 289
-             291:  184(ivec3) Load 214(uv)
-             292:  184(ivec3) CompositeConstruct 290 290 290
-             293:  184(ivec3) BitwiseOr 291 292
-                              Store 214(uv) 293
-             294:     18(int) Load 191(i32)
-             295:     18(int) Load 210(i)
-             296:     18(int) BitwiseOr 294 295
-                              Store 210(i) 296
-             297:     18(int) Load 191(i32)
-             298:     57(int) SConvert 297
-             299:     57(int) Load 227(i64)
-             300:     57(int) BitwiseAnd 299 298
-                              Store 227(i64) 300
-             301:  184(ivec3) Load 186(u32v)
-             302:  184(ivec3) Load 214(uv)
-             303:  184(ivec3) BitwiseAnd 301 302
-                              Store 214(uv) 303
-             304:     18(int) Load 191(i32)
-             305:     14(int) Bitcast 304
-             306:  184(ivec3) Load 214(uv)
-             307:  184(ivec3) CompositeConstruct 305 305 305
-             308:  184(ivec3) BitwiseXor 306 307
-                              Store 214(uv) 308
-             309:  184(ivec3) Load 186(u32v)
-             310:     18(int) Load 191(i32)
-             311:     14(int) Bitcast 310
-             312:  184(ivec3) CompositeConstruct 311 311 311
-             313:  184(ivec3) BitwiseXor 309 312
-                              Store 186(u32v) 313
+             283:   165(bool) UGreaterThanEqual 280 282
+                              Store 260(b) 283
+             284:     18(int) Load 191(i32)
+             285:     18(int) Load 210(i)
+             286:   165(bool) SLessThanEqual 284 285
+                              Store 260(b) 286
+             287:     18(int) Load 191(i32)
+             288:     14(int) Bitcast 287
+             289:  184(ivec3) Load 214(uv)
+             290:  184(ivec3) CompositeConstruct 288 288 288
+             291:  184(ivec3) BitwiseOr 289 290
+                              Store 214(uv) 291
+             292:     18(int) Load 191(i32)
+             293:     18(int) Load 210(i)
+             294:     18(int) BitwiseOr 292 293
+                              Store 210(i) 294
+             295:     18(int) Load 191(i32)
+             296:     57(int) SConvert 295
+             297:     57(int) Load 227(i64)
+             298:     57(int) BitwiseAnd 297 296
+                              Store 227(i64) 298
+             299:  184(ivec3) Load 186(u32v)
+             300:  184(ivec3) Load 214(uv)
+             301:  184(ivec3) BitwiseAnd 299 300
+                              Store 214(uv) 301
+             302:     18(int) Load 191(i32)
+             303:     14(int) Bitcast 302
+             304:  184(ivec3) Load 214(uv)
+             305:  184(ivec3) CompositeConstruct 303 303 303
+             306:  184(ivec3) BitwiseXor 304 305
+                              Store 214(uv) 306
+             307:  184(ivec3) Load 186(u32v)
+             308:     18(int) Load 191(i32)
+             309:     14(int) Bitcast 308
+             310:  184(ivec3) CompositeConstruct 309 309 309
+             311:  184(ivec3) BitwiseXor 307 310
+                              Store 186(u32v) 311
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       314(i32v):     53(ptr) Variable Function
-        317(i32):     19(ptr) Variable Function
-       327(u32v):    185(ptr) Variable Function
-        329(u32):     38(ptr) Variable Function
-       401(i8v4):    400(ptr) Variable Function
-      404(i16v2):    102(ptr) Variable Function
-       409(u8v4):    408(ptr) Variable Function
-      412(u16v2):    131(ptr) Variable Function
-        415(i64):    226(ptr) Variable Function
-      418(u32v2):     50(ptr) Variable Function
-        420(u64):    419(ptr) Variable Function
-         424(bv):    423(ptr) Variable Function
-             315:   52(ivec2) Load 314(i32v)
-             316:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 315
-                              Store 314(i32v) 316
-             318:     18(int) Load 317(i32)
-             319:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 318
-                              Store 317(i32) 319
-             320:   52(ivec2) Load 314(i32v)
-             321:     18(int) Load 317(i32)
-             322:   52(ivec2) CompositeConstruct 321 321
-             323:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 320 322
-                              Store 314(i32v) 323
-             324:   52(ivec2) Load 314(i32v)
-             326:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 324 325
-                              Store 314(i32v) 326
-             328:  184(ivec3) Load 327(u32v)
-             330:     14(int) Load 329(u32)
-             331:  184(ivec3) CompositeConstruct 330 330 330
-             332:  184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 328 331
-                              Store 327(u32v) 332
-             333:  184(ivec3) Load 327(u32v)
-             335:  184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 333 334
-                              Store 327(u32v) 335
-             336:   52(ivec2) Load 314(i32v)
-             337:     18(int) Load 317(i32)
-             338:   52(ivec2) CompositeConstruct 337 337
-             339:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 336 338
-                              Store 314(i32v) 339
-             340:   52(ivec2) Load 314(i32v)
-             341:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 340 325
-                              Store 314(i32v) 341
-             342:  184(ivec3) Load 327(u32v)
-             343:     14(int) Load 329(u32)
-             344:  184(ivec3) CompositeConstruct 343 343 343
-             345:  184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 342 344
-                              Store 327(u32v) 345
-             346:  184(ivec3) Load 327(u32v)
-             347:  184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 346 334
-                              Store 327(u32v) 347
-             348:   52(ivec2) Load 314(i32v)
-             349:     18(int) Load 317(i32)
-             350:     18(int) SNegate 349
-             351:     18(int) Load 317(i32)
-             352:   52(ivec2) CompositeConstruct 350 350
-             353:   52(ivec2) CompositeConstruct 351 351
-             354:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 348 352 353
-                              Store 314(i32v) 354
-             355:   52(ivec2) Load 314(i32v)
-             356:   52(ivec2) Load 314(i32v)
-             357:   52(ivec2) SNegate 356
-             358:   52(ivec2) Load 314(i32v)
-             359:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 355 357 358
-                              Store 314(i32v) 359
-             360:  184(ivec3) Load 327(u32v)
-             361:     14(int) Load 329(u32)
-             362:     14(int) SNegate 361
-             363:     14(int) Load 329(u32)
-             364:  184(ivec3) CompositeConstruct 362 362 362
-             365:  184(ivec3) CompositeConstruct 363 363 363
-             366:  184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 360 364 365
-                              Store 327(u32v) 366
-             367:  184(ivec3) Load 327(u32v)
-             368:  184(ivec3) Load 327(u32v)
-             369:  184(ivec3) SNegate 368
-             370:  184(ivec3) Load 327(u32v)
-             371:  184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 367 369 370
-                              Store 327(u32v) 371
-             372:     19(ptr) AccessChain 314(i32v) 175
+       312(i32v):     53(ptr) Variable Function
+        315(i32):     19(ptr) Variable Function
+       325(u32v):    185(ptr) Variable Function
+        327(u32):     38(ptr) Variable Function
+       399(i8v4):    398(ptr) Variable Function
+      402(i16v2):    102(ptr) Variable Function
+       407(u8v4):    406(ptr) Variable Function
+      410(u16v2):    131(ptr) Variable Function
+        413(i64):    226(ptr) Variable Function
+      416(u32v2):     50(ptr) Variable Function
+        418(u64):    417(ptr) Variable Function
+         422(bv):    421(ptr) Variable Function
+             313:   52(ivec2) Load 312(i32v)
+             314:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 313
+                              Store 312(i32v) 314
+             316:     18(int) Load 315(i32)
+             317:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 316
+                              Store 315(i32) 317
+             318:   52(ivec2) Load 312(i32v)
+             319:     18(int) Load 315(i32)
+             320:   52(ivec2) CompositeConstruct 319 319
+             321:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 318 320
+                              Store 312(i32v) 321
+             322:   52(ivec2) Load 312(i32v)
+             324:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 322 323
+                              Store 312(i32v) 324
+             326:  184(ivec3) Load 325(u32v)
+             328:     14(int) Load 327(u32)
+             329:  184(ivec3) CompositeConstruct 328 328 328
+             330:  184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 326 329
+                              Store 325(u32v) 330
+             331:  184(ivec3) Load 325(u32v)
+             333:  184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 331 332
+                              Store 325(u32v) 333
+             334:   52(ivec2) Load 312(i32v)
+             335:     18(int) Load 315(i32)
+             336:   52(ivec2) CompositeConstruct 335 335
+             337:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 334 336
+                              Store 312(i32v) 337
+             338:   52(ivec2) Load 312(i32v)
+             339:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 338 323
+                              Store 312(i32v) 339
+             340:  184(ivec3) Load 325(u32v)
+             341:     14(int) Load 327(u32)
+             342:  184(ivec3) CompositeConstruct 341 341 341
+             343:  184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 340 342
+                              Store 325(u32v) 343
+             344:  184(ivec3) Load 325(u32v)
+             345:  184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 344 332
+                              Store 325(u32v) 345
+             346:   52(ivec2) Load 312(i32v)
+             347:     18(int) Load 315(i32)
+             348:     18(int) SNegate 347
+             349:     18(int) Load 315(i32)
+             350:   52(ivec2) CompositeConstruct 348 348
+             351:   52(ivec2) CompositeConstruct 349 349
+             352:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 346 350 351
+                              Store 312(i32v) 352
+             353:   52(ivec2) Load 312(i32v)
+             354:   52(ivec2) Load 312(i32v)
+             355:   52(ivec2) SNegate 354
+             356:   52(ivec2) Load 312(i32v)
+             357:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 353 355 356
+                              Store 312(i32v) 357
+             358:  184(ivec3) Load 325(u32v)
+             359:     14(int) Load 327(u32)
+             360:     14(int) SNegate 359
+             361:     14(int) Load 327(u32)
+             362:  184(ivec3) CompositeConstruct 360 360 360
+             363:  184(ivec3) CompositeConstruct 361 361 361
+             364:  184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 358 362 363
+                              Store 325(u32v) 364
+             365:  184(ivec3) Load 325(u32v)
+             366:  184(ivec3) Load 325(u32v)
+             367:  184(ivec3) SNegate 366
+             368:  184(ivec3) Load 325(u32v)
+             369:  184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 365 367 368
+                              Store 325(u32v) 369
+             370:     19(ptr) AccessChain 312(i32v) 175
+             371:     18(int) Load 370
+             372:     19(ptr) AccessChain 312(i32v) 176
              373:     18(int) Load 372
-             374:     19(ptr) AccessChain 314(i32v) 176
-             375:     18(int) Load 374
-             377:     18(int) Select 376 375 373
-                              Store 317(i32) 377
-             378:     18(int) Load 317(i32)
-             379:   52(ivec2) CompositeConstruct 378 378
-             380:     18(int) Load 317(i32)
-             381:     18(int) SNegate 380
-             382:   52(ivec2) CompositeConstruct 381 381
-             385:   52(ivec2) Select 384 382 379
-                              Store 314(i32v) 385
-             386:     38(ptr) AccessChain 327(u32v) 175
+             375:     18(int) Select 374 373 371
+                              Store 315(i32) 375
+             376:     18(int) Load 315(i32)
+             377:   52(ivec2) CompositeConstruct 376 376
+             378:     18(int) Load 315(i32)
+             379:     18(int) SNegate 378
+             380:   52(ivec2) CompositeConstruct 379 379
+             383:   52(ivec2) Select 382 380 377
+                              Store 312(i32v) 383
+             384:     38(ptr) AccessChain 325(u32v) 175
+             385:     14(int) Load 384
+             386:     38(ptr) AccessChain 325(u32v) 176
              387:     14(int) Load 386
-             388:     38(ptr) AccessChain 327(u32v) 176
-             389:     14(int) Load 388
-             390:     14(int) Select 376 389 387
-                              Store 329(u32) 390
-             391:     14(int) Load 329(u32)
-             392:  184(ivec3) CompositeConstruct 391 391 391
-             393:     14(int) Load 329(u32)
-             394:     14(int) SNegate 393
-             395:  184(ivec3) CompositeConstruct 394 394 394
-             398:  184(ivec3) Select 397 395 392
-                              Store 327(u32v) 398
-             402:  399(ivec4) Load 401(i8v4)
-             403:     18(int) Bitcast 402
-                              Store 317(i32) 403
-             405:  101(ivec2) Load 404(i16v2)
-             406:     18(int) Bitcast 405
-                              Store 317(i32) 406
-             410:  407(ivec4) Load 409(u8v4)
-             411:     14(int) Bitcast 410
-                              Store 329(u32) 411
-             413:  130(ivec2) Load 412(u16v2)
-             414:     14(int) Bitcast 413
-                              Store 329(u32) 414
-             416:     57(int) Load 415(i64)
-             417:   52(ivec2) Bitcast 416
-                              Store 314(i32v) 417
-             421:     63(int) Load 420(u64)
-             422:   49(ivec2) Bitcast 421
-                              Store 418(u32v2) 422
-             425:  184(ivec3) Load 327(u32v)
-             426:     14(int) Load 329(u32)
-             427:  184(ivec3) CompositeConstruct 426 426 426
-             428:  396(bvec3) ULessThan 425 427
-                              Store 424(bv) 428
-             429:   52(ivec2) Load 314(i32v)
-             430:     18(int) Load 317(i32)
-             431:   52(ivec2) CompositeConstruct 430 430
-             432:  166(bvec2) SLessThan 429 431
-             433:  396(bvec3) Load 424(bv)
-             434:  396(bvec3) VectorShuffle 433 432 3 4 2
-                              Store 424(bv) 434
-             435:  184(ivec3) Load 327(u32v)
-             436:     14(int) Load 329(u32)
-             437:  184(ivec3) CompositeConstruct 436 436 436
-             438:  396(bvec3) ULessThanEqual 435 437
-                              Store 424(bv) 438
-             439:   52(ivec2) Load 314(i32v)
-             440:     18(int) Load 317(i32)
-             441:   52(ivec2) CompositeConstruct 440 440
-             442:  166(bvec2) SLessThanEqual 439 441
-             443:  396(bvec3) Load 424(bv)
-             444:  396(bvec3) VectorShuffle 443 442 3 4 2
-                              Store 424(bv) 444
-             445:  184(ivec3) Load 327(u32v)
-             446:     14(int) Load 329(u32)
-             447:  184(ivec3) CompositeConstruct 446 446 446
-             448:  396(bvec3) UGreaterThan 445 447
-                              Store 424(bv) 448
-             449:   52(ivec2) Load 314(i32v)
-             450:     18(int) Load 317(i32)
-             451:   52(ivec2) CompositeConstruct 450 450
-             452:  166(bvec2) SGreaterThan 449 451
-             453:  396(bvec3) Load 424(bv)
-             454:  396(bvec3) VectorShuffle 453 452 3 4 2
-                              Store 424(bv) 454
-             455:  184(ivec3) Load 327(u32v)
-             456:     14(int) Load 329(u32)
-             457:  184(ivec3) CompositeConstruct 456 456 456
-             458:  396(bvec3) UGreaterThanEqual 455 457
-                              Store 424(bv) 458
-             459:   52(ivec2) Load 314(i32v)
-             460:     18(int) Load 317(i32)
-             461:   52(ivec2) CompositeConstruct 460 460
-             462:  166(bvec2) SGreaterThanEqual 459 461
-             463:  396(bvec3) Load 424(bv)
-             464:  396(bvec3) VectorShuffle 463 462 3 4 2
-                              Store 424(bv) 464
-             465:  184(ivec3) Load 327(u32v)
-             466:     14(int) Load 329(u32)
-             467:  184(ivec3) CompositeConstruct 466 466 466
-             468:  396(bvec3) IEqual 465 467
-                              Store 424(bv) 468
-             469:   52(ivec2) Load 314(i32v)
-             470:     18(int) Load 317(i32)
-             471:   52(ivec2) CompositeConstruct 470 470
-             472:  166(bvec2) IEqual 469 471
-             473:  396(bvec3) Load 424(bv)
-             474:  396(bvec3) VectorShuffle 473 472 3 4 2
-                              Store 424(bv) 474
-             475:  184(ivec3) Load 327(u32v)
-             476:     14(int) Load 329(u32)
-             477:  184(ivec3) CompositeConstruct 476 476 476
-             478:  396(bvec3) INotEqual 475 477
-                              Store 424(bv) 478
-             479:   52(ivec2) Load 314(i32v)
-             480:     18(int) Load 317(i32)
-             481:   52(ivec2) CompositeConstruct 480 480
-             482:  166(bvec2) INotEqual 479 481
-             483:  396(bvec3) Load 424(bv)
-             484:  396(bvec3) VectorShuffle 483 482 3 4 2
-                              Store 424(bv) 484
+             388:     14(int) Select 374 387 385
+                              Store 327(u32) 388
+             389:     14(int) Load 327(u32)
+             390:  184(ivec3) CompositeConstruct 389 389 389
+             391:     14(int) Load 327(u32)
+             392:     14(int) SNegate 391
+             393:  184(ivec3) CompositeConstruct 392 392 392
+             396:  184(ivec3) Select 395 393 390
+                              Store 325(u32v) 396
+             400:  397(ivec4) Load 399(i8v4)
+             401:     18(int) Bitcast 400
+                              Store 315(i32) 401
+             403:  101(ivec2) Load 402(i16v2)
+             404:     18(int) Bitcast 403
+                              Store 315(i32) 404
+             408:  405(ivec4) Load 407(u8v4)
+             409:     14(int) Bitcast 408
+                              Store 327(u32) 409
+             411:  130(ivec2) Load 410(u16v2)
+             412:     14(int) Bitcast 411
+                              Store 327(u32) 412
+             414:     57(int) Load 413(i64)
+             415:   52(ivec2) Bitcast 414
+                              Store 312(i32v) 415
+             419:     63(int) Load 418(u64)
+             420:   49(ivec2) Bitcast 419
+                              Store 416(u32v2) 420
+             423:  184(ivec3) Load 325(u32v)
+             424:     14(int) Load 327(u32)
+             425:  184(ivec3) CompositeConstruct 424 424 424
+             426:  394(bvec3) ULessThan 423 425
+                              Store 422(bv) 426
+             427:   52(ivec2) Load 312(i32v)
+             428:     18(int) Load 315(i32)
+             429:   52(ivec2) CompositeConstruct 428 428
+             430:  166(bvec2) SLessThan 427 429
+             431:  394(bvec3) Load 422(bv)
+             432:  394(bvec3) VectorShuffle 431 430 3 4 2
+                              Store 422(bv) 432
+             433:  184(ivec3) Load 325(u32v)
+             434:     14(int) Load 327(u32)
+             435:  184(ivec3) CompositeConstruct 434 434 434
+             436:  394(bvec3) ULessThanEqual 433 435
+                              Store 422(bv) 436
+             437:   52(ivec2) Load 312(i32v)
+             438:     18(int) Load 315(i32)
+             439:   52(ivec2) CompositeConstruct 438 438
+             440:  166(bvec2) SLessThanEqual 437 439
+             441:  394(bvec3) Load 422(bv)
+             442:  394(bvec3) VectorShuffle 441 440 3 4 2
+                              Store 422(bv) 442
+             443:  184(ivec3) Load 325(u32v)
+             444:     14(int) Load 327(u32)
+             445:  184(ivec3) CompositeConstruct 444 444 444
+             446:  394(bvec3) UGreaterThan 443 445
+                              Store 422(bv) 446
+             447:   52(ivec2) Load 312(i32v)
+             448:     18(int) Load 315(i32)
+             449:   52(ivec2) CompositeConstruct 448 448
+             450:  166(bvec2) SGreaterThan 447 449
+             451:  394(bvec3) Load 422(bv)
+             452:  394(bvec3) VectorShuffle 451 450 3 4 2
+                              Store 422(bv) 452
+             453:  184(ivec3) Load 325(u32v)
+             454:     14(int) Load 327(u32)
+             455:  184(ivec3) CompositeConstruct 454 454 454
+             456:  394(bvec3) UGreaterThanEqual 453 455
+                              Store 422(bv) 456
+             457:   52(ivec2) Load 312(i32v)
+             458:     18(int) Load 315(i32)
+             459:   52(ivec2) CompositeConstruct 458 458
+             460:  166(bvec2) SGreaterThanEqual 457 459
+             461:  394(bvec3) Load 422(bv)
+             462:  394(bvec3) VectorShuffle 461 460 3 4 2
+                              Store 422(bv) 462
+             463:  184(ivec3) Load 325(u32v)
+             464:     14(int) Load 327(u32)
+             465:  184(ivec3) CompositeConstruct 464 464 464
+             466:  394(bvec3) IEqual 463 465
+                              Store 422(bv) 466
+             467:   52(ivec2) Load 312(i32v)
+             468:     18(int) Load 315(i32)
+             469:   52(ivec2) CompositeConstruct 468 468
+             470:  166(bvec2) IEqual 467 469
+             471:  394(bvec3) Load 422(bv)
+             472:  394(bvec3) VectorShuffle 471 470 3 4 2
+                              Store 422(bv) 472
+             473:  184(ivec3) Load 325(u32v)
+             474:     14(int) Load 327(u32)
+             475:  184(ivec3) CompositeConstruct 474 474 474
+             476:  394(bvec3) INotEqual 473 475
+                              Store 422(bv) 476
+             477:   52(ivec2) Load 312(i32v)
+             478:     18(int) Load 315(i32)
+             479:   52(ivec2) CompositeConstruct 478 478
+             480:  166(bvec2) INotEqual 477 479
+             481:  394(bvec3) Load 422(bv)
+             482:  394(bvec3) VectorShuffle 481 480 3 4 2
+                              Store 422(bv) 482
                               Return
                               FunctionEnd
index ac32fb9..598fc94 100644 (file)
@@ -1,7 +1,7 @@
 spv.int64.frag
 // Module Version 10000
 // Generated by (magic number): 80006
-// Id's are bound by 483
+// Id's are bound by 488
 
                               Capability Shader
                               Capability Float64
@@ -37,38 +37,38 @@ spv.int64.frag
                               Name 139  "i64"
                               Name 159  "i"
                               Name 166  "uv"
-                              Name 221  "b"
-                              Name 281  "i64v"
-                              Name 284  "i64"
-                              Name 294  "u64v"
-                              Name 296  "u64"
-                              Name 368  "dv"
-                              Name 387  "iv"
-                              Name 392  "uv"
-                              Name 396  "bv"
-                              Name 457  "Block"
-                              MemberName 457(Block) 0  "i64v"
-                              MemberName 457(Block) 1  "u64"
-                              Name 459  "block"
-                              Name 460  "si64"
-                              Name 461  "su64"
-                              Name 462  "si"
-                              Name 463  "su"
-                              Name 464  "sb"
+                              Name 226  "b"
+                              Name 286  "i64v"
+                              Name 289  "i64"
+                              Name 299  "u64v"
+                              Name 301  "u64"
+                              Name 373  "dv"
+                              Name 392  "iv"
+                              Name 397  "uv"
+                              Name 401  "bv"
+                              Name 462  "Block"
+                              MemberName 462(Block) 0  "i64v"
+                              MemberName 462(Block) 1  "u64"
+                              Name 464  "block"
+                              Name 465  "si64"
+                              Name 466  "su64"
+                              Name 467  "si"
+                              Name 468  "su"
+                              Name 469  "sb"
                               MemberDecorate 28(Uniforms) 0 Offset 0
                               Decorate 28(Uniforms) Block
                               Decorate 30 DescriptorSet 0
                               Decorate 30 Binding 0
-                              MemberDecorate 457(Block) 0 Offset 0
-                              MemberDecorate 457(Block) 1 Offset 24
-                              Decorate 457(Block) Block
-                              Decorate 459(block) DescriptorSet 0
-                              Decorate 459(block) Binding 1
-                              Decorate 460(si64) SpecId 100
-                              Decorate 461(su64) SpecId 101
-                              Decorate 462(si) SpecId 102
-                              Decorate 463(su) SpecId 103
-                              Decorate 464(sb) SpecId 104
+                              MemberDecorate 462(Block) 0 Offset 0
+                              MemberDecorate 462(Block) 1 Offset 24
+                              Decorate 462(Block) Block
+                              Decorate 464(block) DescriptorSet 0
+                              Decorate 464(block) Binding 1
+                              Decorate 465(si64) SpecId 100
+                              Decorate 466(su64) SpecId 101
+                              Decorate 467(si) SpecId 102
+                              Decorate 468(su) SpecId 103
+                              Decorate 469(sb) SpecId 104
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 64 0
@@ -128,52 +128,53 @@ spv.int64.frag
              158:             TypePointer Function 31(int)
              164:             TypeVector 21(int) 3
              165:             TypePointer Function 164(ivec3)
+             199:             TypeVector 31(int) 3
              203:     21(int) Constant 1
              204:             TypePointer Function 21(int)
-             212:     21(int) Constant 2
-             220:             TypePointer Function 55(bool)
-             222:     21(int) Constant 0
-             292:   52(ivec2) ConstantComposite 25 25
-             301:  132(ivec3) ConstantComposite 69 69 69
-             343:    55(bool) ConstantTrue
-             350:    55(bool) ConstantFalse
-             351:   56(bvec2) ConstantComposite 350 350
-             363:             TypeVector 55(bool) 3
-             364:  363(bvec3) ConstantComposite 350 350 350
-             366:             TypeVector 94(float) 3
-             367:             TypePointer Function 366(fvec3)
-             372:             TypePointer Function 94(float)
-             383:     31(int) Constant 1
-             384:     31(int) Constant 2
-             385:   74(ivec2) ConstantComposite 383 384
-             390:   81(ivec2) ConstantComposite 212 22
-             395:             TypePointer Function 363(bvec3)
-      457(Block):             TypeStruct 136(ivec3) 14(int)
-             458:             TypePointer Uniform 457(Block)
-      459(block):    458(ptr) Variable Uniform
-       460(si64):     18(int) SpecConstant 4294967286 4294967295
-       461(su64):     14(int) SpecConstant 20 0
-         462(si):     31(int) SpecConstant 4294967291
-         463(su):     21(int) SpecConstant 4
-         464(sb):    55(bool) SpecConstantTrue
-             465:    55(bool) SpecConstantOp 171 460(si64) 69
-             466:    55(bool) SpecConstantOp 171 461(su64) 69
-             467:     18(int) SpecConstantOp 169 464(sb) 61 60
-             468:     14(int) SpecConstantOp 169 464(sb) 70 69
-             469:     31(int) SpecConstantOp 114 460(si64)
-             470:     18(int) SpecConstantOp 114 462(si)
-             471:     21(int) SpecConstantOp 113 461(su64)
-             472:     14(int) SpecConstantOp 113 463(su)
-             473:     18(int) SpecConstantOp 128 461(su64) 69
-             474:     14(int) SpecConstantOp 128 460(si64) 69
-             475:     31(int) SpecConstantOp 113 461(su64)
-             476:     31(int) SpecConstantOp 128 475 222
-             477:     18(int) SpecConstantOp 114 462(si)
-             478:     14(int) SpecConstantOp 128 477 69
-             479:     31(int) SpecConstantOp 114 460(si64)
-             480:     21(int) SpecConstantOp 128 479 222
-             481:     18(int) SpecConstantOp 113 463(su)
-             482:     18(int) SpecConstantOp 128 481 69
+             217:     21(int) Constant 2
+             225:             TypePointer Function 55(bool)
+             227:     21(int) Constant 0
+             297:   52(ivec2) ConstantComposite 25 25
+             306:  132(ivec3) ConstantComposite 69 69 69
+             348:    55(bool) ConstantTrue
+             355:    55(bool) ConstantFalse
+             356:   56(bvec2) ConstantComposite 355 355
+             368:             TypeVector 55(bool) 3
+             369:  368(bvec3) ConstantComposite 355 355 355
+             371:             TypeVector 94(float) 3
+             372:             TypePointer Function 371(fvec3)
+             377:             TypePointer Function 94(float)
+             388:     31(int) Constant 1
+             389:     31(int) Constant 2
+             390:   74(ivec2) ConstantComposite 388 389
+             395:   81(ivec2) ConstantComposite 217 22
+             400:             TypePointer Function 368(bvec3)
+      462(Block):             TypeStruct 136(ivec3) 14(int)
+             463:             TypePointer Uniform 462(Block)
+      464(block):    463(ptr) Variable Uniform
+       465(si64):     18(int) SpecConstant 4294967286 4294967295
+       466(su64):     14(int) SpecConstant 20 0
+         467(si):     31(int) SpecConstant 4294967291
+         468(su):     21(int) SpecConstant 4
+         469(sb):    55(bool) SpecConstantTrue
+             470:    55(bool) SpecConstantOp 171 465(si64) 69
+             471:    55(bool) SpecConstantOp 171 466(su64) 69
+             472:     18(int) SpecConstantOp 169 469(sb) 61 60
+             473:     14(int) SpecConstantOp 169 469(sb) 70 69
+             474:     31(int) SpecConstantOp 114 465(si64)
+             475:     18(int) SpecConstantOp 114 467(si)
+             476:     21(int) SpecConstantOp 113 466(su64)
+             477:     14(int) SpecConstantOp 113 468(su)
+             478:     18(int) SpecConstantOp 128 466(su64) 69
+             479:     14(int) SpecConstantOp 128 465(si64) 69
+             480:     31(int) SpecConstantOp 113 466(su64)
+             481:     31(int) SpecConstantOp 128 480 227
+             482:     18(int) SpecConstantOp 114 467(si)
+             483:     14(int) SpecConstantOp 128 482 69
+             484:     31(int) SpecConstantOp 114 465(si64)
+             485:     21(int) SpecConstantOp 128 484 227
+             486:     18(int) SpecConstantOp 113 468(su)
+             487:     18(int) SpecConstantOp 128 486 69
          4(main):           2 Function None 3
                5:             Label
                               Store 16(u64Max) 17
@@ -286,7 +287,7 @@ spv.int64.frag
         139(i64):     19(ptr) Variable Function
           159(i):    158(ptr) Variable Function
          166(uv):    165(ptr) Variable Function
-          221(b):    220(ptr) Variable Function
+          226(b):    225(ptr) Variable Function
              135:  132(ivec3) Load 134(u64v)
              137:  136(ivec3) CompositeConstruct 61 61 61
              138:  132(ivec3) IAdd 135 137
@@ -359,302 +360,308 @@ spv.int64.frag
              195:     18(int) SConvert 194
              196:     18(int) SMod 193 195
                               Store 139(i64) 196
-             197:     31(int) Load 159(i)
-             198:     18(int) SConvert 197
-             199:     14(int) Bitcast 198
-             200:  132(ivec3) Load 134(u64v)
-             201:  132(ivec3) CompositeConstruct 199 199 199
-             202:  132(ivec3) ShiftLeftLogical 200 201
-                              Store 134(u64v) 202
+             197:  132(ivec3) Load 134(u64v)
+             198:     31(int) Load 159(i)
+             200:  199(ivec3) CompositeConstruct 198 198 198
+             201:  132(ivec3) ShiftLeftLogical 197 200
+                              Store 134(u64v) 201
+             202:     18(int) Load 139(i64)
              205:    204(ptr) AccessChain 166(uv) 203
              206:     21(int) Load 205
-             207:     18(int) UConvert 206
-             208:     18(int) Bitcast 207
-             209:     18(int) Load 139(i64)
-             210:     18(int) ShiftRightArithmetic 209 208
-                              Store 139(i64) 210
-             211:     18(int) Load 139(i64)
-             213:     40(ptr) AccessChain 134(u64v) 212
-             214:     14(int) Load 213
-             215:     18(int) ShiftLeftLogical 211 214
+             207:     18(int) ShiftRightArithmetic 202 206
+                              Store 139(i64) 207
+             208:     31(int) Load 159(i)
+             209:  132(ivec3) Load 134(u64v)
+             210:  199(ivec3) CompositeConstruct 208 208 208
+             211:  132(ivec3) ShiftLeftLogical 209 210
+                              Store 134(u64v) 211
+             212:    204(ptr) AccessChain 166(uv) 203
+             213:     21(int) Load 212
+             214:     18(int) Load 139(i64)
+             215:     18(int) ShiftRightArithmetic 214 213
                               Store 139(i64) 215
-             216:  132(ivec3) Load 134(u64v)
-             217:     18(int) Load 139(i64)
-             218:  136(ivec3) CompositeConstruct 217 217 217
-             219:  132(ivec3) ShiftLeftLogical 216 218
-                              Store 134(u64v) 219
-             223:     40(ptr) AccessChain 134(u64v) 222
-             224:     14(int) Load 223
-             225:     18(int) Load 139(i64)
-             226:     14(int) Bitcast 225
-             227:    55(bool) INotEqual 224 226
-                              Store 221(b) 227
-             228:     18(int) Load 139(i64)
-             229:     14(int) Bitcast 228
-             230:     40(ptr) AccessChain 134(u64v) 222
-             231:     14(int) Load 230
-             232:    55(bool) IEqual 229 231
-                              Store 221(b) 232
-             233:     40(ptr) AccessChain 134(u64v) 222
-             234:     14(int) Load 233
-             235:    204(ptr) AccessChain 166(uv) 203
-             236:     21(int) Load 235
-             237:     14(int) UConvert 236
-             238:    55(bool) UGreaterThan 234 237
-                              Store 221(b) 238
-             239:     18(int) Load 139(i64)
-             240:     31(int) Load 159(i)
-             241:     18(int) SConvert 240
-             242:    55(bool) SLessThan 239 241
-                              Store 221(b) 242
-             243:     40(ptr) AccessChain 134(u64v) 203
-             244:     14(int) Load 243
-             245:    204(ptr) AccessChain 166(uv) 222
-             246:     21(int) Load 245
-             247:     14(int) UConvert 246
-             248:    55(bool) UGreaterThanEqual 244 247
-                              Store 221(b) 248
-             249:     18(int) Load 139(i64)
-             250:     31(int) Load 159(i)
-             251:     18(int) SConvert 250
-             252:    55(bool) SLessThanEqual 249 251
-                              Store 221(b) 252
-             253:     31(int) Load 159(i)
-             254:     18(int) SConvert 253
-             255:     14(int) Bitcast 254
-             256:  132(ivec3) Load 134(u64v)
-             257:  132(ivec3) CompositeConstruct 255 255 255
-             258:  132(ivec3) BitwiseOr 256 257
-                              Store 134(u64v) 258
-             259:     18(int) Load 139(i64)
-             260:     31(int) Load 159(i)
-             261:     18(int) SConvert 260
-             262:     18(int) BitwiseOr 259 261
-                              Store 139(i64) 262
-             263:     31(int) Load 159(i)
-             264:     18(int) SConvert 263
-             265:     18(int) Load 139(i64)
-             266:     18(int) BitwiseAnd 265 264
-                              Store 139(i64) 266
-             267:  132(ivec3) Load 134(u64v)
-             268:  164(ivec3) Load 166(uv)
-             269:  132(ivec3) UConvert 268
-             270:  132(ivec3) BitwiseAnd 267 269
-                              Store 134(u64v) 270
-             271:     18(int) Load 139(i64)
-             272:     14(int) Bitcast 271
-             273:  132(ivec3) Load 134(u64v)
-             274:  132(ivec3) CompositeConstruct 272 272 272
-             275:  132(ivec3) BitwiseXor 273 274
+             216:     18(int) Load 139(i64)
+             218:     40(ptr) AccessChain 134(u64v) 217
+             219:     14(int) Load 218
+             220:     18(int) ShiftLeftLogical 216 219
+                              Store 139(i64) 220
+             221:  132(ivec3) Load 134(u64v)
+             222:     18(int) Load 139(i64)
+             223:  136(ivec3) CompositeConstruct 222 222 222
+             224:  132(ivec3) ShiftLeftLogical 221 223
+                              Store 134(u64v) 224
+             228:     40(ptr) AccessChain 134(u64v) 227
+             229:     14(int) Load 228
+             230:     18(int) Load 139(i64)
+             231:     14(int) Bitcast 230
+             232:    55(bool) INotEqual 229 231
+                              Store 226(b) 232
+             233:     18(int) Load 139(i64)
+             234:     14(int) Bitcast 233
+             235:     40(ptr) AccessChain 134(u64v) 227
+             236:     14(int) Load 235
+             237:    55(bool) IEqual 234 236
+                              Store 226(b) 237
+             238:     40(ptr) AccessChain 134(u64v) 227
+             239:     14(int) Load 238
+             240:    204(ptr) AccessChain 166(uv) 203
+             241:     21(int) Load 240
+             242:     14(int) UConvert 241
+             243:    55(bool) UGreaterThan 239 242
+                              Store 226(b) 243
+             244:     18(int) Load 139(i64)
+             245:     31(int) Load 159(i)
+             246:     18(int) SConvert 245
+             247:    55(bool) SLessThan 244 246
+                              Store 226(b) 247
+             248:     40(ptr) AccessChain 134(u64v) 203
+             249:     14(int) Load 248
+             250:    204(ptr) AccessChain 166(uv) 227
+             251:     21(int) Load 250
+             252:     14(int) UConvert 251
+             253:    55(bool) UGreaterThanEqual 249 252
+                              Store 226(b) 253
+             254:     18(int) Load 139(i64)
+             255:     31(int) Load 159(i)
+             256:     18(int) SConvert 255
+             257:    55(bool) SLessThanEqual 254 256
+                              Store 226(b) 257
+             258:     31(int) Load 159(i)
+             259:     18(int) SConvert 258
+             260:     14(int) Bitcast 259
+             261:  132(ivec3) Load 134(u64v)
+             262:  132(ivec3) CompositeConstruct 260 260 260
+             263:  132(ivec3) BitwiseOr 261 262
+                              Store 134(u64v) 263
+             264:     18(int) Load 139(i64)
+             265:     31(int) Load 159(i)
+             266:     18(int) SConvert 265
+             267:     18(int) BitwiseOr 264 266
+                              Store 139(i64) 267
+             268:     31(int) Load 159(i)
+             269:     18(int) SConvert 268
+             270:     18(int) Load 139(i64)
+             271:     18(int) BitwiseAnd 270 269
+                              Store 139(i64) 271
+             272:  132(ivec3) Load 134(u64v)
+             273:  164(ivec3) Load 166(uv)
+             274:  132(ivec3) UConvert 273
+             275:  132(ivec3) BitwiseAnd 272 274
                               Store 134(u64v) 275
-             276:  132(ivec3) Load 134(u64v)
-             277:     18(int) Load 139(i64)
-             278:     14(int) Bitcast 277
-             279:  132(ivec3) CompositeConstruct 278 278 278
-             280:  132(ivec3) BitwiseXor 276 279
+             276:     18(int) Load 139(i64)
+             277:     14(int) Bitcast 276
+             278:  132(ivec3) Load 134(u64v)
+             279:  132(ivec3) CompositeConstruct 277 277 277
+             280:  132(ivec3) BitwiseXor 278 279
                               Store 134(u64v) 280
+             281:  132(ivec3) Load 134(u64v)
+             282:     18(int) Load 139(i64)
+             283:     14(int) Bitcast 282
+             284:  132(ivec3) CompositeConstruct 283 283 283
+             285:  132(ivec3) BitwiseXor 281 284
+                              Store 134(u64v) 285
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       281(i64v):     53(ptr) Variable Function
-        284(i64):     19(ptr) Variable Function
-       294(u64v):    133(ptr) Variable Function
-        296(u64):     40(ptr) Variable Function
-         368(dv):    367(ptr) Variable Function
-         387(iv):     75(ptr) Variable Function
-         392(uv):     82(ptr) Variable Function
-         396(bv):    395(ptr) Variable Function
-             282:   52(ivec2) Load 281(i64v)
-             283:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 282
-                              Store 281(i64v) 283
-             285:     18(int) Load 284(i64)
-             286:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 285
-                              Store 284(i64) 286
-             287:   52(ivec2) Load 281(i64v)
-             288:     18(int) Load 284(i64)
-             289:   52(ivec2) CompositeConstruct 288 288
-             290:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 287 289
-                              Store 281(i64v) 290
-             291:   52(ivec2) Load 281(i64v)
-             293:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 291 292
-                              Store 281(i64v) 293
-             295:  132(ivec3) Load 294(u64v)
-             297:     14(int) Load 296(u64)
-             298:  132(ivec3) CompositeConstruct 297 297 297
-             299:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 295 298
-                              Store 294(u64v) 299
-             300:  132(ivec3) Load 294(u64v)
-             302:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 301
-                              Store 294(u64v) 302
-             303:   52(ivec2) Load 281(i64v)
-             304:     18(int) Load 284(i64)
-             305:   52(ivec2) CompositeConstruct 304 304
-             306:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 303 305
-                              Store 281(i64v) 306
-             307:   52(ivec2) Load 281(i64v)
-             308:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 307 292
-                              Store 281(i64v) 308
-             309:  132(ivec3) Load 294(u64v)
-             310:     14(int) Load 296(u64)
-             311:  132(ivec3) CompositeConstruct 310 310 310
-             312:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 309 311
-                              Store 294(u64v) 312
-             313:  132(ivec3) Load 294(u64v)
-             314:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 313 301
-                              Store 294(u64v) 314
-             315:   52(ivec2) Load 281(i64v)
-             316:     18(int) Load 284(i64)
-             317:     18(int) SNegate 316
-             318:     18(int) Load 284(i64)
-             319:   52(ivec2) CompositeConstruct 317 317
-             320:   52(ivec2) CompositeConstruct 318 318
-             321:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 315 319 320
-                              Store 281(i64v) 321
-             322:   52(ivec2) Load 281(i64v)
-             323:   52(ivec2) Load 281(i64v)
-             324:   52(ivec2) SNegate 323
-             325:   52(ivec2) Load 281(i64v)
-             326:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 322 324 325
-                              Store 281(i64v) 326
-             327:  132(ivec3) Load 294(u64v)
-             328:     14(int) Load 296(u64)
-             329:     14(int) SNegate 328
-             330:     14(int) Load 296(u64)
-             331:  132(ivec3) CompositeConstruct 329 329 329
-             332:  132(ivec3) CompositeConstruct 330 330 330
-             333:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 327 331 332
-                              Store 294(u64v) 333
-             334:  132(ivec3) Load 294(u64v)
-             335:  132(ivec3) Load 294(u64v)
-             336:  132(ivec3) SNegate 335
-             337:  132(ivec3) Load 294(u64v)
-             338:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 334 336 337
-                              Store 294(u64v) 338
-             339:     19(ptr) AccessChain 281(i64v) 222
-             340:     18(int) Load 339
-             341:     19(ptr) AccessChain 281(i64v) 203
-             342:     18(int) Load 341
-             344:     18(int) Select 343 342 340
-                              Store 284(i64) 344
-             345:     18(int) Load 284(i64)
-             346:   52(ivec2) CompositeConstruct 345 345
-             347:     18(int) Load 284(i64)
-             348:     18(int) SNegate 347
-             349:   52(ivec2) CompositeConstruct 348 348
-             352:   52(ivec2) Select 351 349 346
-                              Store 281(i64v) 352
-             353:     40(ptr) AccessChain 294(u64v) 222
-             354:     14(int) Load 353
-             355:     40(ptr) AccessChain 294(u64v) 203
-             356:     14(int) Load 355
-             357:     14(int) Select 343 356 354
-                              Store 296(u64) 357
-             358:     14(int) Load 296(u64)
-             359:  132(ivec3) CompositeConstruct 358 358 358
-             360:     14(int) Load 296(u64)
-             361:     14(int) SNegate 360
-             362:  132(ivec3) CompositeConstruct 361 361 361
-             365:  132(ivec3) Select 364 362 359
-                              Store 294(u64v) 365
-             369:  366(fvec3) Load 368(dv)
-             370:   95(fvec2) VectorShuffle 369 369 0 1
-             371:   52(ivec2) Bitcast 370
-                              Store 281(i64v) 371
-             373:    372(ptr) AccessChain 368(dv) 212
-             374:   94(float) Load 373
-             375:     14(int) Bitcast 374
-             376:     40(ptr) AccessChain 294(u64v) 222
-                              Store 376 375
-             377:   52(ivec2) Load 281(i64v)
-             378:   95(fvec2) Bitcast 377
-             379:  366(fvec3) Load 368(dv)
-             380:  366(fvec3) VectorShuffle 379 378 3 4 2
-                              Store 368(dv) 380
-             381:  132(ivec3) Load 294(u64v)
-             382:  366(fvec3) Bitcast 381
-                              Store 368(dv) 382
-             386:     18(int) Bitcast 385
-                              Store 284(i64) 386
-             388:     18(int) Load 284(i64)
-             389:   74(ivec2) Bitcast 388
-                              Store 387(iv) 389
-             391:     14(int) Bitcast 390
-                              Store 296(u64) 391
-             393:     14(int) Load 296(u64)
-             394:   81(ivec2) Bitcast 393
-                              Store 392(uv) 394
-             397:  132(ivec3) Load 294(u64v)
-             398:     14(int) Load 296(u64)
-             399:  132(ivec3) CompositeConstruct 398 398 398
-             400:  363(bvec3) ULessThan 397 399
-                              Store 396(bv) 400
-             401:   52(ivec2) Load 281(i64v)
-             402:     18(int) Load 284(i64)
-             403:   52(ivec2) CompositeConstruct 402 402
-             404:   56(bvec2) SLessThan 401 403
-             405:  363(bvec3) Load 396(bv)
-             406:  363(bvec3) VectorShuffle 405 404 3 4 2
-                              Store 396(bv) 406
-             407:  132(ivec3) Load 294(u64v)
-             408:     14(int) Load 296(u64)
-             409:  132(ivec3) CompositeConstruct 408 408 408
-             410:  363(bvec3) ULessThanEqual 407 409
-                              Store 396(bv) 410
-             411:   52(ivec2) Load 281(i64v)
-             412:     18(int) Load 284(i64)
-             413:   52(ivec2) CompositeConstruct 412 412
-             414:   56(bvec2) SLessThanEqual 411 413
-             415:  363(bvec3) Load 396(bv)
-             416:  363(bvec3) VectorShuffle 415 414 3 4 2
-                              Store 396(bv) 416
-             417:  132(ivec3) Load 294(u64v)
-             418:     14(int) Load 296(u64)
-             419:  132(ivec3) CompositeConstruct 418 418 418
-             420:  363(bvec3) UGreaterThan 417 419
-                              Store 396(bv) 420
-             421:   52(ivec2) Load 281(i64v)
-             422:     18(int) Load 284(i64)
-             423:   52(ivec2) CompositeConstruct 422 422
-             424:   56(bvec2) SGreaterThan 421 423
-             425:  363(bvec3) Load 396(bv)
-             426:  363(bvec3) VectorShuffle 425 424 3 4 2
-                              Store 396(bv) 426
-             427:  132(ivec3) Load 294(u64v)
-             428:     14(int) Load 296(u64)
-             429:  132(ivec3) CompositeConstruct 428 428 428
-             430:  363(bvec3) UGreaterThanEqual 427 429
-                              Store 396(bv) 430
-             431:   52(ivec2) Load 281(i64v)
-             432:     18(int) Load 284(i64)
-             433:   52(ivec2) CompositeConstruct 432 432
-             434:   56(bvec2) SGreaterThanEqual 431 433
-             435:  363(bvec3) Load 396(bv)
-             436:  363(bvec3) VectorShuffle 435 434 3 4 2
-                              Store 396(bv) 436
-             437:  132(ivec3) Load 294(u64v)
-             438:     14(int) Load 296(u64)
-             439:  132(ivec3) CompositeConstruct 438 438 438
-             440:  363(bvec3) IEqual 437 439
-                              Store 396(bv) 440
-             441:   52(ivec2) Load 281(i64v)
-             442:     18(int) Load 284(i64)
-             443:   52(ivec2) CompositeConstruct 442 442
-             444:   56(bvec2) IEqual 441 443
-             445:  363(bvec3) Load 396(bv)
-             446:  363(bvec3) VectorShuffle 445 444 3 4 2
-                              Store 396(bv) 446
-             447:  132(ivec3) Load 294(u64v)
-             448:     14(int) Load 296(u64)
-             449:  132(ivec3) CompositeConstruct 448 448 448
-             450:  363(bvec3) INotEqual 447 449
-                              Store 396(bv) 450
-             451:   52(ivec2) Load 281(i64v)
-             452:     18(int) Load 284(i64)
-             453:   52(ivec2) CompositeConstruct 452 452
-             454:   56(bvec2) INotEqual 451 453
-             455:  363(bvec3) Load 396(bv)
-             456:  363(bvec3) VectorShuffle 455 454 3 4 2
-                              Store 396(bv) 456
+       286(i64v):     53(ptr) Variable Function
+        289(i64):     19(ptr) Variable Function
+       299(u64v):    133(ptr) Variable Function
+        301(u64):     40(ptr) Variable Function
+         373(dv):    372(ptr) Variable Function
+         392(iv):     75(ptr) Variable Function
+         397(uv):     82(ptr) Variable Function
+         401(bv):    400(ptr) Variable Function
+             287:   52(ivec2) Load 286(i64v)
+             288:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 287
+                              Store 286(i64v) 288
+             290:     18(int) Load 289(i64)
+             291:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 290
+                              Store 289(i64) 291
+             292:   52(ivec2) Load 286(i64v)
+             293:     18(int) Load 289(i64)
+             294:   52(ivec2) CompositeConstruct 293 293
+             295:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 292 294
+                              Store 286(i64v) 295
+             296:   52(ivec2) Load 286(i64v)
+             298:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 296 297
+                              Store 286(i64v) 298
+             300:  132(ivec3) Load 299(u64v)
+             302:     14(int) Load 301(u64)
+             303:  132(ivec3) CompositeConstruct 302 302 302
+             304:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 303
+                              Store 299(u64v) 304
+             305:  132(ivec3) Load 299(u64v)
+             307:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 305 306
+                              Store 299(u64v) 307
+             308:   52(ivec2) Load 286(i64v)
+             309:     18(int) Load 289(i64)
+             310:   52(ivec2) CompositeConstruct 309 309
+             311:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 308 310
+                              Store 286(i64v) 311
+             312:   52(ivec2) Load 286(i64v)
+             313:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 312 297
+                              Store 286(i64v) 313
+             314:  132(ivec3) Load 299(u64v)
+             315:     14(int) Load 301(u64)
+             316:  132(ivec3) CompositeConstruct 315 315 315
+             317:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 314 316
+                              Store 299(u64v) 317
+             318:  132(ivec3) Load 299(u64v)
+             319:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 318 306
+                              Store 299(u64v) 319
+             320:   52(ivec2) Load 286(i64v)
+             321:     18(int) Load 289(i64)
+             322:     18(int) SNegate 321
+             323:     18(int) Load 289(i64)
+             324:   52(ivec2) CompositeConstruct 322 322
+             325:   52(ivec2) CompositeConstruct 323 323
+             326:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 320 324 325
+                              Store 286(i64v) 326
+             327:   52(ivec2) Load 286(i64v)
+             328:   52(ivec2) Load 286(i64v)
+             329:   52(ivec2) SNegate 328
+             330:   52(ivec2) Load 286(i64v)
+             331:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 327 329 330
+                              Store 286(i64v) 331
+             332:  132(ivec3) Load 299(u64v)
+             333:     14(int) Load 301(u64)
+             334:     14(int) SNegate 333
+             335:     14(int) Load 301(u64)
+             336:  132(ivec3) CompositeConstruct 334 334 334
+             337:  132(ivec3) CompositeConstruct 335 335 335
+             338:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 332 336 337
+                              Store 299(u64v) 338
+             339:  132(ivec3) Load 299(u64v)
+             340:  132(ivec3) Load 299(u64v)
+             341:  132(ivec3) SNegate 340
+             342:  132(ivec3) Load 299(u64v)
+             343:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 339 341 342
+                              Store 299(u64v) 343
+             344:     19(ptr) AccessChain 286(i64v) 227
+             345:     18(int) Load 344
+             346:     19(ptr) AccessChain 286(i64v) 203
+             347:     18(int) Load 346
+             349:     18(int) Select 348 347 345
+                              Store 289(i64) 349
+             350:     18(int) Load 289(i64)
+             351:   52(ivec2) CompositeConstruct 350 350
+             352:     18(int) Load 289(i64)
+             353:     18(int) SNegate 352
+             354:   52(ivec2) CompositeConstruct 353 353
+             357:   52(ivec2) Select 356 354 351
+                              Store 286(i64v) 357
+             358:     40(ptr) AccessChain 299(u64v) 227
+             359:     14(int) Load 358
+             360:     40(ptr) AccessChain 299(u64v) 203
+             361:     14(int) Load 360
+             362:     14(int) Select 348 361 359
+                              Store 301(u64) 362
+             363:     14(int) Load 301(u64)
+             364:  132(ivec3) CompositeConstruct 363 363 363
+             365:     14(int) Load 301(u64)
+             366:     14(int) SNegate 365
+             367:  132(ivec3) CompositeConstruct 366 366 366
+             370:  132(ivec3) Select 369 367 364
+                              Store 299(u64v) 370
+             374:  371(fvec3) Load 373(dv)
+             375:   95(fvec2) VectorShuffle 374 374 0 1
+             376:   52(ivec2) Bitcast 375
+                              Store 286(i64v) 376
+             378:    377(ptr) AccessChain 373(dv) 217
+             379:   94(float) Load 378
+             380:     14(int) Bitcast 379
+             381:     40(ptr) AccessChain 299(u64v) 227
+                              Store 381 380
+             382:   52(ivec2) Load 286(i64v)
+             383:   95(fvec2) Bitcast 382
+             384:  371(fvec3) Load 373(dv)
+             385:  371(fvec3) VectorShuffle 384 383 3 4 2
+                              Store 373(dv) 385
+             386:  132(ivec3) Load 299(u64v)
+             387:  371(fvec3) Bitcast 386
+                              Store 373(dv) 387
+             391:     18(int) Bitcast 390
+                              Store 289(i64) 391
+             393:     18(int) Load 289(i64)
+             394:   74(ivec2) Bitcast 393
+                              Store 392(iv) 394
+             396:     14(int) Bitcast 395
+                              Store 301(u64) 396
+             398:     14(int) Load 301(u64)
+             399:   81(ivec2) Bitcast 398
+                              Store 397(uv) 399
+             402:  132(ivec3) Load 299(u64v)
+             403:     14(int) Load 301(u64)
+             404:  132(ivec3) CompositeConstruct 403 403 403
+             405:  368(bvec3) ULessThan 402 404
+                              Store 401(bv) 405
+             406:   52(ivec2) Load 286(i64v)
+             407:     18(int) Load 289(i64)
+             408:   52(ivec2) CompositeConstruct 407 407
+             409:   56(bvec2) SLessThan 406 408
+             410:  368(bvec3) Load 401(bv)
+             411:  368(bvec3) VectorShuffle 410 409 3 4 2
+                              Store 401(bv) 411
+             412:  132(ivec3) Load 299(u64v)
+             413:     14(int) Load 301(u64)
+             414:  132(ivec3) CompositeConstruct 413 413 413
+             415:  368(bvec3) ULessThanEqual 412 414
+                              Store 401(bv) 415
+             416:   52(ivec2) Load 286(i64v)
+             417:     18(int) Load 289(i64)
+             418:   52(ivec2) CompositeConstruct 417 417
+             419:   56(bvec2) SLessThanEqual 416 418
+             420:  368(bvec3) Load 401(bv)
+             421:  368(bvec3) VectorShuffle 420 419 3 4 2
+                              Store 401(bv) 421
+             422:  132(ivec3) Load 299(u64v)
+             423:     14(int) Load 301(u64)
+             424:  132(ivec3) CompositeConstruct 423 423 423
+             425:  368(bvec3) UGreaterThan 422 424
+                              Store 401(bv) 425
+             426:   52(ivec2) Load 286(i64v)
+             427:     18(int) Load 289(i64)
+             428:   52(ivec2) CompositeConstruct 427 427
+             429:   56(bvec2) SGreaterThan 426 428
+             430:  368(bvec3) Load 401(bv)
+             431:  368(bvec3) VectorShuffle 430 429 3 4 2
+                              Store 401(bv) 431
+             432:  132(ivec3) Load 299(u64v)
+             433:     14(int) Load 301(u64)
+             434:  132(ivec3) CompositeConstruct 433 433 433
+             435:  368(bvec3) UGreaterThanEqual 432 434
+                              Store 401(bv) 435
+             436:   52(ivec2) Load 286(i64v)
+             437:     18(int) Load 289(i64)
+             438:   52(ivec2) CompositeConstruct 437 437
+             439:   56(bvec2) SGreaterThanEqual 436 438
+             440:  368(bvec3) Load 401(bv)
+             441:  368(bvec3) VectorShuffle 440 439 3 4 2
+                              Store 401(bv) 441
+             442:  132(ivec3) Load 299(u64v)
+             443:     14(int) Load 301(u64)
+             444:  132(ivec3) CompositeConstruct 443 443 443
+             445:  368(bvec3) IEqual 442 444
+                              Store 401(bv) 445
+             446:   52(ivec2) Load 286(i64v)
+             447:     18(int) Load 289(i64)
+             448:   52(ivec2) CompositeConstruct 447 447
+             449:   56(bvec2) IEqual 446 448
+             450:  368(bvec3) Load 401(bv)
+             451:  368(bvec3) VectorShuffle 450 449 3 4 2
+                              Store 401(bv) 451
+             452:  132(ivec3) Load 299(u64v)
+             453:     14(int) Load 301(u64)
+             454:  132(ivec3) CompositeConstruct 453 453 453
+             455:  368(bvec3) INotEqual 452 454
+                              Store 401(bv) 455
+             456:   52(ivec2) Load 286(i64v)
+             457:     18(int) Load 289(i64)
+             458:   52(ivec2) CompositeConstruct 457 457
+             459:   56(bvec2) INotEqual 456 458
+             460:  368(bvec3) Load 401(bv)
+             461:  368(bvec3) VectorShuffle 460 459 3 4 2
+                              Store 401(bv) 461
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out
new file mode 100755 (executable)
index 0000000..4cdb6d5
--- /dev/null
@@ -0,0 +1,57 @@
+spv.rankShift.comp
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 33
+
+                              Capability Shader
+                              Capability Int64
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 54 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              Name 4  "main"
+                              Name 8  "result"
+                              Name 11  "arg0"
+                              Name 15  "arg1"
+                              Decorate 11(arg0) Location 4
+                              Decorate 15(arg1) Location 5
+                              Decorate 32 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 64 0
+               7:             TypePointer Function 6(int)
+               9:             TypeInt 64 1
+              10:             TypePointer UniformConstant 9(int)
+        11(arg0):     10(ptr) Variable UniformConstant
+              13:             TypeInt 32 0
+              14:             TypePointer UniformConstant 13(int)
+        15(arg1):     14(ptr) Variable UniformConstant
+              29:             TypeVector 13(int) 3
+              30:     13(int) Constant 54
+              31:     13(int) Constant 1
+              32:   29(ivec3) ConstantComposite 30 31 31
+         4(main):           2 Function None 3
+               5:             Label
+       8(result):      7(ptr) Variable Function
+              12:      9(int) Load 11(arg0)
+              16:     13(int) Load 15(arg1)
+              17:      9(int) ShiftLeftLogical 12 16
+              18:      6(int) Bitcast 17
+                              Store 8(result) 18
+              19:      9(int) Load 11(arg0)
+              20:     13(int) Load 15(arg1)
+              21:      9(int) ShiftRightArithmetic 19 20
+              22:      6(int) Bitcast 21
+                              Store 8(result) 22
+              23:     13(int) Load 15(arg1)
+              24:      6(int) Load 8(result)
+              25:      6(int) ShiftLeftLogical 24 23
+                              Store 8(result) 25
+              26:     13(int) Load 15(arg1)
+              27:      6(int) Load 8(result)
+              28:      6(int) ShiftRightLogical 27 26
+                              Store 8(result) 28
+                              Return
+                              FunctionEnd
index c8135a1..6639dc7 100755 (executable)
@@ -1,7 +1,7 @@
 spv.vulkan110.int16.frag
 // Module Version 10300
 // Generated by (magic number): 80006
-// Id's are bound by 525
+// Id's are bound by 523
 
                               Capability Shader
                               Capability Float16
@@ -52,48 +52,48 @@ spv.vulkan110.int16.frag
                               Name 220  "i"
                               Name 227  "uv"
                               Name 243  "i64"
-                              Name 283  "b"
-                              Name 345  "i16v"
-                              Name 348  "i16"
-                              Name 358  "u16v"
-                              Name 360  "u16"
-                              Name 430  "i32"
-                              Name 433  "i64"
-                              Name 436  "i16v4"
-                              Name 439  "u32"
-                              Name 440  "u16v2"
-                              Name 444  "u64"
-                              Name 447  "u16v4"
-                              Name 459  "bv"
-                              Name 520  "Block"
-                              MemberName 520(Block) 0  "i16"
-                              MemberName 520(Block) 1  "i16v2"
-                              MemberName 520(Block) 2  "i16v3"
-                              MemberName 520(Block) 3  "i16v4"
-                              MemberName 520(Block) 4  "u16"
-                              MemberName 520(Block) 5  "u16v2"
-                              MemberName 520(Block) 6  "u16v3"
-                              MemberName 520(Block) 7  "u16v4"
-                              Name 522  "block"
-                              Name 523  "si16"
-                              Name 524  "su16"
+                              Name 281  "b"
+                              Name 343  "i16v"
+                              Name 346  "i16"
+                              Name 356  "u16v"
+                              Name 358  "u16"
+                              Name 428  "i32"
+                              Name 431  "i64"
+                              Name 434  "i16v4"
+                              Name 437  "u32"
+                              Name 438  "u16v2"
+                              Name 442  "u64"
+                              Name 445  "u16v4"
+                              Name 457  "bv"
+                              Name 518  "Block"
+                              MemberName 518(Block) 0  "i16"
+                              MemberName 518(Block) 1  "i16v2"
+                              MemberName 518(Block) 2  "i16v3"
+                              MemberName 518(Block) 3  "i16v4"
+                              MemberName 518(Block) 4  "u16"
+                              MemberName 518(Block) 5  "u16v2"
+                              MemberName 518(Block) 6  "u16v3"
+                              MemberName 518(Block) 7  "u16v4"
+                              Name 520  "block"
+                              Name 521  "si16"
+                              Name 522  "su16"
                               MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 24(Uniforms) Block
                               Decorate 26 DescriptorSet 0
                               Decorate 26 Binding 0
-                              MemberDecorate 520(Block) 0 Offset 0
-                              MemberDecorate 520(Block) 1 Offset 4
-                              MemberDecorate 520(Block) 2 Offset 8
-                              MemberDecorate 520(Block) 3 Offset 16
-                              MemberDecorate 520(Block) 4 Offset 24
-                              MemberDecorate 520(Block) 5 Offset 28
-                              MemberDecorate 520(Block) 6 Offset 32
-                              MemberDecorate 520(Block) 7 Offset 40
-                              Decorate 520(Block) Block
-                              Decorate 522(block) DescriptorSet 0
-                              Decorate 522(block) Binding 1
-                              Decorate 523(si16) SpecId 100
-                              Decorate 524(su16) SpecId 101
+                              MemberDecorate 518(Block) 0 Offset 0
+                              MemberDecorate 518(Block) 1 Offset 4
+                              MemberDecorate 518(Block) 2 Offset 8
+                              MemberDecorate 518(Block) 3 Offset 16
+                              MemberDecorate 518(Block) 4 Offset 24
+                              MemberDecorate 518(Block) 5 Offset 28
+                              MemberDecorate 518(Block) 6 Offset 32
+                              MemberDecorate 518(Block) 7 Offset 40
+                              Decorate 518(Block) Block
+                              Decorate 520(block) DescriptorSet 0
+                              Decorate 520(block) Binding 1
+                              Decorate 521(si16) SpecId 100
+                              Decorate 522(su16) SpecId 101
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 16 1
@@ -168,28 +168,28 @@ spv.vulkan110.int16.frag
              242:             TypePointer Function 71(int)
              264:     17(int) Constant 1
              270:     17(int) Constant 2
-             275:             TypeVector 27(int) 3
-             282:             TypePointer Function 173(bool)
-             284:     17(int) Constant 0
-             298:             TypePointer Function 17(int)
-             356:   52(ivec2) ConstantComposite 21 21
-             365:  193(ivec3) ConstantComposite 184 184 184
-             407:   173(bool) ConstantTrue
-             414:   173(bool) ConstantFalse
-             415:  174(bvec2) ConstantComposite 414 414
-             427:             TypeVector 173(bool) 3
-             428:  427(bvec3) ConstantComposite 414 414 414
-             434:             TypeVector 14(int) 4
-             435:             TypePointer Function 434(ivec4)
-             443:             TypePointer Function 77(int)
-             445:             TypeVector 36(int) 4
-             446:             TypePointer Function 445(ivec4)
-             458:             TypePointer Function 427(bvec3)
-      520(Block):             TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4)
-             521:             TypePointer Uniform 520(Block)
-      522(block):    521(ptr) Variable Uniform
-       523(si16):     14(int) SpecConstant 4294967286
-       524(su16):     36(int) SpecConstant 20
+             276:             TypeVector 27(int) 3
+             280:             TypePointer Function 173(bool)
+             282:     17(int) Constant 0
+             296:             TypePointer Function 17(int)
+             354:   52(ivec2) ConstantComposite 21 21
+             363:  193(ivec3) ConstantComposite 184 184 184
+             405:   173(bool) ConstantTrue
+             412:   173(bool) ConstantFalse
+             413:  174(bvec2) ConstantComposite 412 412
+             425:             TypeVector 173(bool) 3
+             426:  425(bvec3) ConstantComposite 412 412 412
+             432:             TypeVector 14(int) 4
+             433:             TypePointer Function 432(ivec4)
+             441:             TypePointer Function 77(int)
+             443:             TypeVector 36(int) 4
+             444:             TypePointer Function 443(ivec4)
+             456:             TypePointer Function 425(bvec3)
+      518(Block):             TypeStruct 14(int) 52(ivec2) 197(ivec3) 432(ivec4) 36(int) 57(ivec2) 193(ivec3) 443(ivec4)
+             519:             TypePointer Uniform 518(Block)
+      520(block):    519(ptr) Variable Uniform
+       521(si16):     14(int) SpecConstant 4294967286
+       522(su16):     36(int) SpecConstant 20
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -368,7 +368,7 @@ spv.vulkan110.int16.frag
           220(i):    219(ptr) Variable Function
          227(uv):    226(ptr) Variable Function
         243(i64):    242(ptr) Variable Function
-          283(b):    282(ptr) Variable Function
+          281(b):    280(ptr) Variable Function
              196:  193(ivec3) Load 195(u16v)
              198:  197(ivec3) CompositeConstruct 179 179 179
              199:  193(ivec3) IAdd 196 198
@@ -457,287 +457,285 @@ spv.vulkan110.int16.frag
              273:     14(int) ShiftLeftLogical 269 272
                               Store 200(i16) 273
              274:  193(ivec3) Load 195(u16v)
-             276:  275(ivec3) UConvert 274
-             277:  275(ivec3) Bitcast 276
-             278:     27(int) Load 220(i)
-             279:  275(ivec3) CompositeConstruct 278 278 278
-             280:  275(ivec3) ShiftLeftLogical 277 279
-             281:  225(ivec3) Bitcast 280
-                              Store 227(uv) 281
-             285:     37(ptr) AccessChain 195(u16v) 284
-             286:     36(int) Load 285
-             287:     14(int) Load 200(i16)
-             288:     36(int) Bitcast 287
-             289:   173(bool) INotEqual 286 288
-                              Store 283(b) 289
-             290:     14(int) Load 200(i16)
-             291:     36(int) Bitcast 290
-             292:     37(ptr) AccessChain 195(u16v) 284
-             293:     36(int) Load 292
-             294:   173(bool) IEqual 291 293
-                              Store 283(b) 294
-             295:     37(ptr) AccessChain 195(u16v) 284
-             296:     36(int) Load 295
-             297:     17(int) UConvert 296
-             299:    298(ptr) AccessChain 227(uv) 264
-             300:     17(int) Load 299
-             301:   173(bool) UGreaterThan 297 300
-                              Store 283(b) 301
-             302:     14(int) Load 200(i16)
-             303:     27(int) SConvert 302
-             304:     27(int) Load 220(i)
-             305:   173(bool) SLessThan 303 304
-                              Store 283(b) 305
-             306:     37(ptr) AccessChain 195(u16v) 264
-             307:     36(int) Load 306
-             308:     17(int) UConvert 307
-             309:    298(ptr) AccessChain 227(uv) 284
-             310:     17(int) Load 309
-             311:   173(bool) UGreaterThanEqual 308 310
-                              Store 283(b) 311
-             312:     14(int) Load 200(i16)
-             313:     27(int) SConvert 312
-             314:     27(int) Load 220(i)
-             315:   173(bool) SLessThanEqual 313 314
-                              Store 283(b) 315
-             316:     14(int) Load 200(i16)
-             317:     27(int) SConvert 316
-             318:     17(int) Bitcast 317
-             319:  225(ivec3) Load 227(uv)
-             320:  225(ivec3) CompositeConstruct 318 318 318
-             321:  225(ivec3) BitwiseOr 319 320
-                              Store 227(uv) 321
-             322:     14(int) Load 200(i16)
-             323:     27(int) SConvert 322
-             324:     27(int) Load 220(i)
-             325:     27(int) BitwiseOr 323 324
-                              Store 220(i) 325
-             326:     14(int) Load 200(i16)
-             327:     71(int) SConvert 326
-             328:     71(int) Load 243(i64)
-             329:     71(int) BitwiseAnd 328 327
-                              Store 243(i64) 329
-             330:  193(ivec3) Load 195(u16v)
-             331:  225(ivec3) UConvert 330
-             332:  225(ivec3) Load 227(uv)
-             333:  225(ivec3) BitwiseAnd 331 332
-                              Store 227(uv) 333
-             334:     14(int) Load 200(i16)
-             335:     27(int) SConvert 334
-             336:     17(int) Bitcast 335
-             337:  225(ivec3) Load 227(uv)
-             338:  225(ivec3) CompositeConstruct 336 336 336
-             339:  225(ivec3) BitwiseXor 337 338
-                              Store 227(uv) 339
-             340:  193(ivec3) Load 195(u16v)
-             341:     14(int) Load 200(i16)
-             342:     36(int) Bitcast 341
-             343:  193(ivec3) CompositeConstruct 342 342 342
-             344:  193(ivec3) BitwiseXor 340 343
-                              Store 195(u16v) 344
+             275:     27(int) Load 220(i)
+             277:  276(ivec3) CompositeConstruct 275 275 275
+             278:  193(ivec3) ShiftLeftLogical 274 277
+             279:  225(ivec3) UConvert 278
+                              Store 227(uv) 279
+             283:     37(ptr) AccessChain 195(u16v) 282
+             284:     36(int) Load 283
+             285:     14(int) Load 200(i16)
+             286:     36(int) Bitcast 285
+             287:   173(bool) INotEqual 284 286
+                              Store 281(b) 287
+             288:     14(int) Load 200(i16)
+             289:     36(int) Bitcast 288
+             290:     37(ptr) AccessChain 195(u16v) 282
+             291:     36(int) Load 290
+             292:   173(bool) IEqual 289 291
+                              Store 281(b) 292
+             293:     37(ptr) AccessChain 195(u16v) 282
+             294:     36(int) Load 293
+             295:     17(int) UConvert 294
+             297:    296(ptr) AccessChain 227(uv) 264
+             298:     17(int) Load 297
+             299:   173(bool) UGreaterThan 295 298
+                              Store 281(b) 299
+             300:     14(int) Load 200(i16)
+             301:     27(int) SConvert 300
+             302:     27(int) Load 220(i)
+             303:   173(bool) SLessThan 301 302
+                              Store 281(b) 303
+             304:     37(ptr) AccessChain 195(u16v) 264
+             305:     36(int) Load 304
+             306:     17(int) UConvert 305
+             307:    296(ptr) AccessChain 227(uv) 282
+             308:     17(int) Load 307
+             309:   173(bool) UGreaterThanEqual 306 308
+                              Store 281(b) 309
+             310:     14(int) Load 200(i16)
+             311:     27(int) SConvert 310
+             312:     27(int) Load 220(i)
+             313:   173(bool) SLessThanEqual 311 312
+                              Store 281(b) 313
+             314:     14(int) Load 200(i16)
+             315:     27(int) SConvert 314
+             316:     17(int) Bitcast 315
+             317:  225(ivec3) Load 227(uv)
+             318:  225(ivec3) CompositeConstruct 316 316 316
+             319:  225(ivec3) BitwiseOr 317 318
+                              Store 227(uv) 319
+             320:     14(int) Load 200(i16)
+             321:     27(int) SConvert 320
+             322:     27(int) Load 220(i)
+             323:     27(int) BitwiseOr 321 322
+                              Store 220(i) 323
+             324:     14(int) Load 200(i16)
+             325:     71(int) SConvert 324
+             326:     71(int) Load 243(i64)
+             327:     71(int) BitwiseAnd 326 325
+                              Store 243(i64) 327
+             328:  193(ivec3) Load 195(u16v)
+             329:  225(ivec3) UConvert 328
+             330:  225(ivec3) Load 227(uv)
+             331:  225(ivec3) BitwiseAnd 329 330
+                              Store 227(uv) 331
+             332:     14(int) Load 200(i16)
+             333:     27(int) SConvert 332
+             334:     17(int) Bitcast 333
+             335:  225(ivec3) Load 227(uv)
+             336:  225(ivec3) CompositeConstruct 334 334 334
+             337:  225(ivec3) BitwiseXor 335 336
+                              Store 227(uv) 337
+             338:  193(ivec3) Load 195(u16v)
+             339:     14(int) Load 200(i16)
+             340:     36(int) Bitcast 339
+             341:  193(ivec3) CompositeConstruct 340 340 340
+             342:  193(ivec3) BitwiseXor 338 341
+                              Store 195(u16v) 342
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       345(i16v):     53(ptr) Variable Function
-        348(i16):     15(ptr) Variable Function
-       358(u16v):    194(ptr) Variable Function
-        360(u16):     37(ptr) Variable Function
-        430(i32):    219(ptr) Variable Function
-        433(i64):    242(ptr) Variable Function
-      436(i16v4):    435(ptr) Variable Function
-        439(u32):    298(ptr) Variable Function
-      440(u16v2):     58(ptr) Variable Function
-        444(u64):    443(ptr) Variable Function
-      447(u16v4):    446(ptr) Variable Function
-         459(bv):    458(ptr) Variable Function
-             346:   52(ivec2) Load 345(i16v)
-             347:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346
-                              Store 345(i16v) 347
-             349:     14(int) Load 348(i16)
-             350:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349
-                              Store 348(i16) 350
-             351:   52(ivec2) Load 345(i16v)
-             352:     14(int) Load 348(i16)
-             353:   52(ivec2) CompositeConstruct 352 352
-             354:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353
-                              Store 345(i16v) 354
-             355:   52(ivec2) Load 345(i16v)
-             357:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356
-                              Store 345(i16v) 357
-             359:  193(ivec3) Load 358(u16v)
-             361:     36(int) Load 360(u16)
-             362:  193(ivec3) CompositeConstruct 361 361 361
-             363:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362
-                              Store 358(u16v) 363
-             364:  193(ivec3) Load 358(u16v)
-             366:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365
-                              Store 358(u16v) 366
-             367:   52(ivec2) Load 345(i16v)
-             368:     14(int) Load 348(i16)
-             369:   52(ivec2) CompositeConstruct 368 368
-             370:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369
-                              Store 345(i16v) 370
-             371:   52(ivec2) Load 345(i16v)
-             372:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356
-                              Store 345(i16v) 372
-             373:  193(ivec3) Load 358(u16v)
-             374:     36(int) Load 360(u16)
-             375:  193(ivec3) CompositeConstruct 374 374 374
-             376:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375
-                              Store 358(u16v) 376
-             377:  193(ivec3) Load 358(u16v)
-             378:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365
-                              Store 358(u16v) 378
-             379:   52(ivec2) Load 345(i16v)
-             380:     14(int) Load 348(i16)
-             381:     14(int) SNegate 380
-             382:     14(int) Load 348(i16)
-             383:   52(ivec2) CompositeConstruct 381 381
-             384:   52(ivec2) CompositeConstruct 382 382
-             385:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384
-                              Store 345(i16v) 385
-             386:   52(ivec2) Load 345(i16v)
-             387:   52(ivec2) Load 345(i16v)
-             388:   52(ivec2) SNegate 387
-             389:   52(ivec2) Load 345(i16v)
-             390:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389
-                              Store 345(i16v) 390
-             391:  193(ivec3) Load 358(u16v)
-             392:     36(int) Load 360(u16)
-             393:     36(int) SNegate 392
-             394:     36(int) Load 360(u16)
-             395:  193(ivec3) CompositeConstruct 393 393 393
-             396:  193(ivec3) CompositeConstruct 394 394 394
-             397:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396
-                              Store 358(u16v) 397
-             398:  193(ivec3) Load 358(u16v)
-             399:  193(ivec3) Load 358(u16v)
-             400:  193(ivec3) SNegate 399
-             401:  193(ivec3) Load 358(u16v)
-             402:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401
-                              Store 358(u16v) 402
-             403:     15(ptr) AccessChain 345(i16v) 284
+       343(i16v):     53(ptr) Variable Function
+        346(i16):     15(ptr) Variable Function
+       356(u16v):    194(ptr) Variable Function
+        358(u16):     37(ptr) Variable Function
+        428(i32):    219(ptr) Variable Function
+        431(i64):    242(ptr) Variable Function
+      434(i16v4):    433(ptr) Variable Function
+        437(u32):    296(ptr) Variable Function
+      438(u16v2):     58(ptr) Variable Function
+        442(u64):    441(ptr) Variable Function
+      445(u16v4):    444(ptr) Variable Function
+         457(bv):    456(ptr) Variable Function
+             344:   52(ivec2) Load 343(i16v)
+             345:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344
+                              Store 343(i16v) 345
+             347:     14(int) Load 346(i16)
+             348:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 347
+                              Store 346(i16) 348
+             349:   52(ivec2) Load 343(i16v)
+             350:     14(int) Load 346(i16)
+             351:   52(ivec2) CompositeConstruct 350 350
+             352:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351
+                              Store 343(i16v) 352
+             353:   52(ivec2) Load 343(i16v)
+             355:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354
+                              Store 343(i16v) 355
+             357:  193(ivec3) Load 356(u16v)
+             359:     36(int) Load 358(u16)
+             360:  193(ivec3) CompositeConstruct 359 359 359
+             361:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360
+                              Store 356(u16v) 361
+             362:  193(ivec3) Load 356(u16v)
+             364:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363
+                              Store 356(u16v) 364
+             365:   52(ivec2) Load 343(i16v)
+             366:     14(int) Load 346(i16)
+             367:   52(ivec2) CompositeConstruct 366 366
+             368:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367
+                              Store 343(i16v) 368
+             369:   52(ivec2) Load 343(i16v)
+             370:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354
+                              Store 343(i16v) 370
+             371:  193(ivec3) Load 356(u16v)
+             372:     36(int) Load 358(u16)
+             373:  193(ivec3) CompositeConstruct 372 372 372
+             374:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373
+                              Store 356(u16v) 374
+             375:  193(ivec3) Load 356(u16v)
+             376:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363
+                              Store 356(u16v) 376
+             377:   52(ivec2) Load 343(i16v)
+             378:     14(int) Load 346(i16)
+             379:     14(int) SNegate 378
+             380:     14(int) Load 346(i16)
+             381:   52(ivec2) CompositeConstruct 379 379
+             382:   52(ivec2) CompositeConstruct 380 380
+             383:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382
+                              Store 343(i16v) 383
+             384:   52(ivec2) Load 343(i16v)
+             385:   52(ivec2) Load 343(i16v)
+             386:   52(ivec2) SNegate 385
+             387:   52(ivec2) Load 343(i16v)
+             388:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387
+                              Store 343(i16v) 388
+             389:  193(ivec3) Load 356(u16v)
+             390:     36(int) Load 358(u16)
+             391:     36(int) SNegate 390
+             392:     36(int) Load 358(u16)
+             393:  193(ivec3) CompositeConstruct 391 391 391
+             394:  193(ivec3) CompositeConstruct 392 392 392
+             395:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394
+                              Store 356(u16v) 395
+             396:  193(ivec3) Load 356(u16v)
+             397:  193(ivec3) Load 356(u16v)
+             398:  193(ivec3) SNegate 397
+             399:  193(ivec3) Load 356(u16v)
+             400:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399
+                              Store 356(u16v) 400
+             401:     15(ptr) AccessChain 343(i16v) 282
+             402:     14(int) Load 401
+             403:     15(ptr) AccessChain 343(i16v) 264
              404:     14(int) Load 403
-             405:     15(ptr) AccessChain 345(i16v) 264
-             406:     14(int) Load 405
-             408:     14(int) Select 407 406 404
-                              Store 348(i16) 408
-             409:     14(int) Load 348(i16)
-             410:   52(ivec2) CompositeConstruct 409 409
-             411:     14(int) Load 348(i16)
-             412:     14(int) SNegate 411
-             413:   52(ivec2) CompositeConstruct 412 412
-             416:   52(ivec2) Select 415 413 410
-                              Store 345(i16v) 416
-             417:     37(ptr) AccessChain 358(u16v) 284
+             406:     14(int) Select 405 404 402
+                              Store 346(i16) 406
+             407:     14(int) Load 346(i16)
+             408:   52(ivec2) CompositeConstruct 407 407
+             409:     14(int) Load 346(i16)
+             410:     14(int) SNegate 409
+             411:   52(ivec2) CompositeConstruct 410 410
+             414:   52(ivec2) Select 413 411 408
+                              Store 343(i16v) 414
+             415:     37(ptr) AccessChain 356(u16v) 282
+             416:     36(int) Load 415
+             417:     37(ptr) AccessChain 356(u16v) 264
              418:     36(int) Load 417
-             419:     37(ptr) AccessChain 358(u16v) 264
-             420:     36(int) Load 419
-             421:     36(int) Select 407 420 418
-                              Store 360(u16) 421
-             422:     36(int) Load 360(u16)
-             423:  193(ivec3) CompositeConstruct 422 422 422
-             424:     36(int) Load 360(u16)
-             425:     36(int) SNegate 424
-             426:  193(ivec3) CompositeConstruct 425 425 425
-             429:  193(ivec3) Select 428 426 423
-                              Store 358(u16v) 429
-             431:   52(ivec2) Load 345(i16v)
-             432:     27(int) Bitcast 431
-                              Store 430(i32) 432
-             437:  434(ivec4) Load 436(i16v4)
-             438:     71(int) Bitcast 437
-                              Store 433(i64) 438
-             441:   57(ivec2) Load 440(u16v2)
-             442:     17(int) Bitcast 441
-                              Store 439(u32) 442
-             448:  445(ivec4) Load 447(u16v4)
-             449:     77(int) Bitcast 448
-                              Store 444(u64) 449
-             450:     27(int) Load 430(i32)
-             451:   52(ivec2) Bitcast 450
-                              Store 345(i16v) 451
-             452:     71(int) Load 433(i64)
-             453:  434(ivec4) Bitcast 452
-                              Store 436(i16v4) 453
-             454:     17(int) Load 439(u32)
-             455:   57(ivec2) Bitcast 454
-                              Store 440(u16v2) 455
-             456:     77(int) Load 444(u64)
-             457:  445(ivec4) Bitcast 456
-                              Store 447(u16v4) 457
-             460:  193(ivec3) Load 358(u16v)
-             461:     36(int) Load 360(u16)
-             462:  193(ivec3) CompositeConstruct 461 461 461
-             463:  427(bvec3) ULessThan 460 462
-                              Store 459(bv) 463
-             464:   52(ivec2) Load 345(i16v)
-             465:     14(int) Load 348(i16)
-             466:   52(ivec2) CompositeConstruct 465 465
-             467:  174(bvec2) SLessThan 464 466
-             468:  427(bvec3) Load 459(bv)
-             469:  427(bvec3) VectorShuffle 468 467 3 4 2
-                              Store 459(bv) 469
-             470:  193(ivec3) Load 358(u16v)
-             471:     36(int) Load 360(u16)
-             472:  193(ivec3) CompositeConstruct 471 471 471
-             473:  427(bvec3) ULessThanEqual 470 472
-                              Store 459(bv) 473
-             474:   52(ivec2) Load 345(i16v)
-             475:     14(int) Load 348(i16)
-             476:   52(ivec2) CompositeConstruct 475 475
-             477:  174(bvec2) SLessThanEqual 474 476
-             478:  427(bvec3) Load 459(bv)
-             479:  427(bvec3) VectorShuffle 478 477 3 4 2
-                              Store 459(bv) 479
-             480:  193(ivec3) Load 358(u16v)
-             481:     36(int) Load 360(u16)
-             482:  193(ivec3) CompositeConstruct 481 481 481
-             483:  427(bvec3) UGreaterThan 480 482
-                              Store 459(bv) 483
-             484:   52(ivec2) Load 345(i16v)
-             485:     14(int) Load 348(i16)
-             486:   52(ivec2) CompositeConstruct 485 485
-             487:  174(bvec2) SGreaterThan 484 486
-             488:  427(bvec3) Load 459(bv)
-             489:  427(bvec3) VectorShuffle 488 487 3 4 2
-                              Store 459(bv) 489
-             490:  193(ivec3) Load 358(u16v)
-             491:     36(int) Load 360(u16)
-             492:  193(ivec3) CompositeConstruct 491 491 491
-             493:  427(bvec3) UGreaterThanEqual 490 492
-                              Store 459(bv) 493
-             494:   52(ivec2) Load 345(i16v)
-             495:     14(int) Load 348(i16)
-             496:   52(ivec2) CompositeConstruct 495 495
-             497:  174(bvec2) SGreaterThanEqual 494 496
-             498:  427(bvec3) Load 459(bv)
-             499:  427(bvec3) VectorShuffle 498 497 3 4 2
-                              Store 459(bv) 499
-             500:  193(ivec3) Load 358(u16v)
-             501:     36(int) Load 360(u16)
-             502:  193(ivec3) CompositeConstruct 501 501 501
-             503:  427(bvec3) IEqual 500 502
-                              Store 459(bv) 503
-             504:   52(ivec2) Load 345(i16v)
-             505:     14(int) Load 348(i16)
-             506:   52(ivec2) CompositeConstruct 505 505
-             507:  174(bvec2) IEqual 504 506
-             508:  427(bvec3) Load 459(bv)
-             509:  427(bvec3) VectorShuffle 508 507 3 4 2
-                              Store 459(bv) 509
-             510:  193(ivec3) Load 358(u16v)
-             511:     36(int) Load 360(u16)
-             512:  193(ivec3) CompositeConstruct 511 511 511
-             513:  427(bvec3) INotEqual 510 512
-                              Store 459(bv) 513
-             514:   52(ivec2) Load 345(i16v)
-             515:     14(int) Load 348(i16)
-             516:   52(ivec2) CompositeConstruct 515 515
-             517:  174(bvec2) INotEqual 514 516
-             518:  427(bvec3) Load 459(bv)
-             519:  427(bvec3) VectorShuffle 518 517 3 4 2
-                              Store 459(bv) 519
+             419:     36(int) Select 405 418 416
+                              Store 358(u16) 419
+             420:     36(int) Load 358(u16)
+             421:  193(ivec3) CompositeConstruct 420 420 420
+             422:     36(int) Load 358(u16)
+             423:     36(int) SNegate 422
+             424:  193(ivec3) CompositeConstruct 423 423 423
+             427:  193(ivec3) Select 426 424 421
+                              Store 356(u16v) 427
+             429:   52(ivec2) Load 343(i16v)
+             430:     27(int) Bitcast 429
+                              Store 428(i32) 430
+             435:  432(ivec4) Load 434(i16v4)
+             436:     71(int) Bitcast 435
+                              Store 431(i64) 436
+             439:   57(ivec2) Load 438(u16v2)
+             440:     17(int) Bitcast 439
+                              Store 437(u32) 440
+             446:  443(ivec4) Load 445(u16v4)
+             447:     77(int) Bitcast 446
+                              Store 442(u64) 447
+             448:     27(int) Load 428(i32)
+             449:   52(ivec2) Bitcast 448
+                              Store 343(i16v) 449
+             450:     71(int) Load 431(i64)
+             451:  432(ivec4) Bitcast 450
+                              Store 434(i16v4) 451
+             452:     17(int) Load 437(u32)
+             453:   57(ivec2) Bitcast 452
+                              Store 438(u16v2) 453
+             454:     77(int) Load 442(u64)
+             455:  443(ivec4) Bitcast 454
+                              Store 445(u16v4) 455
+             458:  193(ivec3) Load 356(u16v)
+             459:     36(int) Load 358(u16)
+             460:  193(ivec3) CompositeConstruct 459 459 459
+             461:  425(bvec3) ULessThan 458 460
+                              Store 457(bv) 461
+             462:   52(ivec2) Load 343(i16v)
+             463:     14(int) Load 346(i16)
+             464:   52(ivec2) CompositeConstruct 463 463
+             465:  174(bvec2) SLessThan 462 464
+             466:  425(bvec3) Load 457(bv)
+             467:  425(bvec3) VectorShuffle 466 465 3 4 2
+                              Store 457(bv) 467
+             468:  193(ivec3) Load 356(u16v)
+             469:     36(int) Load 358(u16)
+             470:  193(ivec3) CompositeConstruct 469 469 469
+             471:  425(bvec3) ULessThanEqual 468 470
+                              Store 457(bv) 471
+             472:   52(ivec2) Load 343(i16v)
+             473:     14(int) Load 346(i16)
+             474:   52(ivec2) CompositeConstruct 473 473
+             475:  174(bvec2) SLessThanEqual 472 474
+             476:  425(bvec3) Load 457(bv)
+             477:  425(bvec3) VectorShuffle 476 475 3 4 2
+                              Store 457(bv) 477
+             478:  193(ivec3) Load 356(u16v)
+             479:     36(int) Load 358(u16)
+             480:  193(ivec3) CompositeConstruct 479 479 479
+             481:  425(bvec3) UGreaterThan 478 480
+                              Store 457(bv) 481
+             482:   52(ivec2) Load 343(i16v)
+             483:     14(int) Load 346(i16)
+             484:   52(ivec2) CompositeConstruct 483 483
+             485:  174(bvec2) SGreaterThan 482 484
+             486:  425(bvec3) Load 457(bv)
+             487:  425(bvec3) VectorShuffle 486 485 3 4 2
+                              Store 457(bv) 487
+             488:  193(ivec3) Load 356(u16v)
+             489:     36(int) Load 358(u16)
+             490:  193(ivec3) CompositeConstruct 489 489 489
+             491:  425(bvec3) UGreaterThanEqual 488 490
+                              Store 457(bv) 491
+             492:   52(ivec2) Load 343(i16v)
+             493:     14(int) Load 346(i16)
+             494:   52(ivec2) CompositeConstruct 493 493
+             495:  174(bvec2) SGreaterThanEqual 492 494
+             496:  425(bvec3) Load 457(bv)
+             497:  425(bvec3) VectorShuffle 496 495 3 4 2
+                              Store 457(bv) 497
+             498:  193(ivec3) Load 356(u16v)
+             499:     36(int) Load 358(u16)
+             500:  193(ivec3) CompositeConstruct 499 499 499
+             501:  425(bvec3) IEqual 498 500
+                              Store 457(bv) 501
+             502:   52(ivec2) Load 343(i16v)
+             503:     14(int) Load 346(i16)
+             504:   52(ivec2) CompositeConstruct 503 503
+             505:  174(bvec2) IEqual 502 504
+             506:  425(bvec3) Load 457(bv)
+             507:  425(bvec3) VectorShuffle 506 505 3 4 2
+                              Store 457(bv) 507
+             508:  193(ivec3) Load 356(u16v)
+             509:     36(int) Load 358(u16)
+             510:  193(ivec3) CompositeConstruct 509 509 509
+             511:  425(bvec3) INotEqual 508 510
+                              Store 457(bv) 511
+             512:   52(ivec2) Load 343(i16v)
+             513:     14(int) Load 346(i16)
+             514:   52(ivec2) CompositeConstruct 513 513
+             515:  174(bvec2) INotEqual 512 514
+             516:  425(bvec3) Load 457(bv)
+             517:  425(bvec3) VectorShuffle 516 515 3 4 2
+                              Store 457(bv) 517
                               Return
                               FunctionEnd
index bcbb24b..8fda12b 100644 (file)
@@ -116,6 +116,8 @@ void operators()
     i64  = i64 % i;\r
 \r
     // Shift\r
+    u64v = u64v << i;\r
+    i64 = i64 >> uv.y;\r
     u64v <<= i;\r
     i64  >>= uv.y;\r
 \r
diff --git a/Test/spv.rankShift.comp b/Test/spv.rankShift.comp
new file mode 100644 (file)
index 0000000..1761ad1
--- /dev/null
@@ -0,0 +1,15 @@
+#version 450\r
+#extension GL_ARB_gpu_shader_int64 : require\r
+\r
+layout(local_size_x = 54) in;\r
+\r
+layout(location=4) uniform int64_t arg0;\r
+layout(location=5) uniform uint arg1;\r
+\r
+void main()\r
+{\r
+    uint64_t result = arg0 << arg1;\r
+    result = arg0 >> arg1;\r
+    result <<= arg1;\r
+    result >>= arg1;\r
+}
\ No newline at end of file
index 2415f6a..83d188e 100644 (file)
@@ -744,9 +744,6 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
 
     auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes);
 
-    TBasicType type0 = node0->getType().getBasicType();
-    TBasicType type1 = node1->getType().getBasicType();
-
     switch (op) {
     //
     // List all the binary ops that can implicitly convert one operand to the other's type;
@@ -776,10 +773,10 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
 
     case EOpSequence:          // used by ?:
 
-        if (type0 == type1)
+        if (node0->getBasicType() == node1->getBasicType())
             return std::make_tuple(node0, node1);
 
-        promoteTo = getConversionDestinatonType(type0, type1, op);
+        promoteTo = getConversionDestinatonType(node0->getBasicType(), node1->getBasicType(), op);
         if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
             return std::make_tuple(nullptr, nullptr);
 
@@ -794,23 +791,25 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
             return std::make_tuple(node0, node1);
         break;
 
-    // Shifts can have mixed types as long as they are integer and of the same rank,
-    // without converting.
+    // There are no conversions needed for GLSL; the shift amount just needs to be an
+    // integer type, as does the base.
+    // HLSL can promote bools to ints to make this work.
     case EOpLeftShift:
     case EOpRightShift:
-        if (node0->getType() == node1->getType())
-            return std::make_tuple(node0, node1);
-
-        if (isTypeInt(type0) && isTypeInt(type1)) {
-            if (getTypeRank(type0) == getTypeRank(type1)) {
+        if (source == EShSourceHlsl) {
+            TBasicType node0BasicType = node0->getBasicType();
+            if (node0BasicType == EbtBool)
+                node0BasicType = EbtInt;
+            if (node1->getBasicType() == EbtBool)
+                promoteTo = std::make_tuple(node0BasicType, EbtInt);
+            else
+                promoteTo = std::make_tuple(node0BasicType, node1->getBasicType());
+        } else {
+            if (isTypeInt(node0->getBasicType()) && isTypeInt(node1->getBasicType()))
                 return std::make_tuple(node0, node1);
-            } else {
-                promoteTo = getConversionDestinatonType(type0, type1, op);
-                if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
-                    return std::make_tuple(nullptr, nullptr);
-            }
-        } else
-            return std::make_tuple(nullptr, nullptr);
+            else
+                return std::make_tuple(nullptr, nullptr);
+        }
         break;
 
     default:
@@ -964,35 +963,24 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         if (type.getBasicType() == node->getType().getBasicType())
             return node;
 
-        if (canImplicitlyPromote(node->getType().getBasicType(), type.getBasicType(), op))
+        if (canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op))
             promoteTo = type.getBasicType();
         else
            return nullptr;
         break;
 
-    // Shifts can have mixed types as long as they are integer and of the same rank,
-    // without converting.
-    // It's the left operand's type that determines the resulting type, so no issue
-    // with assign shift ops either.
+    // For GLSL, there are no conversions needed; the shift amount just needs to be an
+    // integer type, as do the base/result.
+    // HLSL can convert the shift from a bool to an int.
     case EOpLeftShiftAssign:
     case EOpRightShiftAssign:
     {
-        TBasicType type0 = type.getBasicType();
-        TBasicType type1 = node->getType().getBasicType();
-
-        if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool) {
-            promoteTo = type0;            
-        } else {
-            if (isTypeInt(type0) && isTypeInt(type1)) {
-                if (getTypeRank(type0) == getTypeRank(type1)) {
-                    return node;
-                } else {
-                    if (canImplicitlyPromote(type1, type0, op))
-                        promoteTo = type0;
-                    else
-                        return nullptr;
-                }
-            } else
+        if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool)
+            promoteTo = type.getBasicType();
+        else {
+            if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType()))
+                return node;
+            else
                 return nullptr;
         }
         break;
@@ -1437,9 +1425,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
                                 extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
                                 extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float64);
 
-    if(explicitTypesEnabled)
-    {
-
+    if(explicitTypesEnabled) {
         // integral promotions
         if (isIntegralPromotion(from, to)) {
             return true;
index 20ef2d7..47e27d2 100644 (file)
@@ -416,6 +416,7 @@ INSTANTIATE_TEST_CASE_P(
         "spv.460.comp",
         "spv.atomic.comp",
         "spv.glFragColor.frag",
+        "spv.rankShift.comp",
         "spv.specConst.vert",
         "spv.OVR_multiview.vert",
     })),