HLSL: Remove support for named tbuffer/cbuffer. Fixes #939.
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index 6ef44e4..c0d251c 100755
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -2,41 +2,49 @@
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:30 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:30 Function Definition: foo( ( temp float)
0:30 Function Parameters:
-0:30 'input' ( in 4-component vector of float)
0:? Sequence
0:31 Branch: Return with expression
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 'input' ( in 4-component vector of float)
-0:31 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
-0:31 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
-0:31 '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:31 Constant:
-0:31 0 (const uint)
-0:31 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:31 '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:31 Constant:
-0:31 0 (const uint)
-0:30 Function Definition: PixelShaderFunction( ( temp void)
-0:30 Function Parameters:
+0:31 Constant:
+0:31 1.000000
+0:35 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35 Function Parameters:
+0:35 'input' ( in 4-component vector of float)
0:? Sequence
-0:30 move second child to first child ( temp 4-component vector of float)
+0:36 Branch: Return with expression
+0:36 vector-scale ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 'input' ( in 4-component vector of float)
+0:36 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:36 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 v2: direct index for structure (layout( row_major std430) buffer 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:36 Constant:
+0:36 0 (const uint)
+0:36 v3: direct index for structure (layout( row_major std140 offset=0) uniform 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:36 Constant:
+0:36 0 (const uint)
+0:36 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+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:36 Constant:
+0:36 0 (const uint)
+0:36 Function Call: foo( ( temp float)
+0:35 Function Definition: PixelShaderFunction( ( temp void)
+0:35 Function Parameters:
+0:? Sequence
+0:35 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? 'input' ( in 4-component vector of float FragCoord)
-0:30 move second child to first child ( temp 4-component vector of float)
+0:35 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:30 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
@@ -53,41 +61,49 @@
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:30 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:30 Function Definition: foo( ( temp float)
0:30 Function Parameters:
-0:30 'input' ( in 4-component vector of float)
0:? Sequence
0:31 Branch: Return with expression
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 'input' ( in 4-component vector of float)
-0:31 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
-0:31 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
-0:31 '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:31 Constant:
-0:31 0 (const uint)
-0:31 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:31 '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:31 Constant:
-0:31 0 (const uint)
-0:30 Function Definition: PixelShaderFunction( ( temp void)
-0:30 Function Parameters:
+0:31 Constant:
+0:31 1.000000
+0:35 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35 Function Parameters:
+0:35 'input' ( in 4-component vector of float)
0:? Sequence
-0:30 move second child to first child ( temp 4-component vector of float)
+0:36 Branch: Return with expression
+0:36 vector-scale ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 'input' ( in 4-component vector of float)
+0:36 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:36 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 v2: direct index for structure (layout( row_major std430) buffer 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:36 Constant:
+0:36 0 (const uint)
+0:36 v3: direct index for structure (layout( row_major std140 offset=0) uniform 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:36 Constant:
+0:36 0 (const uint)
+0:36 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+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:36 Constant:
+0:36 0 (const uint)
+0:36 Function Call: foo( ( temp float)
+0:35 Function Definition: PixelShaderFunction( ( temp void)
+0:35 Function Parameters:
+0:? Sequence
+0:35 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? 'input' ( in 4-component vector of float FragCoord)
-0:30 move second child to first child ( temp 4-component vector of float)
+0:35 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:30 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
@@ -99,146 +115,155 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 53
+// Id's are bound by 61
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 46 49
+ EntryPoint Fragment 4 "PixelShaderFunction" 54 57
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "PixelShaderFunction"
- Name 11 "@PixelShaderFunction(vf4;"
- Name 10 "input"
- Name 14 "buf1"
- MemberName 14(buf1) 0 "v1"
- Name 16 ""
- Name 23 "buf2"
- MemberName 23(buf2) 0 "v2"
- Name 25 ""
- Name 29 "cbufName"
- MemberName 29(cbufName) 0 "v3"
- MemberName 29(cbufName) 1 "i3"
+ Name 8 "foo("
+ Name 14 "@PixelShaderFunction(vf4;"
+ Name 13 "input"
+ Name 20 "buf1"
+ MemberName 20(buf1) 0 "v1"
+ Name 22 ""
+ Name 29 "buf2"
+ MemberName 29(buf2) 0 "v2"
Name 31 ""
- Name 36 "tbufName"
- MemberName 36(tbufName) 0 "v4"
- MemberName 36(tbufName) 1 "i4"
- MemberName 36(tbufName) 2 "f1"
- MemberName 36(tbufName) 3 "f3"
- MemberName 36(tbufName) 4 "f4"
- MemberName 36(tbufName) 5 "f5"
- MemberName 36(tbufName) 6 "f6"
- MemberName 36(tbufName) 7 "f7"
- MemberName 36(tbufName) 8 "m1"
- MemberName 36(tbufName) 9 "m2"
- MemberName 36(tbufName) 10 "m3"
- MemberName 36(tbufName) 11 "m4"
- Name 38 ""
- Name 44 "input"
- Name 46 "input"
- Name 49 "@entryPointOutput"
- Name 50 "param"
- MemberDecorate 14(buf1) 0 Offset 0
- Decorate 14(buf1) Block
- Decorate 16 DescriptorSet 0
- MemberDecorate 23(buf2) 0 NonWritable
- MemberDecorate 23(buf2) 0 Offset 0
- Decorate 23(buf2) BufferBlock
- Decorate 25 DescriptorSet 0
- MemberDecorate 29(cbufName) 0 Offset 0
- MemberDecorate 29(cbufName) 1 Offset 20
- Decorate 29(cbufName) Block
+ Name 35 "cbufName"
+ MemberName 35(cbufName) 0 "v3"
+ MemberName 35(cbufName) 1 "i3"
+ Name 37 ""
+ Name 42 "tbufName"
+ MemberName 42(tbufName) 0 "v4"
+ MemberName 42(tbufName) 1 "i4"
+ MemberName 42(tbufName) 2 "f1"
+ MemberName 42(tbufName) 3 "f3"
+ MemberName 42(tbufName) 4 "f4"
+ MemberName 42(tbufName) 5 "f5"
+ MemberName 42(tbufName) 6 "f6"
+ MemberName 42(tbufName) 7 "f7"
+ MemberName 42(tbufName) 8 "m1"
+ MemberName 42(tbufName) 9 "m2"
+ MemberName 42(tbufName) 10 "m3"
+ MemberName 42(tbufName) 11 "m4"
+ Name 44 ""
+ Name 52 "input"
+ Name 54 "input"
+ Name 57 "@entryPointOutput"
+ Name 58 "param"
+ MemberDecorate 20(buf1) 0 Offset 0
+ Decorate 20(buf1) Block
+ Decorate 22 DescriptorSet 0
+ MemberDecorate 29(buf2) 0 NonWritable
+ MemberDecorate 29(buf2) 0 Offset 0
+ Decorate 29(buf2) BufferBlock
Decorate 31 DescriptorSet 0
- MemberDecorate 36(tbufName) 0 NonWritable
- MemberDecorate 36(tbufName) 0 Offset 16
- MemberDecorate 36(tbufName) 1 NonWritable
- MemberDecorate 36(tbufName) 1 Offset 48
- MemberDecorate 36(tbufName) 2 NonWritable
- MemberDecorate 36(tbufName) 2 Offset 60
- MemberDecorate 36(tbufName) 3 NonWritable
- MemberDecorate 36(tbufName) 3 Offset 64
- MemberDecorate 36(tbufName) 4 NonWritable
- MemberDecorate 36(tbufName) 4 Offset 68
- MemberDecorate 36(tbufName) 5 NonWritable
- MemberDecorate 36(tbufName) 5 Offset 72
- MemberDecorate 36(tbufName) 6 NonWritable
- MemberDecorate 36(tbufName) 6 Offset 76
- MemberDecorate 36(tbufName) 7 NonWritable
- MemberDecorate 36(tbufName) 7 Offset 128
- MemberDecorate 36(tbufName) 8 RowMajor
- MemberDecorate 36(tbufName) 8 NonWritable
- MemberDecorate 36(tbufName) 8 Offset 112
- MemberDecorate 36(tbufName) 8 MatrixStride 16
- MemberDecorate 36(tbufName) 9 ColMajor
- MemberDecorate 36(tbufName) 9 NonWritable
- MemberDecorate 36(tbufName) 9 Offset 176
- MemberDecorate 36(tbufName) 9 MatrixStride 16
- MemberDecorate 36(tbufName) 10 RowMajor
- MemberDecorate 36(tbufName) 10 NonWritable
- MemberDecorate 36(tbufName) 10 Offset 240
- MemberDecorate 36(tbufName) 10 MatrixStride 16
- MemberDecorate 36(tbufName) 11 RowMajor
- MemberDecorate 36(tbufName) 11 NonWritable
- MemberDecorate 36(tbufName) 11 Offset 304
- MemberDecorate 36(tbufName) 11 MatrixStride 16
- Decorate 36(tbufName) BufferBlock
- Decorate 38 DescriptorSet 0
- Decorate 38 Binding 8
- Decorate 46(input) BuiltIn FragCoord
- Decorate 49(@entryPointOutput) Location 0
+ MemberDecorate 35(cbufName) 0 Offset 0
+ MemberDecorate 35(cbufName) 1 Offset 20
+ Decorate 35(cbufName) Block
+ Decorate 37 DescriptorSet 0
+ MemberDecorate 42(tbufName) 0 NonWritable
+ MemberDecorate 42(tbufName) 0 Offset 16
+ MemberDecorate 42(tbufName) 1 NonWritable
+ MemberDecorate 42(tbufName) 1 Offset 48
+ MemberDecorate 42(tbufName) 2 NonWritable
+ MemberDecorate 42(tbufName) 2 Offset 60
+ MemberDecorate 42(tbufName) 3 NonWritable
+ MemberDecorate 42(tbufName) 3 Offset 64
+ MemberDecorate 42(tbufName) 4 NonWritable
+ MemberDecorate 42(tbufName) 4 Offset 68
+ MemberDecorate 42(tbufName) 5 NonWritable
+ MemberDecorate 42(tbufName) 5 Offset 72
+ MemberDecorate 42(tbufName) 6 NonWritable
+ MemberDecorate 42(tbufName) 6 Offset 76
+ MemberDecorate 42(tbufName) 7 NonWritable
+ MemberDecorate 42(tbufName) 7 Offset 128
+ MemberDecorate 42(tbufName) 8 RowMajor
+ MemberDecorate 42(tbufName) 8 NonWritable
+ MemberDecorate 42(tbufName) 8 Offset 112
+ MemberDecorate 42(tbufName) 8 MatrixStride 16
+ MemberDecorate 42(tbufName) 9 ColMajor
+ MemberDecorate 42(tbufName) 9 NonWritable
+ MemberDecorate 42(tbufName) 9 Offset 176
+ MemberDecorate 42(tbufName) 9 MatrixStride 16
+ MemberDecorate 42(tbufName) 10 RowMajor
+ MemberDecorate 42(tbufName) 10 NonWritable
+ MemberDecorate 42(tbufName) 10 Offset 240
+ MemberDecorate 42(tbufName) 10 MatrixStride 16
+ MemberDecorate 42(tbufName) 11 RowMajor
+ MemberDecorate 42(tbufName) 11 NonWritable
+ MemberDecorate 42(tbufName) 11 Offset 304
+ MemberDecorate 42(tbufName) 11 MatrixStride 16
+ Decorate 42(tbufName) BufferBlock
+ Decorate 44 DescriptorSet 0
+ Decorate 44 Binding 8
+ Decorate 54(input) BuiltIn FragCoord
+ Decorate 57(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
- 7: TypeVector 6(float) 4
- 8: TypePointer Function 7(fvec4)
- 9: TypeFunction 7(fvec4) 8(ptr)
- 14(buf1): TypeStruct 7(fvec4)
- 15: TypePointer Uniform 14(buf1)
- 16: 15(ptr) Variable Uniform
- 17: TypeInt 32 1
- 18: 17(int) Constant 0
- 19: TypePointer Uniform 7(fvec4)
- 23(buf2): TypeStruct 7(fvec4)
- 24: TypePointer Uniform 23(buf2)
- 25: 24(ptr) Variable Uniform
- 29(cbufName): TypeStruct 7(fvec4) 17(int)
- 30: TypePointer Uniform 29(cbufName)
+ 7: TypeFunction 6(float)
+ 10: TypeVector 6(float) 4
+ 11: TypePointer Function 10(fvec4)
+ 12: TypeFunction 10(fvec4) 11(ptr)
+ 16: 6(float) Constant 1065353216
+ 20(buf1): TypeStruct 10(fvec4)
+ 21: TypePointer Uniform 20(buf1)
+ 22: 21(ptr) Variable Uniform
+ 23: TypeInt 32 1
+ 24: 23(int) Constant 0
+ 25: TypePointer Uniform 10(fvec4)
+ 29(buf2): TypeStruct 10(fvec4)
+ 30: TypePointer Uniform 29(buf2)
31: 30(ptr) Variable Uniform
- 35: TypeMatrix 7(fvec4) 3
- 36(tbufName): TypeStruct 7(fvec4) 17(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 35 35 35 35
- 37: TypePointer Uniform 36(tbufName)
- 38: 37(ptr) Variable Uniform
- 45: TypePointer Input 7(fvec4)
- 46(input): 45(ptr) Variable Input
- 48: TypePointer Output 7(fvec4)
-49(@entryPointOutput): 48(ptr) Variable Output
+ 35(cbufName): TypeStruct 10(fvec4) 23(int)
+ 36: TypePointer Uniform 35(cbufName)
+ 37: 36(ptr) Variable Uniform
+ 41: TypeMatrix 10(fvec4) 3
+ 42(tbufName): TypeStruct 10(fvec4) 23(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 41 41 41 41
+ 43: TypePointer Uniform 42(tbufName)
+ 44: 43(ptr) Variable Uniform
+ 53: TypePointer Input 10(fvec4)
+ 54(input): 53(ptr) Variable Input
+ 56: TypePointer Output 10(fvec4)
+57(@entryPointOutput): 56(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
- 44(input): 8(ptr) Variable Function
- 50(param): 8(ptr) Variable Function
- 47: 7(fvec4) Load 46(input)
- Store 44(input) 47
- 51: 7(fvec4) Load 44(input)
- Store 50(param) 51
- 52: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 50(param)
- Store 49(@entryPointOutput) 52
+ 52(input): 11(ptr) Variable Function
+ 58(param): 11(ptr) Variable Function
+ 55: 10(fvec4) Load 54(input)
+ Store 52(input) 55
+ 59: 10(fvec4) Load 52(input)
+ Store 58(param) 59
+ 60: 10(fvec4) FunctionCall 14(@PixelShaderFunction(vf4;) 58(param)
+ Store 57(@entryPointOutput) 60
Return
FunctionEnd
-11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9
- 10(input): 8(ptr) FunctionParameter
- 12: Label
- 13: 7(fvec4) Load 10(input)
- 20: 19(ptr) AccessChain 16 18
- 21: 7(fvec4) Load 20
- 22: 7(fvec4) FAdd 13 21
- 26: 19(ptr) AccessChain 25 18
- 27: 7(fvec4) Load 26
- 28: 7(fvec4) FAdd 22 27
- 32: 19(ptr) AccessChain 31 18
- 33: 7(fvec4) Load 32
- 34: 7(fvec4) FAdd 28 33
- 39: 19(ptr) AccessChain 38 18
- 40: 7(fvec4) Load 39
- 41: 7(fvec4) FAdd 34 40
- ReturnValue 41
+ 8(foo(): 6(float) Function None 7
+ 9: Label
+ ReturnValue 16
+ FunctionEnd
+14(@PixelShaderFunction(vf4;): 10(fvec4) Function None 12
+ 13(input): 11(ptr) FunctionParameter
+ 15: Label
+ 19: 10(fvec4) Load 13(input)
+ 26: 25(ptr) AccessChain 22 24
+ 27: 10(fvec4) Load 26
+ 28: 10(fvec4) FAdd 19 27
+ 32: 25(ptr) AccessChain 31 24
+ 33: 10(fvec4) Load 32
+ 34: 10(fvec4) FAdd 28 33
+ 38: 25(ptr) AccessChain 37 24
+ 39: 10(fvec4) Load 38
+ 40: 10(fvec4) FAdd 34 39
+ 45: 25(ptr) AccessChain 44 24
+ 46: 10(fvec4) Load 45
+ 47: 10(fvec4) FAdd 40 46
+ 48: 6(float) FunctionCall 8(foo()
+ 49: 10(fvec4) VectorTimesScalar 47 48
+ ReturnValue 49
FunctionEnd
diff --git a/Test/baseResults/hlsl.reflection.vert.out b/Test/baseResults/hlsl.reflection.vert.out
index 8ecfde6..5f7a033 100644
--- a/Test/baseResults/hlsl.reflection.vert.out
+++ b/Test/baseResults/hlsl.reflection.vert.out
@@ -2,26 +2,19 @@
Uniform reflection:
anonMember3: offset 80, type 8b52, size 1, index 0, binding -1
s.a: offset 0, type 1404, size 1, index 1, binding -1
-ablock.scalar: offset 12, type 1404, size 1, index 2, binding -1
m23: offset 16, type 8b67, size 1, index 0, binding -1
scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1
-c_m23: offset 16, type 8b67, size 1, index 3, binding -1
-c_scalarAfterm23: offset 48, type 1404, size 1, index 3, binding -1
+c_m23: offset 16, type 8b67, size 1, index 2, binding -1
+c_scalarAfterm23: offset 48, type 1404, size 1, index 2, binding -1
scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1
floatArray: offset 112, type 1406, size 5, index 0, binding -1
scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1
-ablock.memfloat2: offset 48, type 8b50, size 1, index 2, binding -1
-ablock.memf1: offset 56, type 1406, size 1, index 2, binding -1
-ablock.memf2: offset 60, type 8b56, size 1, index 2, binding -1
-ablock.memf3: offset 64, type 1404, size 1, index 2, binding -1
-ablock.memfloat2a: offset 72, type 8b50, size 1, index 2, binding -1
-ablock.m22: offset 80, type 8b5a, size 7, index 2, binding -1
+m22: offset 208, type 8b5a, size 9, index 0, binding -1
dm22: offset 32, type 8b5a, size 4, index 1, binding -1
-m22: offset 208, type 8b5a, size 3, index 0, binding -1
-nest.foo.n1.a: offset 0, type 1406, size 1, index 4, binding -1
-nest.foo.n2.b: offset 16, type 1406, size 1, index 4, binding -1
-nest.foo.n2.c: offset 20, type 1406, size 1, index 4, binding -1
-nest.foo.n2.d: offset 24, type 1406, size 1, index 4, binding -1
+foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1
+foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1
+foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1
+foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1
deepA.d2.d1[2].va: offset 376, type 8b50, size 2, index 1, binding -1
deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1
deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1
@@ -61,19 +54,18 @@
deepD[1].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1
deepD[1].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1
deepD[1].v3: offset 2480, type 8b54, size 1, index 1, binding -1
-arrBl.foo: offset 0, type 1406, size 1, index 5, binding -1
-arrBl2.foo: offset 0, type 1406, size 1, index 6, binding -1
+foo1: offset 0, type 1406, size 1, index 4, binding -1
+foo2: offset 0, type 1406, size 1, index 5, binding -1
anonMember1: offset 0, type 8b51, size 1, index 0, binding -1
uf1: offset 16, type 1406, size 1, index 1, binding -1
Uniform block reflection:
nameless: offset -1, type ffffffff, size 496, index -1, binding -1
$Global: offset -1, type ffffffff, size 3088, index -1, binding -1
-ablock: offset -1, type ffffffff, size 304, index -1, binding -1
c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1
-nest: offset -1, type ffffffff, size 32, index -1, binding -1
-arrBl: offset -1, type ffffffff, size 4, index -1, binding -1
-arrBl2: offset -1, type ffffffff, size 4, index -1, binding -1
+nested: offset -1, type ffffffff, size 32, index -1, binding -1
+abl: offset -1, type ffffffff, size 4, index -1, binding -1
+abl2: offset -1, type ffffffff, size 4, index -1, binding -1
Vertex attribute reflection:
attributeFloat: offset 0, type 1406, size 0, index 0, binding -1
diff --git a/Test/hlsl.buffer.frag b/Test/hlsl.buffer.frag
index 1c112cf..520de09 100644
--- a/Test/hlsl.buffer.frag
+++ b/Test/hlsl.buffer.frag
@@ -1,15 +1,15 @@
cbuffer buf1 {
float4 v1;
-};
+}; // extraneous ;
tbuffer buf2 {
float4 v2;
-};
+}; // extraneous ;
cbuffer cbufName {
float4 v3 : packoffset(c0);
int i3 : packoffset(c1.y);
-} // no semicolon is okay
+}
tbuffer tbufName : register(t8) {
float4 v4 : packoffset(c1);
@@ -24,9 +24,14 @@
row_major float3x4 m2 : packoffset(c11);
column_major float3x4 m3 : packoffset(c15);
float3x4 m4 : packoffset(c19);
-} // no semicolon is okay
+}
+
+float foo() // float looks like identifier, but can't be part of tbuffer
+{
+ return 1.0;
+}
float4 PixelShaderFunction(float4 input : SV_POSITION) : SV_TARGET0
{
- return input + v1 + v2 + v3 + v4;
+ return (input + v1 + v2 + v3 + v4) * foo();
}
diff --git a/Test/hlsl.reflection.vert b/Test/hlsl.reflection.vert
index 21cc810..06207c7 100644
--- a/Test/hlsl.reflection.vert
+++ b/Test/hlsl.reflection.vert
@@ -19,27 +19,10 @@
float4 c_anonMember3;
};
-cbuffer named {
- float3 deadMember1;
- int scalar;
- float4 member2;
- float4 member3;
- float2 memfloat2;
- float memf1;
- bool memf2;
- int memf3;
- float2 memfloat2a;
- float2x2 m22[7];
-} ablock;
-
cbuffer namelessdead {
int a;
};
-cbuffer namedDead {
- int b;
-} bblock;
-
struct N1 {
float a;
};
@@ -57,7 +40,7 @@
cbuffer nested {
N3 foo;
-} nest;
+}
struct TS {
int a;
@@ -89,16 +72,12 @@
int3 v3;
};
-
-
-
uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2];
const bool control = true;
void deadFunction()
{
- float3 v3 = ablock.deadMember1;
float4 v = anonDeadMember2;
float f = ufDead4;
}
@@ -110,12 +89,12 @@
}
tbuffer abl {
- float foo;
-} arrBl;
+ float foo1;
+}
tbuffer abl2 {
- float foo;
-} arrBl2;
+ float foo2;
+}
void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attributeFloat3, in float4 attributeFloat4, in float4x4 attributeMat4)
{
@@ -130,22 +109,16 @@
liveFunction2();
f = anonMember3.z;
f = s.a;
- f = ablock.scalar;
f = m23[1].y + scalarAfterm23;
f = c_m23[1].y + c_scalarAfterm23;
f += scalarBeforeArray;
f += floatArray[2];
f += floatArray[4];
f += scalarAfterArray;
- f += ablock.memfloat2.x;
- f += ablock.memf1;
- f += float(ablock.memf2);
- f += ablock.memf3;
- f += ablock.memfloat2a.y;
- f += ablock.m22[i][1][0];
+ f += m22[i][1][0];
f += dm22[3][0][1];
f += m22[2][1].y;
- f += nest.foo.n1.a + nest.foo.n2.b + nest.foo.n2.c + nest.foo.n2.d;
+ f += foo.n1.a + foo.n2.b + foo.n2.c + foo.n2.d;
f += deepA[i].d2.d1[2].va[1].x;
f += deepB[1].d2.d1[i].va[1].x;
f += deepB[i].d2.d1[i].va[1].x;
@@ -154,8 +127,8 @@
} else
f = ufDead3;
- f += arrBl.foo + arrBl.foo;
- f += arrBl2.foo;
+ f += foo1 + foo2;
+ f += foo2;
f += attributeFloat;
f += attributeFloat2.x;
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index fd590f8..d8675f2 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -371,10 +371,16 @@
// if (acceptSamplerDeclarationDX9(declaredType))
// return true;
+ bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer));
// fully_specified_type
if (! acceptFullySpecifiedType(declaredType, nodeList))
return false;
+ // cbuffer and tbuffer end with the closing '}'.
+ // No semicolon is included.
+ if (forbidDeclarators)
+ return true;
+
// declarator_list
// : declarator
// : identifier
@@ -489,7 +495,7 @@
// COMMA
if (acceptTokenClass(EHTokComma))
declarator_list = true;
- }
+ }
// The top-level initializer node is a sequence.
if (initializers != nullptr)
@@ -501,18 +507,15 @@
else
nodeList = initializers;
- // SEMICOLON(optional for cbuffer/tbuffer)
+ // SEMICOLON
if (! acceptTokenClass(EHTokSemicolon)) {
+ // This may have been a false detection of what appeared to be a declaration, but
+ // was actually an assignment such as "float = 4", where "float" is an identifier.
+ // We put the token back to let further parsing happen for cases where that may
+ // happen. This errors on the side of caution, and mostly triggers the error.
if (peek() == EHTokAssign || peek() == EHTokLeftBracket || peek() == EHTokDot || peek() == EHTokComma) {
- // This may have been a false detection of what appeared to be a declaration, but
- // was actually an assignment such as "float = 4", where "float" is an identifier.
- // We put the token back to let further parsing happen for cases where that may
- // happen. This errors on the side of caution, and mostly triggers the error.
recedeToken();
return false;
- } else if (declaredType.getBasicType() == EbtBlock) {
- // cbuffer, et. al. (but not struct) don't have an ending semicolon
- return true;
} else {
expected(";");
return false;
@@ -1904,10 +1907,10 @@
bool readonly = false;
if (acceptTokenClass(EHTokCBuffer)) {
- // CBUFFER
+ // CBUFFER
storageQualifier = EvqUniform;
} else if (acceptTokenClass(EHTokTBuffer)) {
- // TBUFFER
+ // TBUFFER
storageQualifier = EvqBuffer;
readonly = true;
} else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct)) {