Fix #857: Convert uniform int to local bool for struct alias assignment.
This was done for one direction, but not both directions, so this commit
picks up the other direction.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index f8722fc..31f7aab 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -2590,20 +2590,22 @@
if (builder.isScalarType(nominalTypeId)) {
// Conversion for bool
spv::Id boolType = builder.makeBoolType();
- if (nominalTypeId != boolType) {
- spv::Id zero = builder.makeUintConstant(0);
- spv::Id one = builder.makeUintConstant(1);
- rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
- }
+ if (nominalTypeId != boolType)
+ rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, builder.makeUintConstant(1),
+ builder.makeUintConstant(0));
+ else if (builder.getTypeId(rvalue) != boolType)
+ rvalue = builder.createBinOp(spv::OpINotEqual, boolType, rvalue, builder.makeUintConstant(0));
} else if (builder.isVectorType(nominalTypeId)) {
// Conversion for bvec
int vecSize = builder.getNumTypeComponents(nominalTypeId);
spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize);
- if (nominalTypeId != bvecType) {
- spv::Id zero = makeSmearedConstant(builder.makeUintConstant(0), vecSize);
- spv::Id one = makeSmearedConstant(builder.makeUintConstant(1), vecSize);
- rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
- }
+ if (nominalTypeId != bvecType)
+ rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue,
+ makeSmearedConstant(builder.makeUintConstant(1), vecSize),
+ makeSmearedConstant(builder.makeUintConstant(0), vecSize));
+ else if (builder.getTypeId(rvalue) != bvecType)
+ rvalue = builder.createBinOp(spv::OpINotEqual, bvecType, rvalue,
+ makeSmearedConstant(builder.makeUintConstant(0), vecSize));
}
}
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 634c1b8..72fba3b 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -189,12 +189,12 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 94
+// Id's are bound by 96
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 87 90
+ EntryPoint Fragment 4 "main" 89 92
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@@ -212,15 +212,15 @@
Name 21 "sbuf"
MemberName 21(sbuf) 0 "@data"
Name 23 "sbuf"
- Name 40 "size"
- Name 42 "stride"
- Name 57 "sbuf2"
- MemberName 57(sbuf2) 0 "@data"
+ Name 43 "size"
+ Name 45 "stride"
Name 59 "sbuf2"
- Name 85 "pos"
+ MemberName 59(sbuf2) 0 "@data"
+ Name 61 "sbuf2"
Name 87 "pos"
- Name 90 "@entryPointOutput"
- Name 91 "param"
+ Name 89 "pos"
+ Name 92 "@entryPointOutput"
+ Name 93 "param"
MemberDecorate 19(sb_t) 0 NonWritable
MemberDecorate 19(sb_t) 0 Offset 0
MemberDecorate 19(sb_t) 1 NonWritable
@@ -233,13 +233,13 @@
Decorate 21(sbuf) BufferBlock
Decorate 23(sbuf) DescriptorSet 0
Decorate 23(sbuf) Binding 10
- Decorate 56 ArrayStride 4
- MemberDecorate 57(sbuf2) 0 NonWritable
- MemberDecorate 57(sbuf2) 0 Offset 0
- Decorate 57(sbuf2) BufferBlock
- Decorate 59(sbuf2) DescriptorSet 0
- Decorate 87(pos) Location 0
- Decorate 90(@entryPointOutput) Location 0
+ Decorate 58 ArrayStride 4
+ MemberDecorate 59(sbuf2) 0 NonWritable
+ MemberDecorate 59(sbuf2) 0 Offset 0
+ Decorate 59(sbuf2) BufferBlock
+ Decorate 61(sbuf2) DescriptorSet 0
+ Decorate 89(pos) Location 0
+ Decorate 92(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -261,41 +261,41 @@
27: TypePointer Uniform 19(sb_t)
31: TypePointer Function 14(fvec3)
34: 24(int) Constant 1
- 35: TypePointer Function 15(bool)
- 38: 24(int) Constant 2
- 43: 6(int) Constant 32
- 45: TypePointer Uniform 6(int)
- 48: 6(int) Constant 0
- 53: TypePointer Uniform 14(fvec3)
- 56: TypeRuntimeArray 8(float)
- 57(sbuf2): TypeStruct 56
- 58: TypePointer Uniform 57(sbuf2)
- 59(sbuf2): 58(ptr) Variable Uniform
- 61: TypePointer Uniform 8(float)
- 66: 8(float) Constant 0
- 73: TypePointer Function 8(float)
- 86: TypePointer Input 6(int)
- 87(pos): 86(ptr) Variable Input
- 89: TypePointer Output 9(fvec4)
-90(@entryPointOutput): 89(ptr) Variable Output
+ 35: 6(int) Constant 0
+ 37: TypePointer Function 15(bool)
+ 40: 24(int) Constant 2
+ 46: 6(int) Constant 32
+ 48: TypePointer Uniform 6(int)
+ 55: TypePointer Uniform 14(fvec3)
+ 58: TypeRuntimeArray 8(float)
+ 59(sbuf2): TypeStruct 58
+ 60: TypePointer Uniform 59(sbuf2)
+ 61(sbuf2): 60(ptr) Variable Uniform
+ 63: TypePointer Uniform 8(float)
+ 68: 8(float) Constant 0
+ 75: TypePointer Function 8(float)
+ 88: TypePointer Input 6(int)
+ 89(pos): 88(ptr) Variable Input
+ 91: TypePointer Output 9(fvec4)
+92(@entryPointOutput): 91(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 85(pos): 7(ptr) Variable Function
- 91(param): 7(ptr) Variable Function
- 88: 6(int) Load 87(pos)
- Store 85(pos) 88
- 92: 6(int) Load 85(pos)
- Store 91(param) 92
- 93: 9(fvec4) FunctionCall 12(@main(u1;) 91(param)
- Store 90(@entryPointOutput) 93
+ 87(pos): 7(ptr) Variable Function
+ 93(param): 7(ptr) Variable Function
+ 90: 6(int) Load 89(pos)
+ Store 87(pos) 90
+ 94: 6(int) Load 87(pos)
+ Store 93(param) 94
+ 95: 9(fvec4) FunctionCall 12(@main(u1;) 93(param)
+ Store 92(@entryPointOutput) 95
Return
FunctionEnd
12(@main(u1;): 9(fvec4) Function None 10
11(pos): 7(ptr) FunctionParameter
13: Label
18(mydata): 17(ptr) Variable Function
- 40(size): 7(ptr) Variable Function
- 42(stride): 7(ptr) Variable Function
+ 43(size): 7(ptr) Variable Function
+ 45(stride): 7(ptr) Variable Function
26: 6(int) Load 11(pos)
28: 27(ptr) AccessChain 23(sbuf) 25 26
29: 19(sb_t) Load 28
@@ -303,46 +303,48 @@
32: 31(ptr) AccessChain 18(mydata) 25
Store 32 30
33: 6(int) CompositeExtract 29 1
- 36: 35(ptr) AccessChain 18(mydata) 34
- Store 36 33
- 37: 6(int) CompositeExtract 29 2
- 39: 35(ptr) AccessChain 18(mydata) 38
- Store 39 37
- 41: 24(int) ArrayLength 23(sbuf) 0
- Store 40(size) 41
- Store 42(stride) 43
- 44: 6(int) Load 11(pos)
- 46: 45(ptr) AccessChain 23(sbuf) 25 44 34
- 47: 6(int) Load 46
- 49: 15(bool) INotEqual 47 48
- SelectionMerge 51 None
- BranchConditional 49 50 72
- 50: Label
- 52: 6(int) Load 11(pos)
- 54: 53(ptr) AccessChain 23(sbuf) 25 52 25
- 55: 14(fvec3) Load 54
- 60: 6(int) Load 11(pos)
- 62: 61(ptr) AccessChain 59(sbuf2) 25 60
- 63: 8(float) Load 62
- 64: 14(fvec3) CompositeConstruct 63 63 63
- 65: 14(fvec3) FAdd 55 64
- 67: 8(float) CompositeExtract 65 0
- 68: 8(float) CompositeExtract 65 1
- 69: 8(float) CompositeExtract 65 2
- 70: 9(fvec4) CompositeConstruct 67 68 69 66
- ReturnValue 70
- 72: Label
- 74: 73(ptr) AccessChain 18(mydata) 25 48
- 75: 8(float) Load 74
- 76: 6(int) Load 40(size)
- 77: 8(float) ConvertUToF 76
- 78: 8(float) FAdd 75 77
- 79: 6(int) Load 42(stride)
- 80: 8(float) ConvertUToF 79
- 81: 8(float) FAdd 78 80
- 82: 9(fvec4) CompositeConstruct 81 81 81 81
- ReturnValue 82
- 51: Label
- 84: 9(fvec4) Undef
- ReturnValue 84
+ 36: 15(bool) INotEqual 33 35
+ 38: 37(ptr) AccessChain 18(mydata) 34
+ Store 38 36
+ 39: 6(int) CompositeExtract 29 2
+ 41: 15(bool) INotEqual 39 35
+ 42: 37(ptr) AccessChain 18(mydata) 40
+ Store 42 41
+ 44: 24(int) ArrayLength 23(sbuf) 0
+ Store 43(size) 44
+ Store 45(stride) 46
+ 47: 6(int) Load 11(pos)
+ 49: 48(ptr) AccessChain 23(sbuf) 25 47 34
+ 50: 6(int) Load 49
+ 51: 15(bool) INotEqual 50 35
+ SelectionMerge 53 None
+ BranchConditional 51 52 74
+ 52: Label
+ 54: 6(int) Load 11(pos)
+ 56: 55(ptr) AccessChain 23(sbuf) 25 54 25
+ 57: 14(fvec3) Load 56
+ 62: 6(int) Load 11(pos)
+ 64: 63(ptr) AccessChain 61(sbuf2) 25 62
+ 65: 8(float) Load 64
+ 66: 14(fvec3) CompositeConstruct 65 65 65
+ 67: 14(fvec3) FAdd 57 66
+ 69: 8(float) CompositeExtract 67 0
+ 70: 8(float) CompositeExtract 67 1
+ 71: 8(float) CompositeExtract 67 2
+ 72: 9(fvec4) CompositeConstruct 69 70 71 68
+ ReturnValue 72
+ 74: Label
+ 76: 75(ptr) AccessChain 18(mydata) 25 35
+ 77: 8(float) Load 76
+ 78: 6(int) Load 43(size)
+ 79: 8(float) ConvertUToF 78
+ 80: 8(float) FAdd 77 79
+ 81: 6(int) Load 45(stride)
+ 82: 8(float) ConvertUToF 81
+ 83: 8(float) FAdd 80 82
+ 84: 9(fvec4) CompositeConstruct 83 83 83 83
+ ReturnValue 84
+ 53: Label
+ 86: 9(fvec4) Undef
+ ReturnValue 86
FunctionEnd
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index 2181f26..4742dad 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -53,9 +53,9 @@
29: 6(bool) ConstantFalse
30: 9(bvec2) ConstantComposite 29 29
31: 22(int) Constant 0
- 32: 23(ivec2) ConstantComposite 31 31
- 33: 22(int) Constant 1
- 34: 23(ivec2) ConstantComposite 33 33
+ 32: 22(int) Constant 1
+ 33: 23(ivec2) ConstantComposite 31 31
+ 34: 23(ivec2) ConstantComposite 32 32
36: TypePointer Uniform 23(ivec2)
38: TypeVector 22(int) 4
39(Uniform): TypeStruct 38(ivec4)
@@ -73,7 +73,7 @@
5: Label
62(param): 8(ptr) Variable Function
67(param): 10(ptr) Variable Function
- 35: 23(ivec2) Select 30 34 32
+ 35: 23(ivec2) Select 30 34 33
37: 36(ptr) AccessChain 26 28
Store 37 35
43: 42(ptr) AccessChain 41 28
@@ -88,7 +88,7 @@
51: 22(int) CompositeExtract 50 0
52: 6(bool) INotEqual 51 31
53: 9(bvec2) CompositeConstruct 52 52
- 54: 23(ivec2) Select 53 34 32
+ 54: 23(ivec2) Select 53 34 33
55: 36(ptr) AccessChain 26 28
Store 55 54
Branch 48
@@ -106,7 +106,7 @@
Store 62(param) 66
68: 2 FunctionCall 14(foo(vb4;vb2;) 62(param) 67(param)
69: 9(bvec2) Load 67(param)
- 70: 23(ivec2) Select 69 34 32
+ 70: 23(ivec2) Select 69 34 33
71: 36(ptr) AccessChain 26 28
Store 71 70
Branch 61
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index f8c0eea..5eebe40 100755
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -3,7 +3,7 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 157
+// Id's are bound by 161
Capability Shader
1: ExtInstImport "GLSL.std.450"
@@ -22,31 +22,31 @@
Name 17 "SSBO0"
MemberName 17(SSBO0) 0 "a"
Name 19 "inBuf"
- Name 37 "SSBO1"
- MemberName 37(SSBO1) 0 "b"
- Name 39 "outBuf"
- Name 57 "MyStruct"
- MemberName 57(MyStruct) 0 "foo"
- MemberName 57(MyStruct) 1 "sb"
- Name 58 "UBO"
- MemberName 58(UBO) 0 "c"
- Name 60 "uBuf"
- Name 84 "Nested"
- MemberName 84(Nested) 0 "f"
- MemberName 84(Nested) 1 "S"
- Name 86 "n"
- Name 88 "Nested"
- MemberName 88(Nested) 0 "f"
- MemberName 88(Nested) 1 "S"
- Name 89 "UBON"
- MemberName 89(UBON) 0 "N1"
- Name 91 "uBufN"
- Name 122 "Nested"
- MemberName 122(Nested) 0 "f"
- MemberName 122(Nested) 1 "S"
- Name 123 "SSBO1N"
- MemberName 123(SSBO1N) 0 "N2"
- Name 125 "outBufN"
+ Name 39 "SSBO1"
+ MemberName 39(SSBO1) 0 "b"
+ Name 41 "outBuf"
+ Name 58 "MyStruct"
+ MemberName 58(MyStruct) 0 "foo"
+ MemberName 58(MyStruct) 1 "sb"
+ Name 59 "UBO"
+ MemberName 59(UBO) 0 "c"
+ Name 61 "uBuf"
+ Name 86 "Nested"
+ MemberName 86(Nested) 0 "f"
+ MemberName 86(Nested) 1 "S"
+ Name 88 "n"
+ Name 90 "Nested"
+ MemberName 90(Nested) 0 "f"
+ MemberName 90(Nested) 1 "S"
+ Name 91 "UBON"
+ MemberName 91(UBON) 0 "N1"
+ Name 93 "uBufN"
+ Name 126 "Nested"
+ MemberName 126(Nested) 0 "f"
+ MemberName 126(Nested) 1 "S"
+ Name 127 "SSBO1N"
+ MemberName 127(SSBO1N) 0 "N2"
+ Name 129 "outBufN"
Decorate 15 ArrayStride 8
MemberDecorate 16(MyStruct) 0 Offset 0
MemberDecorate 16(MyStruct) 1 Offset 16
@@ -54,31 +54,31 @@
Decorate 17(SSBO0) BufferBlock
Decorate 19(inBuf) DescriptorSet 0
Decorate 19(inBuf) Binding 0
- MemberDecorate 37(SSBO1) 0 Offset 0
- Decorate 37(SSBO1) BufferBlock
- Decorate 39(outBuf) DescriptorSet 0
- Decorate 39(outBuf) Binding 1
- Decorate 56 ArrayStride 16
- MemberDecorate 57(MyStruct) 0 Offset 0
- MemberDecorate 57(MyStruct) 1 Offset 32
- MemberDecorate 58(UBO) 0 Offset 0
- Decorate 58(UBO) Block
- Decorate 60(uBuf) DescriptorSet 0
- Decorate 60(uBuf) Binding 2
- Decorate 87 ArrayStride 48
- MemberDecorate 88(Nested) 0 Offset 0
- MemberDecorate 88(Nested) 1 Offset 16
- MemberDecorate 89(UBON) 0 Offset 0
- Decorate 89(UBON) Block
- Decorate 91(uBufN) DescriptorSet 0
- Decorate 91(uBufN) Binding 2
- Decorate 121 ArrayStride 24
- MemberDecorate 122(Nested) 0 Offset 0
- MemberDecorate 122(Nested) 1 Offset 8
- MemberDecorate 123(SSBO1N) 0 Offset 0
- Decorate 123(SSBO1N) BufferBlock
- Decorate 125(outBufN) DescriptorSet 0
- Decorate 125(outBufN) Binding 1
+ MemberDecorate 39(SSBO1) 0 Offset 0
+ Decorate 39(SSBO1) BufferBlock
+ Decorate 41(outBuf) DescriptorSet 0
+ Decorate 41(outBuf) Binding 1
+ Decorate 57 ArrayStride 16
+ MemberDecorate 58(MyStruct) 0 Offset 0
+ MemberDecorate 58(MyStruct) 1 Offset 32
+ MemberDecorate 59(UBO) 0 Offset 0
+ Decorate 59(UBO) Block
+ Decorate 61(uBuf) DescriptorSet 0
+ Decorate 61(uBuf) Binding 2
+ Decorate 89 ArrayStride 48
+ MemberDecorate 90(Nested) 0 Offset 0
+ MemberDecorate 90(Nested) 1 Offset 16
+ MemberDecorate 91(UBON) 0 Offset 0
+ Decorate 91(UBON) Block
+ Decorate 93(uBufN) DescriptorSet 0
+ Decorate 93(uBufN) Binding 2
+ Decorate 125 ArrayStride 24
+ MemberDecorate 126(Nested) 0 Offset 0
+ MemberDecorate 126(Nested) 1 Offset 8
+ MemberDecorate 127(SSBO1N) 0 Offset 0
+ Decorate 127(SSBO1N) BufferBlock
+ Decorate 129(outBufN) DescriptorSet 0
+ Decorate 129(outBufN) Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -100,44 +100,44 @@
26: TypePointer Function 10
29: TypePointer Function 7(fvec2)
32: 20(int) Constant 1
- 35: TypePointer Function 11(bool)
- 37(SSBO1): TypeStruct 16(MyStruct)
- 38: TypePointer Uniform 37(SSBO1)
- 39(outBuf): 38(ptr) Variable Uniform
- 43: TypePointer Uniform 15
- 46: TypePointer Uniform 7(fvec2)
- 51: 8(int) Constant 0
- 52: 8(int) Constant 1
- 54: TypePointer Uniform 8(int)
- 56: TypeArray 7(fvec2) 9
- 57(MyStruct): TypeStruct 56 8(int)
- 58(UBO): TypeStruct 57(MyStruct)
- 59: TypePointer Uniform 58(UBO)
- 60(uBuf): 59(ptr) Variable Uniform
- 61: TypePointer Uniform 57(MyStruct)
- 83: TypeArray 12(MyStruct) 9
- 84(Nested): TypeStruct 6(float) 83
- 85: TypePointer Function 84(Nested)
- 87: TypeArray 57(MyStruct) 9
- 88(Nested): TypeStruct 6(float) 87
- 89(UBON): TypeStruct 88(Nested)
- 90: TypePointer Uniform 89(UBON)
- 91(uBufN): 90(ptr) Variable Uniform
- 92: TypePointer Uniform 88(Nested)
- 96: TypePointer Function 6(float)
- 99: TypePointer Function 83
- 121: TypeArray 16(MyStruct) 9
- 122(Nested): TypeStruct 6(float) 121
- 123(SSBO1N): TypeStruct 122(Nested)
- 124: TypePointer Uniform 123(SSBO1N)
- 125(outBufN): 124(ptr) Variable Uniform
- 127: TypePointer Uniform 122(Nested)
- 130: TypePointer Uniform 6(float)
- 133: TypePointer Uniform 121
+ 35: 8(int) Constant 0
+ 37: TypePointer Function 11(bool)
+ 39(SSBO1): TypeStruct 16(MyStruct)
+ 40: TypePointer Uniform 39(SSBO1)
+ 41(outBuf): 40(ptr) Variable Uniform
+ 45: TypePointer Uniform 15
+ 48: TypePointer Uniform 7(fvec2)
+ 53: 8(int) Constant 1
+ 55: TypePointer Uniform 8(int)
+ 57: TypeArray 7(fvec2) 9
+ 58(MyStruct): TypeStruct 57 8(int)
+ 59(UBO): TypeStruct 58(MyStruct)
+ 60: TypePointer Uniform 59(UBO)
+ 61(uBuf): 60(ptr) Variable Uniform
+ 62: TypePointer Uniform 58(MyStruct)
+ 85: TypeArray 12(MyStruct) 9
+ 86(Nested): TypeStruct 6(float) 85
+ 87: TypePointer Function 86(Nested)
+ 89: TypeArray 58(MyStruct) 9
+ 90(Nested): TypeStruct 6(float) 89
+ 91(UBON): TypeStruct 90(Nested)
+ 92: TypePointer Uniform 91(UBON)
+ 93(uBufN): 92(ptr) Variable Uniform
+ 94: TypePointer Uniform 90(Nested)
+ 98: TypePointer Function 6(float)
+ 101: TypePointer Function 85
+ 125: TypeArray 16(MyStruct) 9
+ 126(Nested): TypeStruct 6(float) 125
+ 127(SSBO1N): TypeStruct 126(Nested)
+ 128: TypePointer Uniform 127(SSBO1N)
+ 129(outBufN): 128(ptr) Variable Uniform
+ 131: TypePointer Uniform 126(Nested)
+ 134: TypePointer Uniform 6(float)
+ 137: TypePointer Uniform 125
4(main): 2 Function None 3
5: Label
14(t): 13(ptr) Variable Function
- 86(n): 85(ptr) Variable Function
+ 88(n): 87(ptr) Variable Function
23: 22(ptr) AccessChain 19(inBuf) 21
24:16(MyStruct) Load 23
25: 15 CompositeExtract 24 0
@@ -149,116 +149,120 @@
33: 29(ptr) AccessChain 27 32
Store 33 31
34: 8(int) CompositeExtract 24 1
- 36: 35(ptr) AccessChain 14(t) 32
- Store 36 34
- 40:12(MyStruct) Load 14(t)
- 41: 22(ptr) AccessChain 39(outBuf) 21
- 42: 10 CompositeExtract 40 0
- 44: 43(ptr) AccessChain 41 21
- 45: 7(fvec2) CompositeExtract 42 0
- 47: 46(ptr) AccessChain 44 21
- Store 47 45
- 48: 7(fvec2) CompositeExtract 42 1
- 49: 46(ptr) AccessChain 44 32
- Store 49 48
- 50: 11(bool) CompositeExtract 40 1
- 53: 8(int) Select 50 52 51
- 55: 54(ptr) AccessChain 41 32
- Store 55 53
- 62: 61(ptr) AccessChain 60(uBuf) 21
- 63:57(MyStruct) Load 62
- 64: 56 CompositeExtract 63 0
- 65: 26(ptr) AccessChain 14(t) 21
- 66: 7(fvec2) CompositeExtract 64 0
- 67: 29(ptr) AccessChain 65 21
- Store 67 66
- 68: 7(fvec2) CompositeExtract 64 1
- 69: 29(ptr) AccessChain 65 32
- Store 69 68
- 70: 8(int) CompositeExtract 63 1
- 71: 35(ptr) AccessChain 14(t) 32
- Store 71 70
- 72:12(MyStruct) Load 14(t)
- 73: 22(ptr) AccessChain 39(outBuf) 21
- 74: 10 CompositeExtract 72 0
- 75: 43(ptr) AccessChain 73 21
- 76: 7(fvec2) CompositeExtract 74 0
- 77: 46(ptr) AccessChain 75 21
- Store 77 76
- 78: 7(fvec2) CompositeExtract 74 1
- 79: 46(ptr) AccessChain 75 32
+ 36: 11(bool) INotEqual 34 35
+ 38: 37(ptr) AccessChain 14(t) 32
+ Store 38 36
+ 42:12(MyStruct) Load 14(t)
+ 43: 22(ptr) AccessChain 41(outBuf) 21
+ 44: 10 CompositeExtract 42 0
+ 46: 45(ptr) AccessChain 43 21
+ 47: 7(fvec2) CompositeExtract 44 0
+ 49: 48(ptr) AccessChain 46 21
+ Store 49 47
+ 50: 7(fvec2) CompositeExtract 44 1
+ 51: 48(ptr) AccessChain 46 32
+ Store 51 50
+ 52: 11(bool) CompositeExtract 42 1
+ 54: 8(int) Select 52 53 35
+ 56: 55(ptr) AccessChain 43 32
+ Store 56 54
+ 63: 62(ptr) AccessChain 61(uBuf) 21
+ 64:58(MyStruct) Load 63
+ 65: 57 CompositeExtract 64 0
+ 66: 26(ptr) AccessChain 14(t) 21
+ 67: 7(fvec2) CompositeExtract 65 0
+ 68: 29(ptr) AccessChain 66 21
+ Store 68 67
+ 69: 7(fvec2) CompositeExtract 65 1
+ 70: 29(ptr) AccessChain 66 32
+ Store 70 69
+ 71: 8(int) CompositeExtract 64 1
+ 72: 11(bool) INotEqual 71 35
+ 73: 37(ptr) AccessChain 14(t) 32
+ Store 73 72
+ 74:12(MyStruct) Load 14(t)
+ 75: 22(ptr) AccessChain 41(outBuf) 21
+ 76: 10 CompositeExtract 74 0
+ 77: 45(ptr) AccessChain 75 21
+ 78: 7(fvec2) CompositeExtract 76 0
+ 79: 48(ptr) AccessChain 77 21
Store 79 78
- 80: 11(bool) CompositeExtract 72 1
- 81: 8(int) Select 80 52 51
- 82: 54(ptr) AccessChain 73 32
- Store 82 81
- 93: 92(ptr) AccessChain 91(uBufN) 21
- 94: 88(Nested) Load 93
- 95: 6(float) CompositeExtract 94 0
- 97: 96(ptr) AccessChain 86(n) 21
- Store 97 95
- 98: 87 CompositeExtract 94 1
- 100: 99(ptr) AccessChain 86(n) 32
- 101:57(MyStruct) CompositeExtract 98 0
- 102: 13(ptr) AccessChain 100 21
- 103: 56 CompositeExtract 101 0
- 104: 26(ptr) AccessChain 102 21
- 105: 7(fvec2) CompositeExtract 103 0
- 106: 29(ptr) AccessChain 104 21
- Store 106 105
- 107: 7(fvec2) CompositeExtract 103 1
- 108: 29(ptr) AccessChain 104 32
+ 80: 7(fvec2) CompositeExtract 76 1
+ 81: 48(ptr) AccessChain 77 32
+ Store 81 80
+ 82: 11(bool) CompositeExtract 74 1
+ 83: 8(int) Select 82 53 35
+ 84: 55(ptr) AccessChain 75 32
+ Store 84 83
+ 95: 94(ptr) AccessChain 93(uBufN) 21
+ 96: 90(Nested) Load 95
+ 97: 6(float) CompositeExtract 96 0
+ 99: 98(ptr) AccessChain 88(n) 21
+ Store 99 97
+ 100: 89 CompositeExtract 96 1
+ 102: 101(ptr) AccessChain 88(n) 32
+ 103:58(MyStruct) CompositeExtract 100 0
+ 104: 13(ptr) AccessChain 102 21
+ 105: 57 CompositeExtract 103 0
+ 106: 26(ptr) AccessChain 104 21
+ 107: 7(fvec2) CompositeExtract 105 0
+ 108: 29(ptr) AccessChain 106 21
Store 108 107
- 109: 8(int) CompositeExtract 101 1
- 110: 35(ptr) AccessChain 102 32
+ 109: 7(fvec2) CompositeExtract 105 1
+ 110: 29(ptr) AccessChain 106 32
Store 110 109
- 111:57(MyStruct) CompositeExtract 98 1
- 112: 13(ptr) AccessChain 100 32
- 113: 56 CompositeExtract 111 0
- 114: 26(ptr) AccessChain 112 21
- 115: 7(fvec2) CompositeExtract 113 0
- 116: 29(ptr) AccessChain 114 21
- Store 116 115
- 117: 7(fvec2) CompositeExtract 113 1
- 118: 29(ptr) AccessChain 114 32
- Store 118 117
- 119: 8(int) CompositeExtract 111 1
- 120: 35(ptr) AccessChain 112 32
- Store 120 119
- 126: 84(Nested) Load 86(n)
- 128: 127(ptr) AccessChain 125(outBufN) 21
- 129: 6(float) CompositeExtract 126 0
- 131: 130(ptr) AccessChain 128 21
- Store 131 129
- 132: 83 CompositeExtract 126 1
- 134: 133(ptr) AccessChain 128 32
- 135:12(MyStruct) CompositeExtract 132 0
- 136: 22(ptr) AccessChain 134 21
- 137: 10 CompositeExtract 135 0
- 138: 43(ptr) AccessChain 136 21
- 139: 7(fvec2) CompositeExtract 137 0
- 140: 46(ptr) AccessChain 138 21
- Store 140 139
- 141: 7(fvec2) CompositeExtract 137 1
- 142: 46(ptr) AccessChain 138 32
- Store 142 141
- 143: 11(bool) CompositeExtract 135 1
- 144: 8(int) Select 143 52 51
- 145: 54(ptr) AccessChain 136 32
- Store 145 144
- 146:12(MyStruct) CompositeExtract 132 1
- 147: 22(ptr) AccessChain 134 32
- 148: 10 CompositeExtract 146 0
- 149: 43(ptr) AccessChain 147 21
- 150: 7(fvec2) CompositeExtract 148 0
- 151: 46(ptr) AccessChain 149 21
- Store 151 150
- 152: 7(fvec2) CompositeExtract 148 1
- 153: 46(ptr) AccessChain 149 32
- Store 153 152
- 154: 11(bool) CompositeExtract 146 1
- 155: 8(int) Select 154 52 51
- 156: 54(ptr) AccessChain 147 32
- Store 156 155
+ 111: 8(int) CompositeExtract 103 1
+ 112: 11(bool) INotEqual 111 35
+ 113: 37(ptr) AccessChain 104 32
+ Store 113 112
+ 114:58(MyStruct) CompositeExtract 100 1
+ 115: 13(ptr) AccessChain 102 32
+ 116: 57 CompositeExtract 114 0
+ 117: 26(ptr) AccessChain 115 21
+ 118: 7(fvec2) CompositeExtract 116 0
+ 119: 29(ptr) AccessChain 117 21
+ Store 119 118
+ 120: 7(fvec2) CompositeExtract 116 1
+ 121: 29(ptr) AccessChain 117 32
+ Store 121 120
+ 122: 8(int) CompositeExtract 114 1
+ 123: 11(bool) INotEqual 122 35
+ 124: 37(ptr) AccessChain 115 32
+ Store 124 123
+ 130: 86(Nested) Load 88(n)
+ 132: 131(ptr) AccessChain 129(outBufN) 21
+ 133: 6(float) CompositeExtract 130 0
+ 135: 134(ptr) AccessChain 132 21
+ Store 135 133
+ 136: 85 CompositeExtract 130 1
+ 138: 137(ptr) AccessChain 132 32
+ 139:12(MyStruct) CompositeExtract 136 0
+ 140: 22(ptr) AccessChain 138 21
+ 141: 10 CompositeExtract 139 0
+ 142: 45(ptr) AccessChain 140 21
+ 143: 7(fvec2) CompositeExtract 141 0
+ 144: 48(ptr) AccessChain 142 21
+ Store 144 143
+ 145: 7(fvec2) CompositeExtract 141 1
+ 146: 48(ptr) AccessChain 142 32
+ Store 146 145
+ 147: 11(bool) CompositeExtract 139 1
+ 148: 8(int) Select 147 53 35
+ 149: 55(ptr) AccessChain 140 32
+ Store 149 148
+ 150:12(MyStruct) CompositeExtract 136 1
+ 151: 22(ptr) AccessChain 138 32
+ 152: 10 CompositeExtract 150 0
+ 153: 45(ptr) AccessChain 151 21
+ 154: 7(fvec2) CompositeExtract 152 0
+ 155: 48(ptr) AccessChain 153 21
+ Store 155 154
+ 156: 7(fvec2) CompositeExtract 152 1
+ 157: 48(ptr) AccessChain 153 32
+ Store 157 156
+ 158: 11(bool) CompositeExtract 150 1
+ 159: 8(int) Select 158 53 35
+ 160: 55(ptr) AccessChain 151 32
+ Store 160 159
Return
FunctionEnd