glslang/Test/baseResults/hlsl.struct.split.nested.geom.out
steve-lunarg ec712ebea1 HLSL: fix copies between arrays of structs of builtins, and arrayed builtins.
Structs are split to remove builtin members to create valid SPIR-V.  In this
process, an outer structure array dimension may be propegated onto the
now-removed builtin variables.  For example, a mystruct[3].position ->
position[3].  The copy between the split and unsplit forms would handle
this in some cases, but not if the array dimension was at different levels
of aggregate.

It now does this, but may not handle arbitrary composite types.  Unclear if
that has any semantic meaning for builtins though.
2017-02-06 23:00:51 -07:00

407 lines
24 KiB
Plaintext

hlsl.struct.split.nested.geom
Shader version: 450
invocations = -1
max_vertices = 3
input primitive = triangles
output primitive = triangle_strip
0:? Sequence
0:24 Function Definition: @main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111; (temp void)
0:24 Function Parameters:
0:24 'tin' (in 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 'ts' (out structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:? Sequence
0:27 move second child to first child (temp 4-component vector of float)
0:27 pos: direct index for structure (temp 4-component vector of float)
0:27 psIn: direct index for structure (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:27 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:27 Constant:
0:27 0 (const int)
0:27 Constant:
0:27 0 (const int)
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:28 move second child to first child (temp 2-component vector of float)
0:28 tc: direct index for structure (temp 2-component vector of float)
0:28 psIn: direct index for structure (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:28 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:28 Constant:
0:28 0 (const int)
0:28 Constant:
0:28 1 (const int)
0:? Constant:
0:? 5.000000
0:? 6.000000
0:30 Sequence
0:30 move second child to first child (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:30 'ts' (out structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:30 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:30 EmitVertex (temp void)
0:24 Function Definition: main( (temp void)
0:24 Function Parameters:
0:? Sequence
0:24 Sequence
0:24 move second child to first child (temp 4-component vector of float)
0:24 pos: direct index for structure (temp 4-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 0 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 direct index (in 4-component vector of float Position)
0:? 'tin_pos' (in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child (temp 2-component vector of float)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 0 (const int)
0:24 Constant:
0:24 1 (const int)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (layout(location=0 ) in structure{temp 2-component vector of float tc})
0:24 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:24 Constant:
0:24 0 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child (temp 4-component vector of float)
0:24 pos: direct index for structure (temp 4-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 1 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 direct index (in 4-component vector of float Position)
0:? 'tin_pos' (in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 1 (const int)
0:24 move second child to first child (temp 2-component vector of float)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 1 (const int)
0:24 Constant:
0:24 1 (const int)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (layout(location=0 ) in structure{temp 2-component vector of float tc})
0:24 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:24 Constant:
0:24 1 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child (temp 4-component vector of float)
0:24 pos: direct index for structure (temp 4-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 2 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 direct index (in 4-component vector of float Position)
0:? 'tin_pos' (in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 2 (const int)
0:24 move second child to first child (temp 2-component vector of float)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 2 (const int)
0:24 Constant:
0:24 1 (const int)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (layout(location=0 ) in structure{temp 2-component vector of float tc})
0:24 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:24 Constant:
0:24 2 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 Function Call: @main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111; (temp void)
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'ts' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:? Linker Objects
0:? 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:? 'PerVertex_in' (in 3-element array of block{in 4-component vector of float Position tin_pos})
Linked geometry stage:
Shader version: 450
invocations = 1
max_vertices = 3
input primitive = triangles
output primitive = triangle_strip
0:? Sequence
0:24 Function Definition: @main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111; (temp void)
0:24 Function Parameters:
0:24 'tin' (in 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 'ts' (out structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:? Sequence
0:27 move second child to first child (temp 4-component vector of float)
0:27 pos: direct index for structure (temp 4-component vector of float)
0:27 psIn: direct index for structure (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:27 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:27 Constant:
0:27 0 (const int)
0:27 Constant:
0:27 0 (const int)
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:28 move second child to first child (temp 2-component vector of float)
0:28 tc: direct index for structure (temp 2-component vector of float)
0:28 psIn: direct index for structure (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:28 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:28 Constant:
0:28 0 (const int)
0:28 Constant:
0:28 1 (const int)
0:? Constant:
0:? 5.000000
0:? 6.000000
0:30 Sequence
0:30 move second child to first child (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:30 'ts' (out structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:30 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:30 EmitVertex (temp void)
0:24 Function Definition: main( (temp void)
0:24 Function Parameters:
0:? Sequence
0:24 Sequence
0:24 move second child to first child (temp 4-component vector of float)
0:24 pos: direct index for structure (temp 4-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 0 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 direct index (in 4-component vector of float Position)
0:? 'tin_pos' (in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child (temp 2-component vector of float)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 0 (const int)
0:24 Constant:
0:24 1 (const int)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (layout(location=0 ) in structure{temp 2-component vector of float tc})
0:24 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:24 Constant:
0:24 0 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child (temp 4-component vector of float)
0:24 pos: direct index for structure (temp 4-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 1 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 direct index (in 4-component vector of float Position)
0:? 'tin_pos' (in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 1 (const int)
0:24 move second child to first child (temp 2-component vector of float)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 1 (const int)
0:24 Constant:
0:24 1 (const int)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (layout(location=0 ) in structure{temp 2-component vector of float tc})
0:24 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:24 Constant:
0:24 1 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child (temp 4-component vector of float)
0:24 pos: direct index for structure (temp 4-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 2 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 direct index (in 4-component vector of float Position)
0:? 'tin_pos' (in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 2 (const int)
0:24 move second child to first child (temp 2-component vector of float)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:24 Constant:
0:24 2 (const int)
0:24 Constant:
0:24 1 (const int)
0:24 tc: direct index for structure (temp 2-component vector of float)
0:24 direct index (layout(location=0 ) in structure{temp 2-component vector of float tc})
0:24 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:24 Constant:
0:24 2 (const int)
0:24 Constant:
0:24 0 (const int)
0:24 Function Call: @main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111; (temp void)
0:? 'tin' (temp 3-element array of structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'ts' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:? Linker Objects
0:? 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:? 'PerVertex_in' (in 3-element array of block{in 4-component vector of float Position tin_pos})
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 80
Capability Geometry
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 45 53 79
ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip
ExecutionMode 4 OutputVertices 3
Name 4 "main"
Name 9 "PS_IN"
MemberName 9(PS_IN) 0 "pos"
MemberName 9(PS_IN) 1 "tc"
Name 14 "PS_IN"
MemberName 14(PS_IN) 0 "pos"
MemberName 14(PS_IN) 1 "tc"
Name 18 "STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO"
MemberName 18(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO) 0 "m0_array"
MemberName 18(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO) 1 "m1"
Name 19 "GS_OUT"
MemberName 19(GS_OUT) 0 "psIn"
MemberName 19(GS_OUT) 1 "contains_no_builtin_io"
Name 24 "@main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111;"
Name 22 "tin"
Name 23 "ts"
Name 26 "o"
Name 42 "tin"
Name 45 "tin_pos"
Name 50 "PS_IN"
MemberName 50(PS_IN) 0 "tc"
Name 53 "tin"
Name 71 "ts"
Name 72 "param"
Name 74 "param"
Name 76 "PerVertex_in"
MemberName 76(PerVertex_in) 0 "tin_pos"
Name 79 "PerVertex_in"
Decorate 45(tin_pos) BuiltIn Position
Decorate 53(tin) Location 0
MemberDecorate 76(PerVertex_in) 0 BuiltIn Position
Decorate 76(PerVertex_in) Block
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeVector 6(float) 2
9(PS_IN): TypeStruct 7(fvec4) 8(fvec2)
10: TypeInt 32 0
11: 10(int) Constant 3
12: TypeArray 9(PS_IN) 11
13: TypePointer Function 12
14(PS_IN): TypeStruct 7(fvec4) 8(fvec2)
15: 10(int) Constant 2
16: TypeArray 6(float) 15
17: TypeInt 32 1
18(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO): TypeStruct 16 17(int)
19(GS_OUT): TypeStruct 14(PS_IN) 18(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO)
20: TypePointer Function 19(GS_OUT)
21: TypeFunction 2 13(ptr) 20(ptr)
27: 17(int) Constant 0
28: 6(float) Constant 1065353216
29: 6(float) Constant 1073741824
30: 6(float) Constant 1077936128
31: 6(float) Constant 1082130432
32: 7(fvec4) ConstantComposite 28 29 30 31
33: TypePointer Function 7(fvec4)
35: 17(int) Constant 1
36: 6(float) Constant 1084227584
37: 6(float) Constant 1086324736
38: 8(fvec2) ConstantComposite 36 37
39: TypePointer Function 8(fvec2)
43: TypeArray 7(fvec4) 11
44: TypePointer Input 43
45(tin_pos): 44(ptr) Variable Input
46: TypePointer Input 7(fvec4)
50(PS_IN): TypeStruct 8(fvec2)
51: TypeArray 50(PS_IN) 11
52: TypePointer Input 51
53(tin): 52(ptr) Variable Input
54: TypePointer Input 8(fvec2)
64: 17(int) Constant 2
76(PerVertex_in): TypeStruct 7(fvec4)
77: TypeArray 76(PerVertex_in) 11
78: TypePointer Input 77
79(PerVertex_in): 78(ptr) Variable Input
4(main): 2 Function None 3
5: Label
42(tin): 13(ptr) Variable Function
71(ts): 20(ptr) Variable Function
72(param): 13(ptr) Variable Function
74(param): 20(ptr) Variable Function
47: 46(ptr) AccessChain 45(tin_pos) 27
48: 7(fvec4) Load 47
49: 33(ptr) AccessChain 42(tin) 27 27
Store 49 48
55: 54(ptr) AccessChain 53(tin) 27 27
56: 8(fvec2) Load 55
57: 39(ptr) AccessChain 42(tin) 27 35
Store 57 56
58: 46(ptr) AccessChain 45(tin_pos) 35
59: 7(fvec4) Load 58
60: 33(ptr) AccessChain 42(tin) 35 27
Store 60 59
61: 54(ptr) AccessChain 53(tin) 35 27
62: 8(fvec2) Load 61
63: 39(ptr) AccessChain 42(tin) 35 35
Store 63 62
65: 46(ptr) AccessChain 45(tin_pos) 64
66: 7(fvec4) Load 65
67: 33(ptr) AccessChain 42(tin) 64 27
Store 67 66
68: 54(ptr) AccessChain 53(tin) 64 27
69: 8(fvec2) Load 68
70: 39(ptr) AccessChain 42(tin) 64 35
Store 70 69
73: 12 Load 42(tin)
Store 72(param) 73
75: 2 FunctionCall 24(@main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111;) 72(param) 74(param)
Return
FunctionEnd
24(@main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111;): 2 Function None 21
22(tin): 13(ptr) FunctionParameter
23(ts): 20(ptr) FunctionParameter
25: Label
26(o): 20(ptr) Variable Function
34: 33(ptr) AccessChain 26(o) 27 27
Store 34 32
40: 39(ptr) AccessChain 26(o) 27 35
Store 40 38
41: 19(GS_OUT) Load 26(o)
Store 23(ts) 41
EmitVertex
Return
FunctionEnd