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
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 @@ Linked fragment stage:
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 @@ gl_FragCoord origin is upper left
// 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

View File

@ -2,26 +2,19 @@ hlsl.reflection.vert
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[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].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

View File

@ -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 @@ tbuffer tbufName : register(t8) {
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();
}

View File

@ -19,27 +19,10 @@ cbuffer c_nameless {
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 @@ struct N3 {
cbuffer nested {
N3 foo;
} nest;
}
struct TS {
int a;
@ -89,16 +72,12 @@ struct deep3 {
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 @@ void liveFunction2()
}
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 @@ void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attribu
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 @@ void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attribu
} else
f = ufDead3;
f += arrBl.foo + arrBl.foo;
f += arrBl2.foo;
f += foo1 + foo2;
f += foo2;
f += attributeFloat;
f += attributeFloat2.x;

View File

@ -371,10 +371,16 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
// 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 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
// COMMA
if (acceptTokenClass(EHTokComma))
declarator_list = true;
}
}
// The top-level initializer node is a sequence.
if (initializers != nullptr)
@ -501,18 +507,15 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
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 HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
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)) {