Specifically, add flattening of arrayed io for geometry and tesselation shaders. Previously some interface structs just had builtins split out which caused some interfaces to not be exactly the same as that of flattened adjacent stages, affecting validation and correctness. This obviates builtin splitting. That will be removed in a followup commit. It was left in for this commit to better exhibit the functional changes that were made. Fixes #1660.
275 lines
12 KiB
Plaintext
275 lines
12 KiB
Plaintext
hlsl.tristream-append.geom
|
|
Shader version: 500
|
|
invocations = -1
|
|
max_vertices = 3
|
|
input primitive = triangles
|
|
output primitive = triangle_strip
|
|
0:? Sequence
|
|
0:8 Function Definition: EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1; ( temp void)
|
|
0:8 Function Parameters:
|
|
0:8 'output' ( in structure{})
|
|
0:8 'TriStream' ( out structure{})
|
|
0:? Sequence
|
|
0:9 Sequence
|
|
0:9 Sequence
|
|
0:9 move second child to first child ( temp structure{})
|
|
0:9 'TriStream' ( out structure{})
|
|
0:9 'output' ( in structure{})
|
|
0:9 EmitVertex ( temp void)
|
|
0:14 Function Definition: @main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1; ( temp void)
|
|
0:14 Function Parameters:
|
|
0:14 'input' ( in 3-element array of structure{})
|
|
0:14 'TriStream' ( out structure{})
|
|
0:? Sequence
|
|
0:15 Function Call: EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1; ( temp void)
|
|
0:15 direct index ( temp structure{})
|
|
0:15 'input' ( in 3-element array of structure{})
|
|
0:15 Constant:
|
|
0:15 0 (const int)
|
|
0:15 'TriStream' ( out structure{})
|
|
0:16 Function Call: EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1; ( temp void)
|
|
0:16 direct index ( temp structure{})
|
|
0:16 'input' ( in 3-element array of structure{})
|
|
0:16 Constant:
|
|
0:16 1 (const int)
|
|
0:16 'TriStream' ( out structure{})
|
|
0:17 Function Call: EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1; ( temp void)
|
|
0:17 direct index ( temp structure{})
|
|
0:17 'input' ( in 3-element array of structure{})
|
|
0:17 Constant:
|
|
0:17 2 (const int)
|
|
0:17 'TriStream' ( out structure{})
|
|
0:14 Function Definition: main( ( temp void)
|
|
0:14 Function Parameters:
|
|
0:? Sequence
|
|
0:14 Sequence
|
|
0:14 move second child to first child ( temp structure{})
|
|
0:14 direct index ( temp structure{})
|
|
0:? 'input' ( temp 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 0 (const int)
|
|
0:14 direct index ( in structure{})
|
|
0:? 'input' ( in 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 0 (const int)
|
|
0:14 move second child to first child ( temp structure{})
|
|
0:14 direct index ( temp structure{})
|
|
0:? 'input' ( temp 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 1 (const int)
|
|
0:14 direct index ( in structure{})
|
|
0:? 'input' ( in 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 1 (const int)
|
|
0:14 move second child to first child ( temp structure{})
|
|
0:14 direct index ( temp structure{})
|
|
0:? 'input' ( temp 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 2 (const int)
|
|
0:14 direct index ( in structure{})
|
|
0:? 'input' ( in 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 2 (const int)
|
|
0:14 Function Call: @main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1; ( temp void)
|
|
0:? 'input' ( temp 3-element array of structure{})
|
|
0:? 'TriStream' ( temp structure{})
|
|
0:? Linker Objects
|
|
|
|
|
|
Linked geometry stage:
|
|
|
|
|
|
Shader version: 500
|
|
invocations = 1
|
|
max_vertices = 3
|
|
input primitive = triangles
|
|
output primitive = triangle_strip
|
|
0:? Sequence
|
|
0:8 Function Definition: EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1; ( temp void)
|
|
0:8 Function Parameters:
|
|
0:8 'output' ( in structure{})
|
|
0:8 'TriStream' ( out structure{})
|
|
0:? Sequence
|
|
0:9 Sequence
|
|
0:9 Sequence
|
|
0:9 move second child to first child ( temp structure{})
|
|
0:9 'TriStream' ( out structure{})
|
|
0:9 'output' ( in structure{})
|
|
0:9 EmitVertex ( temp void)
|
|
0:14 Function Definition: @main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1; ( temp void)
|
|
0:14 Function Parameters:
|
|
0:14 'input' ( in 3-element array of structure{})
|
|
0:14 'TriStream' ( out structure{})
|
|
0:? Sequence
|
|
0:15 Function Call: EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1; ( temp void)
|
|
0:15 direct index ( temp structure{})
|
|
0:15 'input' ( in 3-element array of structure{})
|
|
0:15 Constant:
|
|
0:15 0 (const int)
|
|
0:15 'TriStream' ( out structure{})
|
|
0:16 Function Call: EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1; ( temp void)
|
|
0:16 direct index ( temp structure{})
|
|
0:16 'input' ( in 3-element array of structure{})
|
|
0:16 Constant:
|
|
0:16 1 (const int)
|
|
0:16 'TriStream' ( out structure{})
|
|
0:17 Function Call: EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1; ( temp void)
|
|
0:17 direct index ( temp structure{})
|
|
0:17 'input' ( in 3-element array of structure{})
|
|
0:17 Constant:
|
|
0:17 2 (const int)
|
|
0:17 'TriStream' ( out structure{})
|
|
0:14 Function Definition: main( ( temp void)
|
|
0:14 Function Parameters:
|
|
0:? Sequence
|
|
0:14 Sequence
|
|
0:14 move second child to first child ( temp structure{})
|
|
0:14 direct index ( temp structure{})
|
|
0:? 'input' ( temp 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 0 (const int)
|
|
0:14 direct index ( in structure{})
|
|
0:? 'input' ( in 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 0 (const int)
|
|
0:14 move second child to first child ( temp structure{})
|
|
0:14 direct index ( temp structure{})
|
|
0:? 'input' ( temp 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 1 (const int)
|
|
0:14 direct index ( in structure{})
|
|
0:? 'input' ( in 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 1 (const int)
|
|
0:14 move second child to first child ( temp structure{})
|
|
0:14 direct index ( temp structure{})
|
|
0:? 'input' ( temp 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 2 (const int)
|
|
0:14 direct index ( in structure{})
|
|
0:? 'input' ( in 3-element array of structure{})
|
|
0:14 Constant:
|
|
0:14 2 (const int)
|
|
0:14 Function Call: @main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1; ( temp void)
|
|
0:? 'input' ( temp 3-element array of structure{})
|
|
0:? 'TriStream' ( temp structure{})
|
|
0:? Linker Objects
|
|
|
|
Validation failed
|
|
// Module Version 10000
|
|
// Generated by (magic number): 80008
|
|
// Id's are bound by 66
|
|
|
|
Capability Geometry
|
|
1: ExtInstImport "GLSL.std.450"
|
|
MemoryModel Logical GLSL450
|
|
EntryPoint Geometry 4 "main"
|
|
ExecutionMode 4 Triangles
|
|
ExecutionMode 4 Invocations 1
|
|
ExecutionMode 4 OutputTriangleStrip
|
|
ExecutionMode 4 OutputVertices 3
|
|
Source HLSL 500
|
|
Name 4 "main"
|
|
Name 6 "GSPS_INPUT"
|
|
Name 11 "EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1;"
|
|
Name 9 "output"
|
|
Name 10 "TriStream"
|
|
Name 20 "@main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1;"
|
|
Name 18 "input"
|
|
Name 19 "TriStream"
|
|
Name 23 "TriStream"
|
|
Name 27 "param"
|
|
Name 30 "param"
|
|
Name 34 "param"
|
|
Name 37 "param"
|
|
Name 41 "param"
|
|
Name 44 "param"
|
|
Name 47 "input"
|
|
Name 49 "input"
|
|
Name 60 "TriStream"
|
|
Name 61 "param"
|
|
Name 63 "param"
|
|
2: TypeVoid
|
|
3: TypeFunction 2
|
|
6(GSPS_INPUT): TypeStruct
|
|
7: TypePointer Function 6(GSPS_INPUT)
|
|
8: TypeFunction 2 7(ptr) 7(ptr)
|
|
13: TypeInt 32 0
|
|
14: 13(int) Constant 3
|
|
15: TypeArray 6(GSPS_INPUT) 14
|
|
16: TypePointer Function 15
|
|
17: TypeFunction 2 16(ptr) 7(ptr)
|
|
22: TypePointer Output 6(GSPS_INPUT)
|
|
23(TriStream): 22(ptr) Variable Output
|
|
25: TypeInt 32 1
|
|
26: 25(int) Constant 0
|
|
33: 25(int) Constant 1
|
|
40: 25(int) Constant 2
|
|
48: TypePointer Input 15
|
|
49(input): 48(ptr) Variable Input
|
|
50: TypePointer Input 6(GSPS_INPUT)
|
|
4(main): 2 Function None 3
|
|
5: Label
|
|
47(input): 16(ptr) Variable Function
|
|
60(TriStream): 7(ptr) Variable Function
|
|
61(param): 16(ptr) Variable Function
|
|
63(param): 7(ptr) Variable Function
|
|
51: 50(ptr) AccessChain 49(input) 26
|
|
52:6(GSPS_INPUT) Load 51
|
|
53: 7(ptr) AccessChain 47(input) 26
|
|
Store 53 52
|
|
54: 50(ptr) AccessChain 49(input) 33
|
|
55:6(GSPS_INPUT) Load 54
|
|
56: 7(ptr) AccessChain 47(input) 33
|
|
Store 56 55
|
|
57: 50(ptr) AccessChain 49(input) 40
|
|
58:6(GSPS_INPUT) Load 57
|
|
59: 7(ptr) AccessChain 47(input) 40
|
|
Store 59 58
|
|
62: 15 Load 47(input)
|
|
Store 61(param) 62
|
|
64: 2 FunctionCall 20(@main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1;) 61(param) 63(param)
|
|
65:6(GSPS_INPUT) Load 63(param)
|
|
Store 60(TriStream) 65
|
|
Return
|
|
FunctionEnd
|
|
11(EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1;): 2 Function None 8
|
|
9(output): 7(ptr) FunctionParameter
|
|
10(TriStream): 7(ptr) FunctionParameter
|
|
12: Label
|
|
24:6(GSPS_INPUT) Load 9(output)
|
|
Store 23(TriStream) 24
|
|
EmitVertex
|
|
Return
|
|
FunctionEnd
|
|
20(@main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1;): 2 Function None 17
|
|
18(input): 16(ptr) FunctionParameter
|
|
19(TriStream): 7(ptr) FunctionParameter
|
|
21: Label
|
|
27(param): 7(ptr) Variable Function
|
|
30(param): 7(ptr) Variable Function
|
|
34(param): 7(ptr) Variable Function
|
|
37(param): 7(ptr) Variable Function
|
|
41(param): 7(ptr) Variable Function
|
|
44(param): 7(ptr) Variable Function
|
|
28: 7(ptr) AccessChain 18(input) 26
|
|
29:6(GSPS_INPUT) Load 28
|
|
Store 27(param) 29
|
|
31: 2 FunctionCall 11(EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1;) 27(param) 30(param)
|
|
32:6(GSPS_INPUT) Load 30(param)
|
|
Store 19(TriStream) 32
|
|
35: 7(ptr) AccessChain 18(input) 33
|
|
36:6(GSPS_INPUT) Load 35
|
|
Store 34(param) 36
|
|
38: 2 FunctionCall 11(EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1;) 34(param) 37(param)
|
|
39:6(GSPS_INPUT) Load 37(param)
|
|
Store 19(TriStream) 39
|
|
42: 7(ptr) AccessChain 18(input) 40
|
|
43:6(GSPS_INPUT) Load 42
|
|
Store 41(param) 43
|
|
45: 2 FunctionCall 11(EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1;) 41(param) 44(param)
|
|
46:6(GSPS_INPUT) Load 44(param)
|
|
Store 19(TriStream) 46
|
|
Return
|
|
FunctionEnd
|