SPV: Fix issue #506: generalize struct deep copy to include arrays.
authorJohn Kessenich <cepheus@frii.com>
Sun, 11 Sep 2016 18:33:43 +0000 (12:33 -0600)
committerJohn Kessenich <cepheus@frii.com>
Sun, 11 Sep 2016 18:33:43 +0000 (12:33 -0600)
SPIRV/GlslangToSpv.cpp
Test/baseResults/spv.multiStruct.comp.out
Test/spv.multiStruct.comp
glslang/Include/revision.h

index 788dd63..4513df8 100755 (executable)
@@ -2283,13 +2283,13 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I
 // Implicitly uses the existing builder.accessChain as the storage target.
 void TGlslangToSpvTraverser::multiTypeStore(const glslang::TType& type, spv::Id rValue)
 {
-    // we only do the complex path here if it's a structure
-    if (! type.isStruct()) {
+    // we only do the complex path here if it's an aggregate
+    if (! type.isStruct() && ! type.isArray()) {
         accessChainStore(type, rValue);
         return;
     }
 
-    // and, it has to be a case of structure type aliasing
+    // and, it has to be a case of type aliasing
     spv::Id rType = builder.getTypeId(rValue);
     spv::Id lValue = builder.accessChainGetLValue();
     spv::Id lType = builder.getContainedTypeId(builder.getTypeId(lValue));
@@ -2298,26 +2298,46 @@ void TGlslangToSpvTraverser::multiTypeStore(const glslang::TType& type, spv::Id
         return;
     }
 
-    // Recursively (as needed) copy a struct type to a different struct type,
+    // Recursively (as needed) copy an aggregate type to a different aggregate type,
     // where the two types were the same type in GLSL. This requires member
     // by member copy, recursively.
 
-    // loop over members
-    const glslang::TTypeList& members = *type.getStruct();
-    for (int m = 0; m < (int)members.size(); ++m) {
-        const glslang::TType& glslangMemberType = *members[m].type;
+    // If an array, copy element by element.
+    if (type.isArray()) {
+        glslang::TType glslangElementType(type, 0);
+        spv::Id elementRType = builder.getContainedTypeId(rType);
+        for (int index = 0; index < type.getOuterArraySize(); ++index) {
+            // get the source member
+            spv::Id elementRValue = builder.createCompositeExtract(rValue, elementRType, index);
 
-        // get the source member
-        spv::Id memberRType = builder.getContainedTypeId(rType, m);
-        spv::Id memberRValue = builder.createCompositeExtract(rValue, memberRType, m);
+            // set up the target storage
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(lValue);
+            builder.accessChainPush(builder.makeIntConstant(index));
 
-        // set up the target storage
-        builder.clearAccessChain();
-        builder.setAccessChainLValue(lValue);
-        builder.accessChainPush(builder.makeIntConstant(m));
+            // store the member
+            multiTypeStore(glslangElementType, elementRValue);
+        }
+    } else {
+        assert(type.isStruct());
 
-        // store the member
-        multiTypeStore(glslangMemberType, memberRValue);
+        // loop over structure members
+        const glslang::TTypeList& members = *type.getStruct();
+        for (int m = 0; m < (int)members.size(); ++m) {
+            const glslang::TType& glslangMemberType = *members[m].type;
+
+            // get the source member
+            spv::Id memberRType = builder.getContainedTypeId(rType, m);
+            spv::Id memberRValue = builder.createCompositeExtract(rValue, memberRType, m);
+
+            // set up the target storage
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(lValue);
+            builder.accessChainPush(builder.makeIntConstant(m));
+
+            // store the member
+            multiTypeStore(glslangMemberType, memberRValue);
+        }
     }
 }
 
index a2ab8f8..28402ce 100755 (executable)
@@ -7,7 +7,7 @@ Linked compute stage:
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 97
+// Id's are bound by 157
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -16,177 +16,253 @@ Linked compute stage:
                               ExecutionMode 4 LocalSize 1 1 1
                               Source GLSL 450
                               Name 4  "main"
-                              Name 9  "MyStruct"
-                              MemberName 9(MyStruct) 0  "foo"
-                              MemberName 9(MyStruct) 1  "sb"
-                              Name 11  "t"
-                              Name 13  "MyStruct"
-                              MemberName 13(MyStruct) 0  "foo"
-                              MemberName 13(MyStruct) 1  "sb"
-                              Name 14  "SSBO0"
-                              MemberName 14(SSBO0) 0  "a"
-                              Name 16  "inBuf"
-                              Name 29  "SSBO1"
-                              MemberName 29(SSBO1) 0  "b"
-                              Name 31  "outBuf"
-                              Name 43  "MyStruct"
-                              MemberName 43(MyStruct) 0  "foo"
-                              MemberName 43(MyStruct) 1  "sb"
-                              Name 44  "UBO"
-                              MemberName 44(UBO) 0  "c"
-                              Name 46  "uBuf"
-                              Name 61  "Nested"
-                              MemberName 61(Nested) 0  "f"
-                              MemberName 61(Nested) 1  "S"
-                              Name 63  "n"
-                              Name 64  "Nested"
-                              MemberName 64(Nested) 0  "f"
-                              MemberName 64(Nested) 1  "S"
-                              Name 65  "UBON"
-                              MemberName 65(UBON) 0  "N1"
-                              Name 67  "uBufN"
-                              Name 80  "Nested"
-                              MemberName 80(Nested) 0  "f"
-                              MemberName 80(Nested) 1  "S"
-                              Name 81  "SSBO1N"
-                              MemberName 81(SSBO1N) 0  "N2"
-                              Name 83  "outBufN"
-                              MemberDecorate 13(MyStruct) 0 Offset 0
-                              MemberDecorate 13(MyStruct) 1 Offset 16
-                              MemberDecorate 14(SSBO0) 0 Offset 0
-                              Decorate 14(SSBO0) BufferBlock
-                              Decorate 16(inBuf) DescriptorSet 0
-                              Decorate 16(inBuf) Binding 0
-                              MemberDecorate 29(SSBO1) 0 Offset 0
-                              Decorate 29(SSBO1) BufferBlock
-                              Decorate 31(outBuf) DescriptorSet 0
-                              Decorate 31(outBuf) Binding 1
-                              MemberDecorate 43(MyStruct) 0 Offset 0
-                              MemberDecorate 43(MyStruct) 1 Offset 16
-                              MemberDecorate 44(UBO) 0 Offset 0
-                              Decorate 44(UBO) Block
-                              Decorate 46(uBuf) DescriptorSet 0
-                              Decorate 46(uBuf) Binding 2
-                              MemberDecorate 64(Nested) 0 Offset 0
-                              MemberDecorate 64(Nested) 1 Offset 16
-                              MemberDecorate 65(UBON) 0 Offset 0
-                              Decorate 65(UBON) Block
-                              Decorate 67(uBufN) DescriptorSet 0
-                              Decorate 67(uBufN) Binding 2
-                              MemberDecorate 80(Nested) 0 Offset 0
-                              MemberDecorate 80(Nested) 1 Offset 16
-                              MemberDecorate 81(SSBO1N) 0 Offset 0
-                              Decorate 81(SSBO1N) BufferBlock
-                              Decorate 83(outBufN) DescriptorSet 0
-                              Decorate 83(outBufN) Binding 1
+                              Name 12  "MyStruct"
+                              MemberName 12(MyStruct) 0  "foo"
+                              MemberName 12(MyStruct) 1  "sb"
+                              Name 14  "t"
+                              Name 16  "MyStruct"
+                              MemberName 16(MyStruct) 0  "foo"
+                              MemberName 16(MyStruct) 1  "sb"
+                              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"
+                              Decorate 15 ArrayStride 8
+                              MemberDecorate 16(MyStruct) 0 Offset 0
+                              MemberDecorate 16(MyStruct) 1 Offset 16
+                              MemberDecorate 17(SSBO0) 0 Offset 0
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeVector 6(float) 4
-               8:             TypeBool
-     9(MyStruct):             TypeStruct 7(fvec4) 8(bool)
-              10:             TypePointer Function 9(MyStruct)
-              12:             TypeInt 32 0
-    13(MyStruct):             TypeStruct 7(fvec4) 12(int)
-       14(SSBO0):             TypeStruct 13(MyStruct)
-              15:             TypePointer Uniform 14(SSBO0)
-       16(inBuf):     15(ptr) Variable Uniform
-              17:             TypeInt 32 1
-              18:     17(int) Constant 0
-              19:             TypePointer Uniform 13(MyStruct)
-              23:             TypePointer Function 7(fvec4)
-              26:     17(int) Constant 1
-              27:             TypePointer Function 8(bool)
-       29(SSBO1):             TypeStruct 13(MyStruct)
-              30:             TypePointer Uniform 29(SSBO1)
-      31(outBuf):     30(ptr) Variable Uniform
-              35:             TypePointer Uniform 7(fvec4)
-              38:     12(int) Constant 0
-              39:     12(int) Constant 1
-              41:             TypePointer Uniform 12(int)
-    43(MyStruct):             TypeStruct 7(fvec4) 12(int)
-         44(UBO):             TypeStruct 43(MyStruct)
-              45:             TypePointer Uniform 44(UBO)
-        46(uBuf):     45(ptr) Variable Uniform
-              47:             TypePointer Uniform 43(MyStruct)
-      61(Nested):             TypeStruct 6(float) 9(MyStruct)
-              62:             TypePointer Function 61(Nested)
-      64(Nested):             TypeStruct 6(float) 43(MyStruct)
-        65(UBON):             TypeStruct 64(Nested)
-              66:             TypePointer Uniform 65(UBON)
-       67(uBufN):     66(ptr) Variable Uniform
-              68:             TypePointer Uniform 64(Nested)
-              72:             TypePointer Function 6(float)
-      80(Nested):             TypeStruct 6(float) 13(MyStruct)
-      81(SSBO1N):             TypeStruct 80(Nested)
-              82:             TypePointer Uniform 81(SSBO1N)
-     83(outBufN):     82(ptr) Variable Uniform
-              85:             TypePointer Uniform 80(Nested)
-              88:             TypePointer Uniform 6(float)
+               7:             TypeVector 6(float) 2
+               8:             TypeInt 32 0
+               9:      8(int) Constant 2
+              10:             TypeArray 7(fvec2) 9
+              11:             TypeBool
+    12(MyStruct):             TypeStruct 10 11(bool)
+              13:             TypePointer Function 12(MyStruct)
+              15:             TypeArray 7(fvec2) 9
+    16(MyStruct):             TypeStruct 15 8(int)
+       17(SSBO0):             TypeStruct 16(MyStruct)
+              18:             TypePointer Uniform 17(SSBO0)
+       19(inBuf):     18(ptr) Variable Uniform
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:             TypePointer Uniform 16(MyStruct)
+              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
          4(main):           2 Function None 3
                5:             Label
-           11(t):     10(ptr) Variable Function
-           63(n):     62(ptr) Variable Function
-              20:     19(ptr) AccessChain 16(inBuf) 18
-              21:13(MyStruct) Load 20
-              22:    7(fvec4) CompositeExtract 21 0
-              24:     23(ptr) AccessChain 11(t) 18
-                              Store 24 22
-              25:     12(int) CompositeExtract 21 1
-              28:     27(ptr) AccessChain 11(t) 26
-                              Store 28 25
-              32: 9(MyStruct) Load 11(t)
-              33:     19(ptr) AccessChain 31(outBuf) 18
-              34:    7(fvec4) CompositeExtract 32 0
-              36:     35(ptr) AccessChain 33 18
+           14(t):     13(ptr) Variable Function
+           86(n):     85(ptr) Variable Function
+              23:     22(ptr) AccessChain 19(inBuf) 21
+              24:16(MyStruct) Load 23
+              25:          15 CompositeExtract 24 0
+              27:     26(ptr) AccessChain 14(t) 21
+              28:    7(fvec2) CompositeExtract 25 0
+              30:     29(ptr) AccessChain 27 21
+                              Store 30 28
+              31:    7(fvec2) CompositeExtract 25 1
+              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
-              37:     8(bool) CompositeExtract 32 1
-              40:     12(int) Select 37 39 38
-              42:     41(ptr) AccessChain 33 26
-                              Store 42 40
-              48:     47(ptr) AccessChain 46(uBuf) 18
-              49:43(MyStruct) Load 48
-              50:    7(fvec4) CompositeExtract 49 0
-              51:     23(ptr) AccessChain 11(t) 18
-                              Store 51 50
-              52:     12(int) CompositeExtract 49 1
-              53:     27(ptr) AccessChain 11(t) 26
-                              Store 53 52
-              54: 9(MyStruct) Load 11(t)
-              55:     19(ptr) AccessChain 31(outBuf) 18
-              56:    7(fvec4) CompositeExtract 54 0
-              57:     35(ptr) AccessChain 55 18
-                              Store 57 56
-              58:     8(bool) CompositeExtract 54 1
-              59:     12(int) Select 58 39 38
-              60:     41(ptr) AccessChain 55 26
-                              Store 60 59
-              69:     68(ptr) AccessChain 67(uBufN) 18
-              70:  64(Nested) Load 69
-              71:    6(float) CompositeExtract 70 0
-              73:     72(ptr) AccessChain 63(n) 18
-                              Store 73 71
-              74:43(MyStruct) CompositeExtract 70 1
-              75:     10(ptr) AccessChain 63(n) 26
-              76:    7(fvec4) CompositeExtract 74 0
-              77:     23(ptr) AccessChain 75 18
+              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:     12(int) CompositeExtract 74 1
-              79:     27(ptr) AccessChain 75 26
+              78:    7(fvec2) CompositeExtract 74 1
+              79:     46(ptr) AccessChain 75 32
                               Store 79 78
-              84:  61(Nested) Load 63(n)
-              86:     85(ptr) AccessChain 83(outBufN) 18
-              87:    6(float) CompositeExtract 84 0
-              89:     88(ptr) AccessChain 86 18
-                              Store 89 87
-              90: 9(MyStruct) CompositeExtract 84 1
-              91:     19(ptr) AccessChain 86 26
-              92:    7(fvec4) CompositeExtract 90 0
-              93:     35(ptr) AccessChain 91 18
-                              Store 93 92
-              94:     8(bool) CompositeExtract 90 1
-              95:     12(int) Select 94 39 38
-              96:     41(ptr) AccessChain 91 26
-                              Store 96 95
+              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
+                              Store 108 107
+             109:      8(int) CompositeExtract 101 1
+             110:     35(ptr) AccessChain 102 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
                               Return
                               FunctionEnd
index de27ccb..7462da4 100644 (file)
@@ -2,7 +2,7 @@
 \r
 struct MyStruct\r
 {\r
-    vec4 foo;\r
+    vec2 foo[2];\r
     bool sb;\r
 };\r
 \r
@@ -23,7 +23,7 @@ layout(binding = 2, std140) uniform UBO
 \r
 struct Nested {\r
     float f;\r
-    MyStruct S;\r
+    MyStruct S[2];\r
 };\r
 \r
 layout(binding = 2, std140) uniform UBON\r
index 41f9a70..3370391 100644 (file)
@@ -3,4 +3,4 @@
 // For the date, it uses the current date (when then script is run).
 
 #define GLSLANG_REVISION "Overload400-PrecQual.1481"
-#define GLSLANG_DATE "10-Sep-2016"
+#define GLSLANG_DATE "11-Sep-2016"