HLSL: fix preprocessor concatenation behaviour.

Fix #772.
This commit is contained in:
xavier 2017-08-24 08:28:57 +02:00
parent 82e95a3aa5
commit eb71cdd5bb
6 changed files with 580 additions and 0 deletions

View File

@ -0,0 +1,163 @@
hlsl.preprocessor.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: @main(vf4; ( temp 4-component vector of float)
0:9 Function Parameters:
0:9 'input' ( in 4-component vector of float)
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 4-component vector of float)
0:10 'tex' ( temp 4-component vector of float)
0:10 texture ( temp 4-component vector of float)
0:10 Construct combined texture-sampler ( temp sampler2D)
0:10 'test_texture' ( uniform texture2D)
0:10 'test_texture_ss' ( uniform sampler)
0:10 vector swizzle ( temp 2-component vector of float)
0:10 vector swizzle ( temp 2-component vector of float)
0:10 'input' ( in 4-component vector of float)
0:10 Sequence
0:10 Constant:
0:10 0 (const int)
0:10 Constant:
0:10 1 (const int)
0:10 Sequence
0:10 Constant:
0:10 0 (const int)
0:10 Constant:
0:10 1 (const int)
0:11 Branch: Return with expression
0:11 'tex' ( temp 4-component vector of float)
0:9 Function Definition: main( ( temp void)
0:9 Function Parameters:
0:? Sequence
0:9 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
0:9 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:9 Function Call: @main(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'test_texture' ( uniform texture2D)
0:? 'test_texture_ss' ( uniform sampler)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: @main(vf4; ( temp 4-component vector of float)
0:9 Function Parameters:
0:9 'input' ( in 4-component vector of float)
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 4-component vector of float)
0:10 'tex' ( temp 4-component vector of float)
0:10 texture ( temp 4-component vector of float)
0:10 Construct combined texture-sampler ( temp sampler2D)
0:10 'test_texture' ( uniform texture2D)
0:10 'test_texture_ss' ( uniform sampler)
0:10 vector swizzle ( temp 2-component vector of float)
0:10 vector swizzle ( temp 2-component vector of float)
0:10 'input' ( in 4-component vector of float)
0:10 Sequence
0:10 Constant:
0:10 0 (const int)
0:10 Constant:
0:10 1 (const int)
0:10 Sequence
0:10 Constant:
0:10 0 (const int)
0:10 Constant:
0:10 1 (const int)
0:11 Branch: Return with expression
0:11 'tex' ( temp 4-component vector of float)
0:9 Function Definition: main( ( temp void)
0:9 Function Parameters:
0:? Sequence
0:9 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
0:9 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:9 Function Call: @main(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'test_texture' ( uniform texture2D)
0:? 'test_texture_ss' ( uniform sampler)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 40
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 33 36
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 11 "@main(vf4;"
Name 10 "input"
Name 13 "tex"
Name 16 "test_texture"
Name 20 "test_texture_ss"
Name 31 "input"
Name 33 "input"
Name 36 "@entryPointOutput"
Name 37 "param"
Decorate 16(test_texture) DescriptorSet 0
Decorate 20(test_texture_ss) DescriptorSet 0
Decorate 33(input) Location 0
Decorate 36(@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: TypeImage 6(float) 2D sampled format:Unknown
15: TypePointer UniformConstant 14
16(test_texture): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(test_texture_ss): 19(ptr) Variable UniformConstant
22: TypeSampledImage 14
24: TypeVector 6(float) 2
32: TypePointer Input 7(fvec4)
33(input): 32(ptr) Variable Input
35: TypePointer Output 7(fvec4)
36(@entryPointOutput): 35(ptr) Variable Output
4(main): 2 Function None 3
5: Label
31(input): 8(ptr) Variable Function
37(param): 8(ptr) Variable Function
34: 7(fvec4) Load 33(input)
Store 31(input) 34
38: 7(fvec4) Load 31(input)
Store 37(param) 38
39: 7(fvec4) FunctionCall 11(@main(vf4;) 37(param)
Store 36(@entryPointOutput) 39
Return
FunctionEnd
11(@main(vf4;): 7(fvec4) Function None 9
10(input): 8(ptr) FunctionParameter
12: Label
13(tex): 8(ptr) Variable Function
17: 14 Load 16(test_texture)
21: 18 Load 20(test_texture_ss)
23: 22 SampledImage 17 21
25: 7(fvec4) Load 10(input)
26: 24(fvec2) VectorShuffle 25 25 0 1
27: 7(fvec4) ImageSampleImplicitLod 23 26
Store 13(tex) 27
28: 7(fvec4) Load 13(tex)
ReturnValue 28
FunctionEnd

View File

@ -0,0 +1,374 @@
hlsl.semantic-1.vert
Shader version: 500
0:? Sequence
0:16 Function Definition: @main(vf4; ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Function Parameters:
0:16 'v' ( in 4-component vector of float)
0:? Sequence
0:18 move second child to first child ( temp 4-component vector of float)
0:18 pos: direct index for structure ( temp 4-component vector of float)
0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:18 Constant:
0:18 0 (const int)
0:18 'v' ( in 4-component vector of float)
0:19 move second child to first child ( temp 2-component vector of float)
0:19 UV0: direct index for structure ( temp 2-component vector of float)
0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:19 Constant:
0:19 1 (const int)
0:? Construct vec2 ( temp 2-component vector of float)
0:19 direct index ( temp float)
0:19 'v' ( in 4-component vector of float)
0:19 Constant:
0:19 0 (const int)
0:19 direct index ( temp float)
0:19 'v' ( in 4-component vector of float)
0:19 Constant:
0:19 0 (const int)
0:20 move second child to first child ( temp 2-component vector of float)
0:20 UV1: direct index for structure ( temp 2-component vector of float)
0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:20 Constant:
0:20 2 (const int)
0:? Construct vec2 ( temp 2-component vector of float)
0:20 direct index ( temp float)
0:20 'v' ( in 4-component vector of float)
0:20 Constant:
0:20 1 (const int)
0:20 direct index ( temp float)
0:20 'v' ( in 4-component vector of float)
0:20 Constant:
0:20 1 (const int)
0:21 move second child to first child ( temp 2-component vector of float)
0:21 UV2: direct index for structure ( temp 2-component vector of float)
0:21 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:21 Constant:
0:21 3 (const int)
0:? Construct vec2 ( temp 2-component vector of float)
0:21 direct index ( temp float)
0:21 'v' ( in 4-component vector of float)
0:21 Constant:
0:21 2 (const int)
0:21 direct index ( temp float)
0:21 'v' ( in 4-component vector of float)
0:21 Constant:
0:21 2 (const int)
0:22 move second child to first child ( temp 2-component vector of float)
0:22 UV3: direct index for structure ( temp 2-component vector of float)
0:22 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:22 Constant:
0:22 4 (const int)
0:? Construct vec2 ( temp 2-component vector of float)
0:22 direct index ( temp float)
0:22 'v' ( in 4-component vector of float)
0:22 Constant:
0:22 3 (const int)
0:22 direct index ( temp float)
0:22 'v' ( in 4-component vector of float)
0:22 Constant:
0:22 3 (const int)
0:23 Branch: Return with expression
0:23 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Function Definition: main( ( temp void)
0:16 Function Parameters:
0:? Sequence
0:16 move second child to first child ( temp 4-component vector of float)
0:? 'v' ( temp 4-component vector of float)
0:? 'v' (layout( location=0) in 4-component vector of float)
0:16 Sequence
0:16 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Function Call: @main(vf4; ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:? 'v' ( temp 4-component vector of float)
0:16 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
0:16 pos: direct index for structure ( temp 4-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 0 (const int)
0:16 move second child to first child ( temp 2-component vector of float)
0:? '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
0:16 UV0: direct index for structure ( temp 2-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 1 (const int)
0:16 move second child to first child ( temp 2-component vector of float)
0:? '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
0:16 UV1: direct index for structure ( temp 2-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 2 (const int)
0:16 move second child to first child ( temp 2-component vector of float)
0:? '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
0:16 UV2: direct index for structure ( temp 2-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 3 (const int)
0:16 move second child to first child ( temp 2-component vector of float)
0:? '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
0:16 UV3: direct index for structure ( temp 2-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 4 (const int)
0:? Linker Objects
0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
0:? '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
0:? '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
0:? '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
0:? '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
0:? 'v' (layout( location=0) in 4-component vector of float)
Linked vertex stage:
Shader version: 500
0:? Sequence
0:16 Function Definition: @main(vf4; ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Function Parameters:
0:16 'v' ( in 4-component vector of float)
0:? Sequence
0:18 move second child to first child ( temp 4-component vector of float)
0:18 pos: direct index for structure ( temp 4-component vector of float)
0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:18 Constant:
0:18 0 (const int)
0:18 'v' ( in 4-component vector of float)
0:19 move second child to first child ( temp 2-component vector of float)
0:19 UV0: direct index for structure ( temp 2-component vector of float)
0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:19 Constant:
0:19 1 (const int)
0:? Construct vec2 ( temp 2-component vector of float)
0:19 direct index ( temp float)
0:19 'v' ( in 4-component vector of float)
0:19 Constant:
0:19 0 (const int)
0:19 direct index ( temp float)
0:19 'v' ( in 4-component vector of float)
0:19 Constant:
0:19 0 (const int)
0:20 move second child to first child ( temp 2-component vector of float)
0:20 UV1: direct index for structure ( temp 2-component vector of float)
0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:20 Constant:
0:20 2 (const int)
0:? Construct vec2 ( temp 2-component vector of float)
0:20 direct index ( temp float)
0:20 'v' ( in 4-component vector of float)
0:20 Constant:
0:20 1 (const int)
0:20 direct index ( temp float)
0:20 'v' ( in 4-component vector of float)
0:20 Constant:
0:20 1 (const int)
0:21 move second child to first child ( temp 2-component vector of float)
0:21 UV2: direct index for structure ( temp 2-component vector of float)
0:21 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:21 Constant:
0:21 3 (const int)
0:? Construct vec2 ( temp 2-component vector of float)
0:21 direct index ( temp float)
0:21 'v' ( in 4-component vector of float)
0:21 Constant:
0:21 2 (const int)
0:21 direct index ( temp float)
0:21 'v' ( in 4-component vector of float)
0:21 Constant:
0:21 2 (const int)
0:22 move second child to first child ( temp 2-component vector of float)
0:22 UV3: direct index for structure ( temp 2-component vector of float)
0:22 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:22 Constant:
0:22 4 (const int)
0:? Construct vec2 ( temp 2-component vector of float)
0:22 direct index ( temp float)
0:22 'v' ( in 4-component vector of float)
0:22 Constant:
0:22 3 (const int)
0:22 direct index ( temp float)
0:22 'v' ( in 4-component vector of float)
0:22 Constant:
0:22 3 (const int)
0:23 Branch: Return with expression
0:23 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Function Definition: main( ( temp void)
0:16 Function Parameters:
0:? Sequence
0:16 move second child to first child ( temp 4-component vector of float)
0:? 'v' ( temp 4-component vector of float)
0:? 'v' (layout( location=0) in 4-component vector of float)
0:16 Sequence
0:16 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Function Call: @main(vf4; ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:? 'v' ( temp 4-component vector of float)
0:16 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
0:16 pos: direct index for structure ( temp 4-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 0 (const int)
0:16 move second child to first child ( temp 2-component vector of float)
0:? '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
0:16 UV0: direct index for structure ( temp 2-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 1 (const int)
0:16 move second child to first child ( temp 2-component vector of float)
0:? '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
0:16 UV1: direct index for structure ( temp 2-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 2 (const int)
0:16 move second child to first child ( temp 2-component vector of float)
0:? '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
0:16 UV2: direct index for structure ( temp 2-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 3 (const int)
0:16 move second child to first child ( temp 2-component vector of float)
0:? '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
0:16 UV3: direct index for structure ( temp 2-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
0:16 Constant:
0:16 4 (const int)
0:? Linker Objects
0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
0:? '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
0:? '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
0:? '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
0:? '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
0:? 'v' (layout( location=0) in 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 84
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 61 68 72 75 78 81
Source HLSL 500
Name 4 "main"
Name 10 "S"
MemberName 10(S) 0 "pos"
MemberName 10(S) 1 "UV0"
MemberName 10(S) 2 "UV1"
MemberName 10(S) 3 "UV2"
MemberName 10(S) 4 "UV3"
Name 13 "@main(vf4;"
Name 12 "v"
Name 16 "s"
Name 59 "v"
Name 61 "v"
Name 63 "flattenTemp"
Name 64 "param"
Name 68 "@entryPointOutput.pos"
Name 72 "@entryPointOutput.UV0"
Name 75 "@entryPointOutput.UV1"
Name 78 "@entryPointOutput.UV2"
Name 81 "@entryPointOutput.UV3"
Decorate 61(v) Location 0
Decorate 68(@entryPointOutput.pos) Location 0
Decorate 72(@entryPointOutput.UV0) Location 1
Decorate 75(@entryPointOutput.UV1) Location 2
Decorate 78(@entryPointOutput.UV2) Location 3
Decorate 81(@entryPointOutput.UV3) Location 4
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
9: TypeVector 6(float) 2
10(S): TypeStruct 7(fvec4) 9(fvec2) 9(fvec2) 9(fvec2) 9(fvec2)
11: TypeFunction 10(S) 8(ptr)
15: TypePointer Function 10(S)
17: TypeInt 32 1
18: 17(int) Constant 0
21: 17(int) Constant 1
22: TypeInt 32 0
23: 22(int) Constant 0
24: TypePointer Function 6(float)
30: TypePointer Function 9(fvec2)
32: 17(int) Constant 2
33: 22(int) Constant 1
40: 17(int) Constant 3
41: 22(int) Constant 2
48: 17(int) Constant 4
49: 22(int) Constant 3
60: TypePointer Input 7(fvec4)
61(v): 60(ptr) Variable Input
67: TypePointer Output 7(fvec4)
68(@entryPointOutput.pos): 67(ptr) Variable Output
71: TypePointer Output 9(fvec2)
72(@entryPointOutput.UV0): 71(ptr) Variable Output
75(@entryPointOutput.UV1): 71(ptr) Variable Output
78(@entryPointOutput.UV2): 71(ptr) Variable Output
81(@entryPointOutput.UV3): 71(ptr) Variable Output
4(main): 2 Function None 3
5: Label
59(v): 8(ptr) Variable Function
63(flattenTemp): 15(ptr) Variable Function
64(param): 8(ptr) Variable Function
62: 7(fvec4) Load 61(v)
Store 59(v) 62
65: 7(fvec4) Load 59(v)
Store 64(param) 65
66: 10(S) FunctionCall 13(@main(vf4;) 64(param)
Store 63(flattenTemp) 66
69: 8(ptr) AccessChain 63(flattenTemp) 18
70: 7(fvec4) Load 69
Store 68(@entryPointOutput.pos) 70
73: 30(ptr) AccessChain 63(flattenTemp) 21
74: 9(fvec2) Load 73
Store 72(@entryPointOutput.UV0) 74
76: 30(ptr) AccessChain 63(flattenTemp) 32
77: 9(fvec2) Load 76
Store 75(@entryPointOutput.UV1) 77
79: 30(ptr) AccessChain 63(flattenTemp) 40
80: 9(fvec2) Load 79
Store 78(@entryPointOutput.UV2) 80
82: 30(ptr) AccessChain 63(flattenTemp) 48
83: 9(fvec2) Load 82
Store 81(@entryPointOutput.UV3) 83
Return
FunctionEnd
13(@main(vf4;): 10(S) Function None 11
12(v): 8(ptr) FunctionParameter
14: Label
16(s): 15(ptr) Variable Function
19: 7(fvec4) Load 12(v)
20: 8(ptr) AccessChain 16(s) 18
Store 20 19
25: 24(ptr) AccessChain 12(v) 23
26: 6(float) Load 25
27: 24(ptr) AccessChain 12(v) 23
28: 6(float) Load 27
29: 9(fvec2) CompositeConstruct 26 28
31: 30(ptr) AccessChain 16(s) 21
Store 31 29
34: 24(ptr) AccessChain 12(v) 33
35: 6(float) Load 34
36: 24(ptr) AccessChain 12(v) 33
37: 6(float) Load 36
38: 9(fvec2) CompositeConstruct 35 37
39: 30(ptr) AccessChain 16(s) 32
Store 39 38
42: 24(ptr) AccessChain 12(v) 41
43: 6(float) Load 42
44: 24(ptr) AccessChain 12(v) 41
45: 6(float) Load 44
46: 9(fvec2) CompositeConstruct 43 45
47: 30(ptr) AccessChain 16(s) 40
Store 47 46
50: 24(ptr) AccessChain 12(v) 49
51: 6(float) Load 50
52: 24(ptr) AccessChain 12(v) 49
53: 6(float) Load 52
54: 9(fvec2) CompositeConstruct 51 53
55: 30(ptr) AccessChain 16(s) 48
Store 55 54
56: 10(S) Load 16(s)
ReturnValue 56
FunctionEnd

View File

@ -0,0 +1,13 @@
#define DEFINE_TEXTURE(name) Texture2D name; SamplerState name##_ss;
#define SAMPLE_TEXTURE(name, uv) name.Sample(name##_ss, (uv).xy)
#define test_texture2 test_texture
DEFINE_TEXTURE(test_texture)
float4 main(float4 input : TEXCOORD0) : SV_TARGET
{
float4 tex = SAMPLE_TEXTURE(test_texture2, input.xy);
return tex;
}

24
Test/hlsl.semantic-1.vert Normal file
View File

@ -0,0 +1,24 @@
#define DLAYER 3
#define DMACRO1 TEXCOORD1
#define DMACRO(num) TEXCOORD##num
struct S {
float4 pos : POSITION;
float2 UV0 : TEXCOORD0;
float2 UV1 : DMACRO1;
float2 UV2 : DMACRO(2);
float2 UV3 : DMACRO(DLAYER);
};
S main(float4 v : POSITION)
{
S s;
s.pos = v;
s.UV0 = float2(v.x,v.x);
s.UV1 = float2(v.y,v.y);
s.UV2 = float2(v.z,v.z);
s.UV3 = float2(v.w,v.w);
return s;
}

View File

@ -1068,6 +1068,10 @@ int TPpContext::tMacroInput::scan(TPpToken* ppToken)
pasting = true;
}
// HLSL does expand macros before concatenation
if (pasting && pp->parseContext.isReadingHLSL())
pasting = false;
// TODO: preprocessor: properly handle whitespace (or lack of it) between tokens when expanding
if (token == PpAtomIdentifier) {
int i;

View File

@ -311,11 +311,13 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.matType.bool.frag", "main"},
{"hlsl.matType.int.frag", "main"},
{"hlsl.max.frag", "PixelShaderFunction"},
{"hlsl.preprocessor.frag", "main"},
{"hlsl.precedence.frag", "PixelShaderFunction"},
{"hlsl.precedence2.frag", "PixelShaderFunction"},
{"hlsl.scalar2matrix.frag", "main"},
{"hlsl.semantic.geom", "main"},
{"hlsl.semantic.vert", "main"},
{"hlsl.semantic-1.vert", "main"},
{"hlsl.scope.frag", "PixelShaderFunction"},
{"hlsl.sin.frag", "PixelShaderFunction"},
{"hlsl.struct.frag", "PixelShaderFunction"},