HLSL: Track binding numbers to struct instances; fixes issue #496.
authorJohn Kessenich <cepheus@frii.com>
Mon, 5 Sep 2016 18:19:18 +0000 (12:19 -0600)
committerJohn Kessenich <cepheus@frii.com>
Mon, 5 Sep 2016 18:19:18 +0000 (12:19 -0600)
Test/baseResults/hlsl.buffer.frag.out
glslang/Include/revision.h
hlsl/hlslGrammar.cpp

index 23f8627..d1b36fb 100755 (executable)
@@ -23,19 +23,19 @@ gl_FragCoord origin is upper left
 0:27                  Constant:
 0:27                    0 (const uint)
 0:27              v3: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
-0:27                'anon@2' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
+0:27                'anon@2' (layout(binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
 0:27                Constant:
 0:27                  0 (const uint)
 0:27            v4: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
-0:27              'anon@3' (layout(column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
+0:27              'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
 0:27              Constant:
 0:27                0 (const uint)
 0:27        Branch: Return
 0:?   Linker Objects
 0:?     'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v1})
 0:?     'anon@1' (layout(column_major std430 ) buffer block{layout(column_major std430 ) buffer 4-component vector of float v2})
-0:?     'anon@2' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
-0:?     'anon@3' (layout(column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
+0:?     'anon@2' (layout(binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
+0:?     'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
 
 
 Linked fragment stage:
@@ -65,19 +65,19 @@ gl_FragCoord origin is upper left
 0:27                  Constant:
 0:27                    0 (const uint)
 0:27              v3: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
-0:27                'anon@2' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
+0:27                'anon@2' (layout(binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
 0:27                Constant:
 0:27                  0 (const uint)
 0:27            v4: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
-0:27              'anon@3' (layout(column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
+0:27              'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
 0:27              Constant:
 0:27                0 (const uint)
 0:27        Branch: Return
 0:?   Linker Objects
 0:?     'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v1})
 0:?     'anon@1' (layout(column_major std430 ) buffer block{layout(column_major std430 ) buffer 4-component vector of float v2})
-0:?     'anon@2' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
-0:?     'anon@3' (layout(column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
+0:?     'anon@2' (layout(binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
+0:?     'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -123,6 +123,7 @@ gl_FragCoord origin is upper left
                               MemberDecorate 28 1 Offset 20
                               Decorate 28 Block
                               Decorate 30 DescriptorSet 0
+                              Decorate 30 Binding 2
                               MemberDecorate 34 0 Offset 16
                               MemberDecorate 34 1 Offset 48
                               MemberDecorate 34 2 Offset 60
@@ -133,6 +134,7 @@ gl_FragCoord origin is upper left
                               MemberDecorate 34 7 Offset 80
                               Decorate 34 BufferBlock
                               Decorate 36 DescriptorSet 0
+                              Decorate 36 Binding 8
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
index bd0738d..1b21289 100644 (file)
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "Overload400-PrecQual.1465"
-#define GLSLANG_DATE "02-Sep-2016"
+#define GLSLANG_REVISION "Overload400-PrecQual.1468"
+#define GLSLANG_DATE "05-Sep-2016"
index a4fe38e..c45cd8b 100755 (executable)
@@ -1292,17 +1292,16 @@ bool HlslGrammar::acceptType(TType& type)
 //
 bool HlslGrammar::acceptStruct(TType& type)
 {
-    // This qualifier.storage will tell us whether it's an AST block or
-    // just a struct.
-    TQualifier qualifier;
-    qualifier.clear();
+    // This storage qualifier will tell us whether it's an AST
+    // block type or just a generic structure type.
+    TStorageQualifier storageQualifier = EvqTemporary;
 
     // CBUFFER
     if (acceptTokenClass(EHTokCBuffer))
-        qualifier.storage = EvqUniform;
+        storageQualifier = EvqUniform;
     // TBUFFER
     else if (acceptTokenClass(EHTokTBuffer))
-        qualifier.storage = EvqBuffer;
+        storageQualifier = EvqBuffer;
     // STRUCT
     else if (! acceptTokenClass(EHTokStruct))
         return false;
@@ -1337,10 +1336,13 @@ bool HlslGrammar::acceptStruct(TType& type)
     }
 
     // create the user-defined type
-    if (qualifier.storage == EvqTemporary)
+    if (storageQualifier == EvqTemporary)
         new(&type) TType(typeList, structName);
-    else
+    else {
+        TQualifier qualifier = type.getQualifier();
+        qualifier.storage = storageQualifier;
         new(&type) TType(typeList, structName, qualifier); // sets EbtBlock
+    }
 
     // If it was named, which means the type can be reused later, add
     // it to the symbol table.  (Unless it's a block, in which