HLSL: Remove support for named tbuffer/cbuffer. Fixes #939.

This commit is contained in:
John Kessenich 2017-06-19 15:41:11 -06:00
parent 054378d988
commit 2fcdd64e50
5 changed files with 251 additions and 253 deletions

View File

@ -2,41 +2,49 @@ hlsl.buffer.frag
Shader version: 500 Shader version: 500
gl_FragCoord origin is upper left gl_FragCoord origin is upper left
0:? Sequence 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 Function Parameters:
0:30 'input' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:31 Branch: Return with expression 0:31 Branch: Return with expression
0:31 add ( temp 4-component vector of float) 0:31 Constant:
0:31 add ( temp 4-component vector of float) 0:31 1.000000
0:31 add ( temp 4-component vector of float) 0:35 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:31 add ( temp 4-component vector of float) 0:35 Function Parameters:
0:31 'input' ( in 4-component vector of float) 0:35 '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:? Sequence 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' ( 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: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:? '@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:? 'input' ( temp 4-component vector of float)
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})
@ -53,41 +61,49 @@ Linked fragment stage:
Shader version: 500 Shader version: 500
gl_FragCoord origin is upper left gl_FragCoord origin is upper left
0:? Sequence 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 Function Parameters:
0:30 'input' ( in 4-component vector of float)
0:? Sequence 0:? Sequence
0:31 Branch: Return with expression 0:31 Branch: Return with expression
0:31 add ( temp 4-component vector of float) 0:31 Constant:
0:31 add ( temp 4-component vector of float) 0:31 1.000000
0:31 add ( temp 4-component vector of float) 0:35 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:31 add ( temp 4-component vector of float) 0:35 Function Parameters:
0:31 'input' ( in 4-component vector of float) 0:35 '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:? Sequence 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' ( 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: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:? '@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:? 'input' ( temp 4-component vector of float)
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})
@ -99,146 +115,155 @@ gl_FragCoord origin is upper left
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 53 // Id's are bound by 61
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 46 49 EntryPoint Fragment 4 "PixelShaderFunction" 54 57
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Source HLSL 500 Source HLSL 500
Name 4 "PixelShaderFunction" Name 4 "PixelShaderFunction"
Name 11 "@PixelShaderFunction(vf4;" Name 8 "foo("
Name 10 "input" Name 14 "@PixelShaderFunction(vf4;"
Name 14 "buf1" Name 13 "input"
MemberName 14(buf1) 0 "v1" Name 20 "buf1"
Name 16 "" MemberName 20(buf1) 0 "v1"
Name 23 "buf2" Name 22 ""
MemberName 23(buf2) 0 "v2" Name 29 "buf2"
Name 25 "" MemberName 29(buf2) 0 "v2"
Name 29 "cbufName"
MemberName 29(cbufName) 0 "v3"
MemberName 29(cbufName) 1 "i3"
Name 31 "" Name 31 ""
Name 36 "tbufName" Name 35 "cbufName"
MemberName 36(tbufName) 0 "v4" MemberName 35(cbufName) 0 "v3"
MemberName 36(tbufName) 1 "i4" MemberName 35(cbufName) 1 "i3"
MemberName 36(tbufName) 2 "f1" Name 37 ""
MemberName 36(tbufName) 3 "f3" Name 42 "tbufName"
MemberName 36(tbufName) 4 "f4" MemberName 42(tbufName) 0 "v4"
MemberName 36(tbufName) 5 "f5" MemberName 42(tbufName) 1 "i4"
MemberName 36(tbufName) 6 "f6" MemberName 42(tbufName) 2 "f1"
MemberName 36(tbufName) 7 "f7" MemberName 42(tbufName) 3 "f3"
MemberName 36(tbufName) 8 "m1" MemberName 42(tbufName) 4 "f4"
MemberName 36(tbufName) 9 "m2" MemberName 42(tbufName) 5 "f5"
MemberName 36(tbufName) 10 "m3" MemberName 42(tbufName) 6 "f6"
MemberName 36(tbufName) 11 "m4" MemberName 42(tbufName) 7 "f7"
Name 38 "" MemberName 42(tbufName) 8 "m1"
Name 44 "input" MemberName 42(tbufName) 9 "m2"
Name 46 "input" MemberName 42(tbufName) 10 "m3"
Name 49 "@entryPointOutput" MemberName 42(tbufName) 11 "m4"
Name 50 "param" Name 44 ""
MemberDecorate 14(buf1) 0 Offset 0 Name 52 "input"
Decorate 14(buf1) Block Name 54 "input"
Decorate 16 DescriptorSet 0 Name 57 "@entryPointOutput"
MemberDecorate 23(buf2) 0 NonWritable Name 58 "param"
MemberDecorate 23(buf2) 0 Offset 0 MemberDecorate 20(buf1) 0 Offset 0
Decorate 23(buf2) BufferBlock Decorate 20(buf1) Block
Decorate 25 DescriptorSet 0 Decorate 22 DescriptorSet 0
MemberDecorate 29(cbufName) 0 Offset 0 MemberDecorate 29(buf2) 0 NonWritable
MemberDecorate 29(cbufName) 1 Offset 20 MemberDecorate 29(buf2) 0 Offset 0
Decorate 29(cbufName) Block Decorate 29(buf2) BufferBlock
Decorate 31 DescriptorSet 0 Decorate 31 DescriptorSet 0
MemberDecorate 36(tbufName) 0 NonWritable MemberDecorate 35(cbufName) 0 Offset 0
MemberDecorate 36(tbufName) 0 Offset 16 MemberDecorate 35(cbufName) 1 Offset 20
MemberDecorate 36(tbufName) 1 NonWritable Decorate 35(cbufName) Block
MemberDecorate 36(tbufName) 1 Offset 48 Decorate 37 DescriptorSet 0
MemberDecorate 36(tbufName) 2 NonWritable MemberDecorate 42(tbufName) 0 NonWritable
MemberDecorate 36(tbufName) 2 Offset 60 MemberDecorate 42(tbufName) 0 Offset 16
MemberDecorate 36(tbufName) 3 NonWritable MemberDecorate 42(tbufName) 1 NonWritable
MemberDecorate 36(tbufName) 3 Offset 64 MemberDecorate 42(tbufName) 1 Offset 48
MemberDecorate 36(tbufName) 4 NonWritable MemberDecorate 42(tbufName) 2 NonWritable
MemberDecorate 36(tbufName) 4 Offset 68 MemberDecorate 42(tbufName) 2 Offset 60
MemberDecorate 36(tbufName) 5 NonWritable MemberDecorate 42(tbufName) 3 NonWritable
MemberDecorate 36(tbufName) 5 Offset 72 MemberDecorate 42(tbufName) 3 Offset 64
MemberDecorate 36(tbufName) 6 NonWritable MemberDecorate 42(tbufName) 4 NonWritable
MemberDecorate 36(tbufName) 6 Offset 76 MemberDecorate 42(tbufName) 4 Offset 68
MemberDecorate 36(tbufName) 7 NonWritable MemberDecorate 42(tbufName) 5 NonWritable
MemberDecorate 36(tbufName) 7 Offset 128 MemberDecorate 42(tbufName) 5 Offset 72
MemberDecorate 36(tbufName) 8 RowMajor MemberDecorate 42(tbufName) 6 NonWritable
MemberDecorate 36(tbufName) 8 NonWritable MemberDecorate 42(tbufName) 6 Offset 76
MemberDecorate 36(tbufName) 8 Offset 112 MemberDecorate 42(tbufName) 7 NonWritable
MemberDecorate 36(tbufName) 8 MatrixStride 16 MemberDecorate 42(tbufName) 7 Offset 128
MemberDecorate 36(tbufName) 9 ColMajor MemberDecorate 42(tbufName) 8 RowMajor
MemberDecorate 36(tbufName) 9 NonWritable MemberDecorate 42(tbufName) 8 NonWritable
MemberDecorate 36(tbufName) 9 Offset 176 MemberDecorate 42(tbufName) 8 Offset 112
MemberDecorate 36(tbufName) 9 MatrixStride 16 MemberDecorate 42(tbufName) 8 MatrixStride 16
MemberDecorate 36(tbufName) 10 RowMajor MemberDecorate 42(tbufName) 9 ColMajor
MemberDecorate 36(tbufName) 10 NonWritable MemberDecorate 42(tbufName) 9 NonWritable
MemberDecorate 36(tbufName) 10 Offset 240 MemberDecorate 42(tbufName) 9 Offset 176
MemberDecorate 36(tbufName) 10 MatrixStride 16 MemberDecorate 42(tbufName) 9 MatrixStride 16
MemberDecorate 36(tbufName) 11 RowMajor MemberDecorate 42(tbufName) 10 RowMajor
MemberDecorate 36(tbufName) 11 NonWritable MemberDecorate 42(tbufName) 10 NonWritable
MemberDecorate 36(tbufName) 11 Offset 304 MemberDecorate 42(tbufName) 10 Offset 240
MemberDecorate 36(tbufName) 11 MatrixStride 16 MemberDecorate 42(tbufName) 10 MatrixStride 16
Decorate 36(tbufName) BufferBlock MemberDecorate 42(tbufName) 11 RowMajor
Decorate 38 DescriptorSet 0 MemberDecorate 42(tbufName) 11 NonWritable
Decorate 38 Binding 8 MemberDecorate 42(tbufName) 11 Offset 304
Decorate 46(input) BuiltIn FragCoord MemberDecorate 42(tbufName) 11 MatrixStride 16
Decorate 49(@entryPointOutput) Location 0 Decorate 42(tbufName) BufferBlock
Decorate 44 DescriptorSet 0
Decorate 44 Binding 8
Decorate 54(input) BuiltIn FragCoord
Decorate 57(@entryPointOutput) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
7: TypeVector 6(float) 4 7: TypeFunction 6(float)
8: TypePointer Function 7(fvec4) 10: TypeVector 6(float) 4
9: TypeFunction 7(fvec4) 8(ptr) 11: TypePointer Function 10(fvec4)
14(buf1): TypeStruct 7(fvec4) 12: TypeFunction 10(fvec4) 11(ptr)
15: TypePointer Uniform 14(buf1) 16: 6(float) Constant 1065353216
16: 15(ptr) Variable Uniform 20(buf1): TypeStruct 10(fvec4)
17: TypeInt 32 1 21: TypePointer Uniform 20(buf1)
18: 17(int) Constant 0 22: 21(ptr) Variable Uniform
19: TypePointer Uniform 7(fvec4) 23: TypeInt 32 1
23(buf2): TypeStruct 7(fvec4) 24: 23(int) Constant 0
24: TypePointer Uniform 23(buf2) 25: TypePointer Uniform 10(fvec4)
25: 24(ptr) Variable Uniform 29(buf2): TypeStruct 10(fvec4)
29(cbufName): TypeStruct 7(fvec4) 17(int) 30: TypePointer Uniform 29(buf2)
30: TypePointer Uniform 29(cbufName)
31: 30(ptr) Variable Uniform 31: 30(ptr) Variable Uniform
35: TypeMatrix 7(fvec4) 3 35(cbufName): TypeStruct 10(fvec4) 23(int)
36(tbufName): TypeStruct 7(fvec4) 17(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 35 35 35 35 36: TypePointer Uniform 35(cbufName)
37: TypePointer Uniform 36(tbufName) 37: 36(ptr) Variable Uniform
38: 37(ptr) Variable Uniform 41: TypeMatrix 10(fvec4) 3
45: TypePointer Input 7(fvec4) 42(tbufName): TypeStruct 10(fvec4) 23(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 41 41 41 41
46(input): 45(ptr) Variable Input 43: TypePointer Uniform 42(tbufName)
48: TypePointer Output 7(fvec4) 44: 43(ptr) Variable Uniform
49(@entryPointOutput): 48(ptr) Variable Output 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 4(PixelShaderFunction): 2 Function None 3
5: Label 5: Label
44(input): 8(ptr) Variable Function 52(input): 11(ptr) Variable Function
50(param): 8(ptr) Variable Function 58(param): 11(ptr) Variable Function
47: 7(fvec4) Load 46(input) 55: 10(fvec4) Load 54(input)
Store 44(input) 47 Store 52(input) 55
51: 7(fvec4) Load 44(input) 59: 10(fvec4) Load 52(input)
Store 50(param) 51 Store 58(param) 59
52: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 50(param) 60: 10(fvec4) FunctionCall 14(@PixelShaderFunction(vf4;) 58(param)
Store 49(@entryPointOutput) 52 Store 57(@entryPointOutput) 60
Return Return
FunctionEnd FunctionEnd
11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9 8(foo(): 6(float) Function None 7
10(input): 8(ptr) FunctionParameter 9: Label
12: Label ReturnValue 16
13: 7(fvec4) Load 10(input) FunctionEnd
20: 19(ptr) AccessChain 16 18 14(@PixelShaderFunction(vf4;): 10(fvec4) Function None 12
21: 7(fvec4) Load 20 13(input): 11(ptr) FunctionParameter
22: 7(fvec4) FAdd 13 21 15: Label
26: 19(ptr) AccessChain 25 18 19: 10(fvec4) Load 13(input)
27: 7(fvec4) Load 26 26: 25(ptr) AccessChain 22 24
28: 7(fvec4) FAdd 22 27 27: 10(fvec4) Load 26
32: 19(ptr) AccessChain 31 18 28: 10(fvec4) FAdd 19 27
33: 7(fvec4) Load 32 32: 25(ptr) AccessChain 31 24
34: 7(fvec4) FAdd 28 33 33: 10(fvec4) Load 32
39: 19(ptr) AccessChain 38 18 34: 10(fvec4) FAdd 28 33
40: 7(fvec4) Load 39 38: 25(ptr) AccessChain 37 24
41: 7(fvec4) FAdd 34 40 39: 10(fvec4) Load 38
ReturnValue 41 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 FunctionEnd

View File

@ -2,26 +2,19 @@ hlsl.reflection.vert
Uniform reflection: Uniform reflection:
anonMember3: offset 80, type 8b52, size 1, index 0, binding -1 anonMember3: offset 80, type 8b52, size 1, index 0, binding -1
s.a: offset 0, type 1404, size 1, index 1, 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 m23: offset 16, type 8b67, size 1, index 0, binding -1
scalarAfterm23: offset 48, type 1404, 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_m23: offset 16, type 8b67, size 1, index 2, binding -1
c_scalarAfterm23: offset 48, type 1404, size 1, index 3, 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 scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1
floatArray: offset 112, type 1406, size 5, 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 scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1
ablock.memfloat2: offset 48, type 8b50, size 1, index 2, binding -1 m22: offset 208, type 8b5a, size 9, index 0, 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
dm22: offset 32, type 8b5a, size 4, index 1, binding -1 dm22: offset 32, type 8b5a, size 4, index 1, binding -1
m22: offset 208, type 8b5a, size 3, index 0, binding -1 foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1
nest.foo.n1.a: offset 0, type 1406, size 1, index 4, binding -1 foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1
nest.foo.n2.b: offset 16, type 1406, size 1, index 4, binding -1 foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1
nest.foo.n2.c: offset 20, type 1406, size 1, index 4, binding -1 foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1
nest.foo.n2.d: offset 24, type 1406, size 1, index 4, binding -1
deepA.d2.d1[2].va: offset 376, type 8b50, size 2, index 1, 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.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 deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1
@ -61,19 +54,18 @@ deepD[1].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1
deepD[1].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1 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].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 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 foo1: offset 0, type 1406, size 1, index 4, binding -1
arrBl2.foo: offset 0, type 1406, size 1, index 6, binding -1 foo2: offset 0, type 1406, size 1, index 5, binding -1
anonMember1: offset 0, type 8b51, size 1, index 0, binding -1 anonMember1: offset 0, type 8b51, size 1, index 0, binding -1
uf1: offset 16, type 1406, size 1, index 1, binding -1 uf1: offset 16, type 1406, size 1, index 1, binding -1
Uniform block reflection: Uniform block reflection:
nameless: offset -1, type ffffffff, size 496, index -1, binding -1 nameless: offset -1, type ffffffff, size 496, index -1, binding -1
$Global: offset -1, type ffffffff, size 3088, 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 c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1
nest: offset -1, type ffffffff, size 32, index -1, binding -1 nested: offset -1, type ffffffff, size 32, index -1, binding -1
arrBl: offset -1, type ffffffff, size 4, index -1, binding -1 abl: offset -1, type ffffffff, size 4, index -1, binding -1
arrBl2: offset -1, type ffffffff, size 4, index -1, binding -1 abl2: offset -1, type ffffffff, size 4, index -1, binding -1
Vertex attribute reflection: Vertex attribute reflection:
attributeFloat: offset 0, type 1406, size 0, index 0, binding -1 attributeFloat: offset 0, type 1406, size 0, index 0, binding -1

View File

@ -1,15 +1,15 @@
cbuffer buf1 { cbuffer buf1 {
float4 v1; float4 v1;
}; }; // extraneous ;
tbuffer buf2 { tbuffer buf2 {
float4 v2; float4 v2;
}; }; // extraneous ;
cbuffer cbufName { cbuffer cbufName {
float4 v3 : packoffset(c0); float4 v3 : packoffset(c0);
int i3 : packoffset(c1.y); int i3 : packoffset(c1.y);
} // no semicolon is okay }
tbuffer tbufName : register(t8) { tbuffer tbufName : register(t8) {
float4 v4 : packoffset(c1); float4 v4 : packoffset(c1);
@ -24,9 +24,14 @@ tbuffer tbufName : register(t8) {
row_major float3x4 m2 : packoffset(c11); row_major float3x4 m2 : packoffset(c11);
column_major float3x4 m3 : packoffset(c15); column_major float3x4 m3 : packoffset(c15);
float3x4 m4 : packoffset(c19); 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 float4 PixelShaderFunction(float4 input : SV_POSITION) : SV_TARGET0
{ {
return input + v1 + v2 + v3 + v4; return (input + v1 + v2 + v3 + v4) * foo();
} }

View File

@ -19,27 +19,10 @@ cbuffer c_nameless {
float4 c_anonMember3; 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 { cbuffer namelessdead {
int a; int a;
}; };
cbuffer namedDead {
int b;
} bblock;
struct N1 { struct N1 {
float a; float a;
}; };
@ -57,7 +40,7 @@ struct N3 {
cbuffer nested { cbuffer nested {
N3 foo; N3 foo;
} nest; }
struct TS { struct TS {
int a; int a;
@ -89,16 +72,12 @@ struct deep3 {
int3 v3; int3 v3;
}; };
uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2]; uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2];
const bool control = true; const bool control = true;
void deadFunction() void deadFunction()
{ {
float3 v3 = ablock.deadMember1;
float4 v = anonDeadMember2; float4 v = anonDeadMember2;
float f = ufDead4; float f = ufDead4;
} }
@ -110,12 +89,12 @@ void liveFunction2()
} }
tbuffer abl { tbuffer abl {
float foo; float foo1;
} arrBl; }
tbuffer abl2 { tbuffer abl2 {
float foo; float foo2;
} arrBl2; }
void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attributeFloat3, in float4 attributeFloat4, in float4x4 attributeMat4) void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attributeFloat3, in float4 attributeFloat4, in float4x4 attributeMat4)
{ {
@ -130,22 +109,16 @@ void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attribu
liveFunction2(); liveFunction2();
f = anonMember3.z; f = anonMember3.z;
f = s.a; f = s.a;
f = ablock.scalar;
f = m23[1].y + scalarAfterm23; f = m23[1].y + scalarAfterm23;
f = c_m23[1].y + c_scalarAfterm23; f = c_m23[1].y + c_scalarAfterm23;
f += scalarBeforeArray; f += scalarBeforeArray;
f += floatArray[2]; f += floatArray[2];
f += floatArray[4]; f += floatArray[4];
f += scalarAfterArray; f += scalarAfterArray;
f += ablock.memfloat2.x; f += m22[i][1][0];
f += ablock.memf1;
f += float(ablock.memf2);
f += ablock.memf3;
f += ablock.memfloat2a.y;
f += ablock.m22[i][1][0];
f += dm22[3][0][1]; f += dm22[3][0][1];
f += m22[2][1].y; 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 += deepA[i].d2.d1[2].va[1].x;
f += deepB[1].d2.d1[i].va[1].x; f += deepB[1].d2.d1[i].va[1].x;
f += deepB[i].d2.d1[i].va[1].x; f += deepB[i].d2.d1[i].va[1].x;
@ -154,8 +127,8 @@ void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attribu
} else } else
f = ufDead3; f = ufDead3;
f += arrBl.foo + arrBl.foo; f += foo1 + foo2;
f += arrBl2.foo; f += foo2;
f += attributeFloat; f += attributeFloat;
f += attributeFloat2.x; f += attributeFloat2.x;

View File

@ -371,10 +371,16 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
// if (acceptSamplerDeclarationDX9(declaredType)) // if (acceptSamplerDeclarationDX9(declaredType))
// return true; // return true;
bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer));
// fully_specified_type // fully_specified_type
if (! acceptFullySpecifiedType(declaredType, nodeList)) if (! acceptFullySpecifiedType(declaredType, nodeList))
return false; return false;
// cbuffer and tbuffer end with the closing '}'.
// No semicolon is included.
if (forbidDeclarators)
return true;
// declarator_list // declarator_list
// : declarator // : declarator
// : identifier // : identifier
@ -489,7 +495,7 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
// COMMA // COMMA
if (acceptTokenClass(EHTokComma)) if (acceptTokenClass(EHTokComma))
declarator_list = true; declarator_list = true;
} }
// The top-level initializer node is a sequence. // The top-level initializer node is a sequence.
if (initializers != nullptr) if (initializers != nullptr)
@ -501,18 +507,15 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
else else
nodeList = initializers; nodeList = initializers;
// SEMICOLON(optional for cbuffer/tbuffer) // SEMICOLON
if (! acceptTokenClass(EHTokSemicolon)) { 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) { 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(); recedeToken();
return false; return false;
} else if (declaredType.getBasicType() == EbtBlock) {
// cbuffer, et. al. (but not struct) don't have an ending semicolon
return true;
} else { } else {
expected(";"); expected(";");
return false; return false;
@ -1904,10 +1907,10 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
bool readonly = false; bool readonly = false;
if (acceptTokenClass(EHTokCBuffer)) { if (acceptTokenClass(EHTokCBuffer)) {
// CBUFFER // CBUFFER
storageQualifier = EvqUniform; storageQualifier = EvqUniform;
} else if (acceptTokenClass(EHTokTBuffer)) { } else if (acceptTokenClass(EHTokTBuffer)) {
// TBUFFER // TBUFFER
storageQualifier = EvqBuffer; storageQualifier = EvqBuffer;
readonly = true; readonly = true;
} else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct)) { } else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct)) {