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.
This commit is contained in:
John Kessenich 2017-05-19 23:00:13 -06:00
parent 0d2b4713c5
commit 80f92a190a
4 changed files with 303 additions and 295 deletions

View File

@ -2590,20 +2590,22 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I
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));
}
}

View File

@ -189,12 +189,12 @@ gl_FragCoord origin is upper left
// 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 @@ gl_FragCoord origin is upper left
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 @@ gl_FragCoord origin is upper left
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 @@ gl_FragCoord origin is upper left
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 @@ gl_FragCoord origin is upper left
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

View File

@ -53,9 +53,9 @@ Warning, version 450 is not yet complete; most version-specific features are pre
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 @@ Warning, version 450 is not yet complete; most version-specific features are pre
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 @@ Warning, version 450 is not yet complete; most version-specific features are pre
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 @@ Warning, version 450 is not yet complete; most version-specific features are pre
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

View File

@ -3,7 +3,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
// 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 @@ Warning, version 450 is not yet complete; most version-specific features are pre
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 @@ Warning, version 450 is not yet complete; most version-specific features are pre
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 @@ Warning, version 450 is not yet complete; most version-specific features are pre
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 @@ Warning, version 450 is not yet complete; most version-specific features are pre
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