HLSL: Fix #1203: Declare anonymous members for cbuffer with no ';'

The grammar for no semicolon and no object name for cbuffer/tbuffer
was correct, but the production still skipped the anonymous declarations
if an identifier followed.
This commit is contained in:
John Kessenich 2018-01-02 11:27:54 -07:00
parent fd1e8a78a8
commit 132cf53737
4 changed files with 271 additions and 207 deletions

View File

@ -8,50 +8,66 @@ gl_FragCoord origin is upper left
0:31 Branch: Return with expression 0:31 Branch: Return with expression
0:31 Constant: 0:31 Constant:
0:31 1.000000 0:31 1.000000
0:35 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float) 0:43 Function Definition: @PixelShaderFunction(vf4; ( temp structure{ temp 4-component vector of float a})
0:35 Function Parameters: 0:43 Function Parameters:
0:35 'input' ( in 4-component vector of float) 0:43 'input' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:36 Branch: Return with expression 0:45 move second child to first child ( temp 4-component vector of float)
0:36 vector-scale ( temp 4-component vector of float) 0:45 a: direct index for structure ( temp 4-component vector of float)
0:36 add ( temp 4-component vector of float) 0:45 'ret' ( temp structure{ temp 4-component vector of float a})
0:36 add ( temp 4-component vector of float) 0:45 Constant:
0:36 add ( temp 4-component vector of float) 0:45 0 (const int)
0:36 add ( temp 4-component vector of float) 0:45 add ( temp 4-component vector of float)
0:36 'input' ( in 4-component vector of float) 0:45 v24: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
0:36 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float) 0:45 'anon@4' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v24})
0:36 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1}) 0:45 Constant:
0:36 Constant: 0:45 0 (const uint)
0:36 0 (const uint) 0:45 vector-scale ( temp 4-component vector of float)
0:36 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float) 0:45 add ( temp 4-component vector of float)
0:36 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2}) 0:45 add ( temp 4-component vector of float)
0:36 Constant: 0:45 add ( temp 4-component vector of float)
0:36 0 (const uint) 0:45 add ( temp 4-component vector of float)
0:36 v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float) 0:45 'input' ( in 4-component vector of float)
0:36 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3}) 0:45 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
0:36 Constant: 0:45 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
0:36 0 (const uint) 0:45 Constant:
0:36 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float) 0:45 0 (const uint)
0:36 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4}) 0:45 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
0:36 Constant: 0:45 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
0:36 0 (const uint) 0:45 Constant:
0:36 Function Call: foo( ( temp float) 0:45 0 (const uint)
0:35 Function Definition: PixelShaderFunction( ( temp void) 0:45 v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
0:35 Function Parameters: 0:45 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
0:45 Constant:
0:45 0 (const uint)
0:45 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:45 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
0:45 Constant:
0:45 0 (const uint)
0:45 Function Call: foo( ( temp float)
0:46 Branch: Return with expression
0:46 'ret' ( temp structure{ temp 4-component vector of float a})
0:43 Function Definition: PixelShaderFunction( ( temp void)
0:43 Function Parameters:
0:? Sequence 0:? Sequence
0:35 move second child to first child ( temp 4-component vector of float) 0:43 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float) 0:? 'input' ( temp 4-component vector of float)
0:? 'input' ( in 4-component vector of float FragCoord) 0:? 'input' ( in 4-component vector of float FragCoord)
0:35 move second child to first child ( temp 4-component vector of float) 0:43 Sequence
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:43 move second child to first child ( temp 4-component vector of float)
0:35 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float) 0:? '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
0:43 a: direct index for structure ( temp 4-component vector of float)
0:43 Function Call: @PixelShaderFunction(vf4; ( temp structure{ temp 4-component vector of float a})
0:? 'input' ( temp 4-component vector of float) 0:? 'input' ( temp 4-component vector of float)
0:43 Constant:
0:43 0 (const int)
0:? Linker Objects 0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1}) 0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
0:? 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2}) 0:? 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
0:? 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3}) 0:? 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
0:? 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4}) 0:? 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'anon@4' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v24})
0:? '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
0:? 'input' ( in 4-component vector of float FragCoord) 0:? 'input' ( in 4-component vector of float FragCoord)
@ -67,203 +83,241 @@ gl_FragCoord origin is upper left
0:31 Branch: Return with expression 0:31 Branch: Return with expression
0:31 Constant: 0:31 Constant:
0:31 1.000000 0:31 1.000000
0:35 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float) 0:43 Function Definition: @PixelShaderFunction(vf4; ( temp structure{ temp 4-component vector of float a})
0:35 Function Parameters: 0:43 Function Parameters:
0:35 'input' ( in 4-component vector of float) 0:43 'input' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:36 Branch: Return with expression 0:45 move second child to first child ( temp 4-component vector of float)
0:36 vector-scale ( temp 4-component vector of float) 0:45 a: direct index for structure ( temp 4-component vector of float)
0:36 add ( temp 4-component vector of float) 0:45 'ret' ( temp structure{ temp 4-component vector of float a})
0:36 add ( temp 4-component vector of float) 0:45 Constant:
0:36 add ( temp 4-component vector of float) 0:45 0 (const int)
0:36 add ( temp 4-component vector of float) 0:45 add ( temp 4-component vector of float)
0:36 'input' ( in 4-component vector of float) 0:45 v24: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
0:36 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float) 0:45 'anon@4' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v24})
0:36 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1}) 0:45 Constant:
0:36 Constant: 0:45 0 (const uint)
0:36 0 (const uint) 0:45 vector-scale ( temp 4-component vector of float)
0:36 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float) 0:45 add ( temp 4-component vector of float)
0:36 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2}) 0:45 add ( temp 4-component vector of float)
0:36 Constant: 0:45 add ( temp 4-component vector of float)
0:36 0 (const uint) 0:45 add ( temp 4-component vector of float)
0:36 v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float) 0:45 'input' ( in 4-component vector of float)
0:36 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3}) 0:45 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
0:36 Constant: 0:45 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
0:36 0 (const uint) 0:45 Constant:
0:36 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float) 0:45 0 (const uint)
0:36 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4}) 0:45 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
0:36 Constant: 0:45 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
0:36 0 (const uint) 0:45 Constant:
0:36 Function Call: foo( ( temp float) 0:45 0 (const uint)
0:35 Function Definition: PixelShaderFunction( ( temp void) 0:45 v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
0:35 Function Parameters: 0:45 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
0:45 Constant:
0:45 0 (const uint)
0:45 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:45 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
0:45 Constant:
0:45 0 (const uint)
0:45 Function Call: foo( ( temp float)
0:46 Branch: Return with expression
0:46 'ret' ( temp structure{ temp 4-component vector of float a})
0:43 Function Definition: PixelShaderFunction( ( temp void)
0:43 Function Parameters:
0:? Sequence 0:? Sequence
0:35 move second child to first child ( temp 4-component vector of float) 0:43 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float) 0:? 'input' ( temp 4-component vector of float)
0:? 'input' ( in 4-component vector of float FragCoord) 0:? 'input' ( in 4-component vector of float FragCoord)
0:35 move second child to first child ( temp 4-component vector of float) 0:43 Sequence
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:43 move second child to first child ( temp 4-component vector of float)
0:35 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float) 0:? '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
0:43 a: direct index for structure ( temp 4-component vector of float)
0:43 Function Call: @PixelShaderFunction(vf4; ( temp structure{ temp 4-component vector of float a})
0:? 'input' ( temp 4-component vector of float) 0:? 'input' ( temp 4-component vector of float)
0:43 Constant:
0:43 0 (const int)
0:? Linker Objects 0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1}) 0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
0:? 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2}) 0:? 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
0:? 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3}) 0:? 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
0:? 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4}) 0:? 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'anon@4' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v24})
0:? '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
0:? 'input' ( in 4-component vector of float FragCoord) 0:? 'input' ( in 4-component vector of float FragCoord)
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80003 // Generated by (magic number): 80003
// Id's are bound by 61 // Id's are bound by 73
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 54 57 EntryPoint Fragment 4 "PixelShaderFunction" 65 68
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Source HLSL 500 Source HLSL 500
Name 4 "PixelShaderFunction" Name 4 "PixelShaderFunction"
Name 8 "foo(" Name 8 "foo("
Name 14 "@PixelShaderFunction(vf4;" Name 12 "id"
Name 13 "input" MemberName 12(id) 0 "a"
Name 20 "buf1" Name 15 "@PixelShaderFunction(vf4;"
MemberName 20(buf1) 0 "v1" Name 14 "input"
Name 22 "" Name 21 "ret"
Name 29 "buf2" Name 24 "cbufName2"
MemberName 29(buf2) 0 "v2" MemberName 24(cbufName2) 0 "v24"
Name 31 "" Name 26 ""
Name 35 "cbufName" Name 31 "buf1"
MemberName 35(cbufName) 0 "v3" MemberName 31(buf1) 0 "v1"
MemberName 35(cbufName) 1 "i3" Name 33 ""
Name 37 "" Name 37 "buf2"
Name 42 "tbufName" MemberName 37(buf2) 0 "v2"
MemberName 42(tbufName) 0 "v4" Name 39 ""
MemberName 42(tbufName) 1 "i4" Name 43 "cbufName"
MemberName 42(tbufName) 2 "f1" MemberName 43(cbufName) 0 "v3"
MemberName 42(tbufName) 3 "f3" MemberName 43(cbufName) 1 "i3"
MemberName 42(tbufName) 4 "f4" Name 45 ""
MemberName 42(tbufName) 5 "f5" Name 50 "tbufName"
MemberName 42(tbufName) 6 "f6" MemberName 50(tbufName) 0 "v4"
MemberName 42(tbufName) 7 "f7" MemberName 50(tbufName) 1 "i4"
MemberName 42(tbufName) 8 "m1" MemberName 50(tbufName) 2 "f1"
MemberName 42(tbufName) 9 "m2" MemberName 50(tbufName) 3 "f3"
MemberName 42(tbufName) 10 "m3" MemberName 50(tbufName) 4 "f4"
MemberName 42(tbufName) 11 "m4" MemberName 50(tbufName) 5 "f5"
Name 44 "" MemberName 50(tbufName) 6 "f6"
Name 52 "input" MemberName 50(tbufName) 7 "f7"
Name 54 "input" MemberName 50(tbufName) 8 "m1"
Name 57 "@entryPointOutput" MemberName 50(tbufName) 9 "m2"
Name 58 "param" MemberName 50(tbufName) 10 "m3"
MemberDecorate 20(buf1) 0 Offset 0 MemberName 50(tbufName) 11 "m4"
Decorate 20(buf1) Block Name 52 ""
Decorate 22 DescriptorSet 0 Name 63 "input"
MemberDecorate 29(buf2) 0 NonWritable Name 65 "input"
MemberDecorate 29(buf2) 0 Offset 0 Name 68 "@entryPointOutput.a"
Decorate 29(buf2) BufferBlock Name 69 "param"
Decorate 31 DescriptorSet 0 MemberDecorate 24(cbufName2) 0 Offset 0
MemberDecorate 35(cbufName) 0 Offset 0 Decorate 24(cbufName2) Block
MemberDecorate 35(cbufName) 1 Offset 20 Decorate 26 DescriptorSet 0
Decorate 35(cbufName) Block MemberDecorate 31(buf1) 0 Offset 0
Decorate 37 DescriptorSet 0 Decorate 31(buf1) Block
MemberDecorate 42(tbufName) 0 NonWritable Decorate 33 DescriptorSet 0
MemberDecorate 42(tbufName) 0 Offset 16 MemberDecorate 37(buf2) 0 NonWritable
MemberDecorate 42(tbufName) 1 NonWritable MemberDecorate 37(buf2) 0 Offset 0
MemberDecorate 42(tbufName) 1 Offset 48 Decorate 37(buf2) BufferBlock
MemberDecorate 42(tbufName) 2 NonWritable Decorate 39 DescriptorSet 0
MemberDecorate 42(tbufName) 2 Offset 60 MemberDecorate 43(cbufName) 0 Offset 0
MemberDecorate 42(tbufName) 3 NonWritable MemberDecorate 43(cbufName) 1 Offset 20
MemberDecorate 42(tbufName) 3 Offset 64 Decorate 43(cbufName) Block
MemberDecorate 42(tbufName) 4 NonWritable Decorate 45 DescriptorSet 0
MemberDecorate 42(tbufName) 4 Offset 68 MemberDecorate 50(tbufName) 0 NonWritable
MemberDecorate 42(tbufName) 5 NonWritable MemberDecorate 50(tbufName) 0 Offset 16
MemberDecorate 42(tbufName) 5 Offset 72 MemberDecorate 50(tbufName) 1 NonWritable
MemberDecorate 42(tbufName) 6 NonWritable MemberDecorate 50(tbufName) 1 Offset 48
MemberDecorate 42(tbufName) 6 Offset 76 MemberDecorate 50(tbufName) 2 NonWritable
MemberDecorate 42(tbufName) 7 NonWritable MemberDecorate 50(tbufName) 2 Offset 60
MemberDecorate 42(tbufName) 7 Offset 128 MemberDecorate 50(tbufName) 3 NonWritable
MemberDecorate 42(tbufName) 8 RowMajor MemberDecorate 50(tbufName) 3 Offset 64
MemberDecorate 42(tbufName) 8 NonWritable MemberDecorate 50(tbufName) 4 NonWritable
MemberDecorate 42(tbufName) 8 Offset 112 MemberDecorate 50(tbufName) 4 Offset 68
MemberDecorate 42(tbufName) 8 MatrixStride 16 MemberDecorate 50(tbufName) 5 NonWritable
MemberDecorate 42(tbufName) 9 ColMajor MemberDecorate 50(tbufName) 5 Offset 72
MemberDecorate 42(tbufName) 9 NonWritable MemberDecorate 50(tbufName) 6 NonWritable
MemberDecorate 42(tbufName) 9 Offset 176 MemberDecorate 50(tbufName) 6 Offset 76
MemberDecorate 42(tbufName) 9 MatrixStride 16 MemberDecorate 50(tbufName) 7 NonWritable
MemberDecorate 42(tbufName) 10 RowMajor MemberDecorate 50(tbufName) 7 Offset 128
MemberDecorate 42(tbufName) 10 NonWritable MemberDecorate 50(tbufName) 8 RowMajor
MemberDecorate 42(tbufName) 10 Offset 240 MemberDecorate 50(tbufName) 8 NonWritable
MemberDecorate 42(tbufName) 10 MatrixStride 16 MemberDecorate 50(tbufName) 8 Offset 112
MemberDecorate 42(tbufName) 11 RowMajor MemberDecorate 50(tbufName) 8 MatrixStride 16
MemberDecorate 42(tbufName) 11 NonWritable MemberDecorate 50(tbufName) 9 ColMajor
MemberDecorate 42(tbufName) 11 Offset 304 MemberDecorate 50(tbufName) 9 NonWritable
MemberDecorate 42(tbufName) 11 MatrixStride 16 MemberDecorate 50(tbufName) 9 Offset 176
Decorate 42(tbufName) BufferBlock MemberDecorate 50(tbufName) 9 MatrixStride 16
Decorate 44 DescriptorSet 0 MemberDecorate 50(tbufName) 10 RowMajor
Decorate 44 Binding 8 MemberDecorate 50(tbufName) 10 NonWritable
Decorate 54(input) BuiltIn FragCoord MemberDecorate 50(tbufName) 10 Offset 240
Decorate 57(@entryPointOutput) Location 0 MemberDecorate 50(tbufName) 10 MatrixStride 16
MemberDecorate 50(tbufName) 11 RowMajor
MemberDecorate 50(tbufName) 11 NonWritable
MemberDecorate 50(tbufName) 11 Offset 304
MemberDecorate 50(tbufName) 11 MatrixStride 16
Decorate 50(tbufName) BufferBlock
Decorate 52 DescriptorSet 0
Decorate 52 Binding 8
Decorate 65(input) BuiltIn FragCoord
Decorate 68(@entryPointOutput.a) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
7: TypeFunction 6(float) 7: TypeFunction 6(float)
10: TypeVector 6(float) 4 10: TypeVector 6(float) 4
11: TypePointer Function 10(fvec4) 11: TypePointer Function 10(fvec4)
12: TypeFunction 10(fvec4) 11(ptr) 12(id): TypeStruct 10(fvec4)
16: 6(float) Constant 1065353216 13: TypeFunction 12(id) 11(ptr)
20(buf1): TypeStruct 10(fvec4) 17: 6(float) Constant 1065353216
21: TypePointer Uniform 20(buf1) 20: TypePointer Function 12(id)
22: 21(ptr) Variable Uniform 22: TypeInt 32 1
23: TypeInt 32 1 23: 22(int) Constant 0
24: 23(int) Constant 0 24(cbufName2): TypeStruct 10(fvec4)
25: TypePointer Uniform 10(fvec4) 25: TypePointer Uniform 24(cbufName2)
29(buf2): TypeStruct 10(fvec4) 26: 25(ptr) Variable Uniform
30: TypePointer Uniform 29(buf2) 27: TypePointer Uniform 10(fvec4)
31: 30(ptr) Variable Uniform 31(buf1): TypeStruct 10(fvec4)
35(cbufName): TypeStruct 10(fvec4) 23(int) 32: TypePointer Uniform 31(buf1)
36: TypePointer Uniform 35(cbufName) 33: 32(ptr) Variable Uniform
37: 36(ptr) Variable Uniform 37(buf2): TypeStruct 10(fvec4)
41: TypeMatrix 10(fvec4) 3 38: TypePointer Uniform 37(buf2)
42(tbufName): TypeStruct 10(fvec4) 23(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 41 41 41 41 39: 38(ptr) Variable Uniform
43: TypePointer Uniform 42(tbufName) 43(cbufName): TypeStruct 10(fvec4) 22(int)
44: 43(ptr) Variable Uniform 44: TypePointer Uniform 43(cbufName)
53: TypePointer Input 10(fvec4) 45: 44(ptr) Variable Uniform
54(input): 53(ptr) Variable Input 49: TypeMatrix 10(fvec4) 3
56: TypePointer Output 10(fvec4) 50(tbufName): TypeStruct 10(fvec4) 22(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 49 49 49 49
57(@entryPointOutput): 56(ptr) Variable Output 51: TypePointer Uniform 50(tbufName)
52: 51(ptr) Variable Uniform
64: TypePointer Input 10(fvec4)
65(input): 64(ptr) Variable Input
67: TypePointer Output 10(fvec4)
68(@entryPointOutput.a): 67(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3 4(PixelShaderFunction): 2 Function None 3
5: Label 5: Label
52(input): 11(ptr) Variable Function 63(input): 11(ptr) Variable Function
58(param): 11(ptr) Variable Function 69(param): 11(ptr) Variable Function
55: 10(fvec4) Load 54(input) 66: 10(fvec4) Load 65(input)
Store 52(input) 55 Store 63(input) 66
59: 10(fvec4) Load 52(input) 70: 10(fvec4) Load 63(input)
Store 58(param) 59 Store 69(param) 70
60: 10(fvec4) FunctionCall 14(@PixelShaderFunction(vf4;) 58(param) 71: 12(id) FunctionCall 15(@PixelShaderFunction(vf4;) 69(param)
Store 57(@entryPointOutput) 60 72: 10(fvec4) CompositeExtract 71 0
Store 68(@entryPointOutput.a) 72
Return Return
FunctionEnd FunctionEnd
8(foo(): 6(float) Function None 7 8(foo(): 6(float) Function None 7
9: Label 9: Label
ReturnValue 16 ReturnValue 17
FunctionEnd FunctionEnd
14(@PixelShaderFunction(vf4;): 10(fvec4) Function None 12 15(@PixelShaderFunction(vf4;): 12(id) Function None 13
13(input): 11(ptr) FunctionParameter 14(input): 11(ptr) FunctionParameter
15: Label 16: Label
19: 10(fvec4) Load 13(input) 21(ret): 20(ptr) Variable Function
26: 25(ptr) AccessChain 22 24 28: 27(ptr) AccessChain 26 23
27: 10(fvec4) Load 26 29: 10(fvec4) Load 28
28: 10(fvec4) FAdd 19 27 30: 10(fvec4) Load 14(input)
32: 25(ptr) AccessChain 31 24 34: 27(ptr) AccessChain 33 23
33: 10(fvec4) Load 32 35: 10(fvec4) Load 34
34: 10(fvec4) FAdd 28 33 36: 10(fvec4) FAdd 30 35
38: 25(ptr) AccessChain 37 24 40: 27(ptr) AccessChain 39 23
39: 10(fvec4) Load 38 41: 10(fvec4) Load 40
40: 10(fvec4) FAdd 34 39 42: 10(fvec4) FAdd 36 41
45: 25(ptr) AccessChain 44 24 46: 27(ptr) AccessChain 45 23
46: 10(fvec4) Load 45 47: 10(fvec4) Load 46
47: 10(fvec4) FAdd 40 46 48: 10(fvec4) FAdd 42 47
48: 6(float) FunctionCall 8(foo() 53: 27(ptr) AccessChain 52 23
49: 10(fvec4) VectorTimesScalar 47 48 54: 10(fvec4) Load 53
ReturnValue 49 55: 10(fvec4) FAdd 48 54
56: 6(float) FunctionCall 8(foo()
57: 10(fvec4) VectorTimesScalar 55 56
58: 10(fvec4) FAdd 29 57
59: 11(ptr) AccessChain 21(ret) 23
Store 59 58
60: 12(id) Load 21(ret)
ReturnValue 60
FunctionEnd FunctionEnd

View File

@ -31,7 +31,17 @@ float foo() // float looks like identifier, but can't be part of tbuffer
return 1.0; return 1.0;
} }
float4 PixelShaderFunction(float4 input : SV_POSITION) : SV_TARGET0 struct id {
{ float4 a;
return (input + v1 + v2 + v3 + v4) * foo(); };
cbuffer cbufName2 {
float4 v24;
}
id PixelShaderFunction(float4 input : SV_POSITION) : SV_TARGET0 // id looks like id for cbuffer name, but can't be
{
id ret;
ret.a = v24 + (input + v1 + v2 + v3 + v4) * foo();
return ret;
} }

View File

@ -376,7 +376,7 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer)); bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer));
// fully_specified_type // fully_specified_type
if (! acceptFullySpecifiedType(declaredType, nodeList, declarator.attributes)) if (! acceptFullySpecifiedType(declaredType, nodeList, declarator.attributes, forbidDeclarators))
return false; return false;
// cbuffer and tbuffer end with the closing '}'. // cbuffer and tbuffer end with the closing '}'.
@ -583,7 +583,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, const TAttributeMap& att
TIntermNode* nodeList = nullptr; TIntermNode* nodeList = nullptr;
return acceptFullySpecifiedType(type, nodeList, attributes); return acceptFullySpecifiedType(type, nodeList, attributes);
} }
bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList, const TAttributeMap& attributes) bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList, const TAttributeMap& attributes, bool forbidDeclarators)
{ {
// type_qualifier // type_qualifier
TQualifier qualifier; TQualifier qualifier;
@ -611,7 +611,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList,
parseContext.transferTypeAttributes(attributes, type); parseContext.transferTypeAttributes(attributes, type);
// further, it can create an anonymous instance of the block // further, it can create an anonymous instance of the block
if (peek() != EHTokIdentifier) if (forbidDeclarators || peek() != EHTokIdentifier)
parseContext.declareBlock(loc, type); parseContext.declareBlock(loc, type);
} else { } else {
// Some qualifiers are set when parsing the type. Merge those with // Some qualifiers are set when parsing the type. Merge those with

View File

@ -72,7 +72,7 @@ namespace glslang {
bool acceptSamplerDeclarationDX9(TType&); bool acceptSamplerDeclarationDX9(TType&);
bool acceptSamplerState(); bool acceptSamplerState();
bool acceptFullySpecifiedType(TType&, const TAttributeMap&); bool acceptFullySpecifiedType(TType&, const TAttributeMap&);
bool acceptFullySpecifiedType(TType&, TIntermNode*& nodeList, const TAttributeMap&); bool acceptFullySpecifiedType(TType&, TIntermNode*& nodeList, const TAttributeMap&, bool forbidDeclarators = false);
bool acceptQualifier(TQualifier&); bool acceptQualifier(TQualifier&);
bool acceptLayoutQualifierList(TQualifier&); bool acceptLayoutQualifierList(TQualifier&);
bool acceptType(TType&); bool acceptType(TType&);