HLSL: Track binding numbers to struct instances; fixes issue #496.
This commit is contained in:
parent
58d2843c6a
commit
b804de605c
@ -23,19 +23,19 @@ gl_FragCoord origin is upper left
|
|||||||
0:27 Constant:
|
0:27 Constant:
|
||||||
0:27 0 (const uint)
|
0:27 0 (const uint)
|
||||||
0:27 v3: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
|
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 Constant:
|
||||||
0:27 0 (const uint)
|
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 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 Constant:
|
||||||
0:27 0 (const uint)
|
0:27 0 (const uint)
|
||||||
0:27 Branch: Return
|
0:27 Branch: Return
|
||||||
0:? Linker Objects
|
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@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@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@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(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@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:
|
Linked fragment stage:
|
||||||
@ -65,19 +65,19 @@ gl_FragCoord origin is upper left
|
|||||||
0:27 Constant:
|
0:27 Constant:
|
||||||
0:27 0 (const uint)
|
0:27 0 (const uint)
|
||||||
0:27 v3: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
|
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 Constant:
|
||||||
0:27 0 (const uint)
|
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 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 Constant:
|
||||||
0:27 0 (const uint)
|
0:27 0 (const uint)
|
||||||
0:27 Branch: Return
|
0:27 Branch: Return
|
||||||
0:? Linker Objects
|
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@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@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@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(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@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
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
@ -123,6 +123,7 @@ gl_FragCoord origin is upper left
|
|||||||
MemberDecorate 28 1 Offset 20
|
MemberDecorate 28 1 Offset 20
|
||||||
Decorate 28 Block
|
Decorate 28 Block
|
||||||
Decorate 30 DescriptorSet 0
|
Decorate 30 DescriptorSet 0
|
||||||
|
Decorate 30 Binding 2
|
||||||
MemberDecorate 34 0 Offset 16
|
MemberDecorate 34 0 Offset 16
|
||||||
MemberDecorate 34 1 Offset 48
|
MemberDecorate 34 1 Offset 48
|
||||||
MemberDecorate 34 2 Offset 60
|
MemberDecorate 34 2 Offset 60
|
||||||
@ -133,6 +134,7 @@ gl_FragCoord origin is upper left
|
|||||||
MemberDecorate 34 7 Offset 80
|
MemberDecorate 34 7 Offset 80
|
||||||
Decorate 34 BufferBlock
|
Decorate 34 BufferBlock
|
||||||
Decorate 36 DescriptorSet 0
|
Decorate 36 DescriptorSet 0
|
||||||
|
Decorate 36 Binding 8
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeFloat 32
|
6: TypeFloat 32
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
// For the version, it uses the latest git tag followed by the number of commits.
|
// 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).
|
// For the date, it uses the current date (when then script is run).
|
||||||
|
|
||||||
#define GLSLANG_REVISION "Overload400-PrecQual.1465"
|
#define GLSLANG_REVISION "Overload400-PrecQual.1468"
|
||||||
#define GLSLANG_DATE "02-Sep-2016"
|
#define GLSLANG_DATE "05-Sep-2016"
|
||||||
|
@ -1292,17 +1292,16 @@ bool HlslGrammar::acceptType(TType& type)
|
|||||||
//
|
//
|
||||||
bool HlslGrammar::acceptStruct(TType& type)
|
bool HlslGrammar::acceptStruct(TType& type)
|
||||||
{
|
{
|
||||||
// This qualifier.storage will tell us whether it's an AST block or
|
// This storage qualifier will tell us whether it's an AST
|
||||||
// just a struct.
|
// block type or just a generic structure type.
|
||||||
TQualifier qualifier;
|
TStorageQualifier storageQualifier = EvqTemporary;
|
||||||
qualifier.clear();
|
|
||||||
|
|
||||||
// CBUFFER
|
// CBUFFER
|
||||||
if (acceptTokenClass(EHTokCBuffer))
|
if (acceptTokenClass(EHTokCBuffer))
|
||||||
qualifier.storage = EvqUniform;
|
storageQualifier = EvqUniform;
|
||||||
// TBUFFER
|
// TBUFFER
|
||||||
else if (acceptTokenClass(EHTokTBuffer))
|
else if (acceptTokenClass(EHTokTBuffer))
|
||||||
qualifier.storage = EvqBuffer;
|
storageQualifier = EvqBuffer;
|
||||||
// STRUCT
|
// STRUCT
|
||||||
else if (! acceptTokenClass(EHTokStruct))
|
else if (! acceptTokenClass(EHTokStruct))
|
||||||
return false;
|
return false;
|
||||||
@ -1337,10 +1336,13 @@ bool HlslGrammar::acceptStruct(TType& type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create the user-defined type
|
// create the user-defined type
|
||||||
if (qualifier.storage == EvqTemporary)
|
if (storageQualifier == EvqTemporary)
|
||||||
new(&type) TType(typeList, structName);
|
new(&type) TType(typeList, structName);
|
||||||
else
|
else {
|
||||||
|
TQualifier qualifier = type.getQualifier();
|
||||||
|
qualifier.storage = storageQualifier;
|
||||||
new(&type) TType(typeList, structName, qualifier); // sets EbtBlock
|
new(&type) TType(typeList, structName, qualifier); // sets EbtBlock
|
||||||
|
}
|
||||||
|
|
||||||
// If it was named, which means the type can be reused later, add
|
// 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
|
// it to the symbol table. (Unless it's a block, in which
|
||||||
|
Loading…
x
Reference in New Issue
Block a user