HLSL: Stop flattening non-IO structs containing opaques.

This makes struct returns from functions work, but breaks
structs containing arrays, due to limitations in subsequent
transforms in spirv-opt. This is expected to be fixed soon.
This commit is contained in:
John Kessenich
2017-11-16 16:03:18 -07:00
parent 471bfed062
commit dc005fb083
18 changed files with 1610 additions and 1419 deletions

View File

@@ -7,11 +7,17 @@ Shader version: 500
0:12 'pos' ( in 4-component vector of float)
0:? Sequence
0:14 move second child to first child ( temp texture2D)
0:? 'packed.tex' ( temp texture2D)
0:14 tex: direct index for structure ( temp texture2D)
0:14 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:14 Constant:
0:14 0 (const int)
0:14 'tex' ( uniform texture2D)
0:15 move second child to first child ( temp 3-component vector of float)
0:15 direct index ( temp 3-component vector of float)
0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
0:15 pos: direct index for structure ( temp 3-element array of 3-component vector of float)
0:15 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:15 Constant:
0:15 1 (const int)
0:15 Constant:
0:15 0 (const int)
0:? Constant:
@@ -20,18 +26,27 @@ Shader version: 500
0:? 0.000000
0:16 move second child to first child ( temp 2-component vector of float)
0:16 direct index ( temp 2-component vector of float)
0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
0:16 uv: direct index for structure ( temp 2-element array of 2-component vector of float)
0:16 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:16 Constant:
0:16 2 (const int)
0:16 Constant:
0:16 0 (const int)
0:? Constant:
0:? 0.000000
0:? 1.000000
0:17 move second child to first child ( temp float)
0:? 'packed.x' ( temp float)
0:17 x: direct index for structure ( temp float)
0:17 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:17 Constant:
0:17 3 (const int)
0:17 Constant:
0:17 1.000000
0:18 move second child to first child ( temp int)
0:? 'packed.n' ( temp int)
0:18 n: direct index for structure ( temp int)
0:18 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:18 Constant:
0:18 4 (const int)
0:18 Constant:
0:18 3 (const int)
0:20 Sequence
@@ -50,7 +65,10 @@ Shader version: 500
0:21 add second child into first child ( temp 2-component vector of float)
0:21 vector swizzle ( temp 2-component vector of float)
0:21 indirect index ( temp 3-component vector of float)
0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
0:21 pos: direct index for structure ( temp 3-element array of 3-component vector of float)
0:21 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:21 Constant:
0:21 1 (const int)
0:21 'i' ( temp int)
0:21 Sequence
0:21 Constant:
@@ -58,34 +76,27 @@ Shader version: 500
0:21 Constant:
0:21 1 (const int)
0:21 indirect index ( temp 2-component vector of float)
0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
0:21 uv: direct index for structure ( temp 2-element array of 2-component vector of float)
0:21 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:21 Constant:
0:21 2 (const int)
0:21 'i' ( temp int)
0:20 Loop Terminal Expression
0:20 Pre-Increment ( temp int)
0:20 'i' ( temp int)
0:24 Sequence
0:24 Sequence
0:24 move second child to first child ( temp texture2D)
0:? 'packed2.tex' ( temp texture2D)
0:? 'packed.tex' ( temp texture2D)
0:24 move second child to first child ( temp 3-element array of 3-component vector of float)
0:? 'packed2.pos' ( temp 3-element array of 3-component vector of float)
0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
0:24 move second child to first child ( temp 2-element array of 2-component vector of float)
0:? 'packed2.uv' ( temp 2-element array of 2-component vector of float)
0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
0:24 move second child to first child ( temp float)
0:? 'packed2.x' ( temp float)
0:? 'packed.x' ( temp float)
0:24 move second child to first child ( temp int)
0:? 'packed2.n' ( temp int)
0:? 'packed.n' ( temp int)
0:24 move second child to first child ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:24 'packed2' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:24 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:26 Branch: Return with expression
0:26 add ( temp 4-component vector of float)
0:26 'pos' ( in 4-component vector of float)
0:? Construct vec4 ( temp 4-component vector of float)
0:26 direct index ( temp 3-component vector of float)
0:? 'packed2.pos' ( temp 3-element array of 3-component vector of float)
0:26 pos: direct index for structure ( temp 3-element array of 3-component vector of float)
0:26 'packed2' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:
0:26 0 (const int)
0:26 Constant:
@@ -116,11 +127,17 @@ Shader version: 500
0:12 'pos' ( in 4-component vector of float)
0:? Sequence
0:14 move second child to first child ( temp texture2D)
0:? 'packed.tex' ( temp texture2D)
0:14 tex: direct index for structure ( temp texture2D)
0:14 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:14 Constant:
0:14 0 (const int)
0:14 'tex' ( uniform texture2D)
0:15 move second child to first child ( temp 3-component vector of float)
0:15 direct index ( temp 3-component vector of float)
0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
0:15 pos: direct index for structure ( temp 3-element array of 3-component vector of float)
0:15 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:15 Constant:
0:15 1 (const int)
0:15 Constant:
0:15 0 (const int)
0:? Constant:
@@ -129,18 +146,27 @@ Shader version: 500
0:? 0.000000
0:16 move second child to first child ( temp 2-component vector of float)
0:16 direct index ( temp 2-component vector of float)
0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
0:16 uv: direct index for structure ( temp 2-element array of 2-component vector of float)
0:16 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:16 Constant:
0:16 2 (const int)
0:16 Constant:
0:16 0 (const int)
0:? Constant:
0:? 0.000000
0:? 1.000000
0:17 move second child to first child ( temp float)
0:? 'packed.x' ( temp float)
0:17 x: direct index for structure ( temp float)
0:17 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:17 Constant:
0:17 3 (const int)
0:17 Constant:
0:17 1.000000
0:18 move second child to first child ( temp int)
0:? 'packed.n' ( temp int)
0:18 n: direct index for structure ( temp int)
0:18 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:18 Constant:
0:18 4 (const int)
0:18 Constant:
0:18 3 (const int)
0:20 Sequence
@@ -159,7 +185,10 @@ Shader version: 500
0:21 add second child into first child ( temp 2-component vector of float)
0:21 vector swizzle ( temp 2-component vector of float)
0:21 indirect index ( temp 3-component vector of float)
0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
0:21 pos: direct index for structure ( temp 3-element array of 3-component vector of float)
0:21 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:21 Constant:
0:21 1 (const int)
0:21 'i' ( temp int)
0:21 Sequence
0:21 Constant:
@@ -167,34 +196,27 @@ Shader version: 500
0:21 Constant:
0:21 1 (const int)
0:21 indirect index ( temp 2-component vector of float)
0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
0:21 uv: direct index for structure ( temp 2-element array of 2-component vector of float)
0:21 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:21 Constant:
0:21 2 (const int)
0:21 'i' ( temp int)
0:20 Loop Terminal Expression
0:20 Pre-Increment ( temp int)
0:20 'i' ( temp int)
0:24 Sequence
0:24 Sequence
0:24 move second child to first child ( temp texture2D)
0:? 'packed2.tex' ( temp texture2D)
0:? 'packed.tex' ( temp texture2D)
0:24 move second child to first child ( temp 3-element array of 3-component vector of float)
0:? 'packed2.pos' ( temp 3-element array of 3-component vector of float)
0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
0:24 move second child to first child ( temp 2-element array of 2-component vector of float)
0:? 'packed2.uv' ( temp 2-element array of 2-component vector of float)
0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
0:24 move second child to first child ( temp float)
0:? 'packed2.x' ( temp float)
0:? 'packed.x' ( temp float)
0:24 move second child to first child ( temp int)
0:? 'packed2.n' ( temp int)
0:? 'packed.n' ( temp int)
0:24 move second child to first child ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:24 'packed2' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:24 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:26 Branch: Return with expression
0:26 add ( temp 4-component vector of float)
0:26 'pos' ( in 4-component vector of float)
0:? Construct vec4 ( temp 4-component vector of float)
0:26 direct index ( temp 3-component vector of float)
0:? 'packed2.pos' ( temp 3-element array of 3-component vector of float)
0:26 pos: direct index for structure ( temp 3-element array of 3-component vector of float)
0:26 'packed2' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:
0:26 0 (const int)
0:26 Constant:
@@ -216,35 +238,33 @@ Shader version: 500
// Module Version 10000
// Generated by (magic number): 80002
// Id's are bound by 97
// Id's are bound by 90
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 90 93
EntryPoint Vertex 4 "main" 83 86
Source HLSL 500
Name 4 "main"
Name 11 "@main(vf4;"
Name 10 "pos"
Name 15 "packed.tex"
Name 17 "tex"
Name 24 "packed.pos"
Name 35 "packed.uv"
Name 41 "packed.x"
Name 43 "packed.n"
Name 45 "i"
Name 68 "packed2.tex"
Name 70 "packed2.pos"
Name 72 "packed2.uv"
Name 74 "packed2.x"
Name 76 "packed2.n"
Name 88 "pos"
Name 90 "pos"
Name 93 "@entryPointOutput"
Name 94 "param"
Decorate 17(tex) DescriptorSet 0
Decorate 90(pos) Location 0
Decorate 93(@entryPointOutput) BuiltIn Position
Name 22 "Packed"
MemberName 22(Packed) 0 "tex"
MemberName 22(Packed) 1 "pos"
MemberName 22(Packed) 2 "uv"
MemberName 22(Packed) 3 "x"
MemberName 22(Packed) 4 "n"
Name 24 "packed"
Name 27 "tex"
Name 47 "i"
Name 69 "packed2"
Name 81 "pos"
Name 83 "pos"
Name 86 "@entryPointOutput"
Name 87 "param"
Decorate 27(tex) DescriptorSet 0
Decorate 83(pos) Location 0
Decorate 86(@entryPointOutput) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -252,115 +272,104 @@ Shader version: 500
8: TypePointer Function 7(fvec4)
9: TypeFunction 7(fvec4) 8(ptr)
13: TypeImage 6(float) 2D sampled format:Unknown
14: TypePointer Function 13
16: TypePointer UniformConstant 13
17(tex): 16(ptr) Variable UniformConstant
19: TypeVector 6(float) 3
20: TypeInt 32 0
21: 20(int) Constant 3
22: TypeArray 19(fvec3) 21
23: TypePointer Function 22
25: TypeInt 32 1
26: 25(int) Constant 0
27: 6(float) Constant 0
28: 19(fvec3) ConstantComposite 27 27 27
29: TypePointer Function 19(fvec3)
31: TypeVector 6(float) 2
32: 20(int) Constant 2
33: TypeArray 31(fvec2) 32
34: TypePointer Function 33
36: 6(float) Constant 1065353216
37: 31(fvec2) ConstantComposite 27 36
38: TypePointer Function 31(fvec2)
40: TypePointer Function 6(float)
42: TypePointer Function 25(int)
44: 25(int) Constant 3
52: 25(int) Constant 1
53: TypeBool
89: TypePointer Input 7(fvec4)
90(pos): 89(ptr) Variable Input
92: TypePointer Output 7(fvec4)
93(@entryPointOutput): 92(ptr) Variable Output
14: TypeVector 6(float) 3
15: TypeInt 32 0
16: 15(int) Constant 3
17: TypeArray 14(fvec3) 16
18: TypeVector 6(float) 2
19: 15(int) Constant 2
20: TypeArray 18(fvec2) 19
21: TypeInt 32 1
22(Packed): TypeStruct 13 17 20 6(float) 21(int)
23: TypePointer Function 22(Packed)
25: 21(int) Constant 0
26: TypePointer UniformConstant 13
27(tex): 26(ptr) Variable UniformConstant
29: TypePointer Function 13
31: 21(int) Constant 1
32: 6(float) Constant 0
33: 14(fvec3) ConstantComposite 32 32 32
34: TypePointer Function 14(fvec3)
36: 21(int) Constant 2
37: 6(float) Constant 1065353216
38: 18(fvec2) ConstantComposite 32 37
39: TypePointer Function 18(fvec2)
41: 21(int) Constant 3
42: TypePointer Function 6(float)
44: 21(int) Constant 4
45: TypePointer Function 21(int)
54: TypeBool
82: TypePointer Input 7(fvec4)
83(pos): 82(ptr) Variable Input
85: TypePointer Output 7(fvec4)
86(@entryPointOutput): 85(ptr) Variable Output
4(main): 2 Function None 3
5: Label
88(pos): 8(ptr) Variable Function
94(param): 8(ptr) Variable Function
91: 7(fvec4) Load 90(pos)
Store 88(pos) 91
95: 7(fvec4) Load 88(pos)
Store 94(param) 95
96: 7(fvec4) FunctionCall 11(@main(vf4;) 94(param)
Store 93(@entryPointOutput) 96
81(pos): 8(ptr) Variable Function
87(param): 8(ptr) Variable Function
84: 7(fvec4) Load 83(pos)
Store 81(pos) 84
88: 7(fvec4) Load 81(pos)
Store 87(param) 88
89: 7(fvec4) FunctionCall 11(@main(vf4;) 87(param)
Store 86(@entryPointOutput) 89
Return
FunctionEnd
11(@main(vf4;): 7(fvec4) Function None 9
10(pos): 8(ptr) FunctionParameter
12: Label
15(packed.tex): 14(ptr) Variable Function
24(packed.pos): 23(ptr) Variable Function
35(packed.uv): 34(ptr) Variable Function
41(packed.x): 40(ptr) Variable Function
43(packed.n): 42(ptr) Variable Function
45(i): 42(ptr) Variable Function
68(packed2.tex): 14(ptr) Variable Function
70(packed2.pos): 23(ptr) Variable Function
72(packed2.uv): 34(ptr) Variable Function
74(packed2.x): 40(ptr) Variable Function
76(packed2.n): 42(ptr) Variable Function
18: 13 Load 17(tex)
Store 15(packed.tex) 18
30: 29(ptr) AccessChain 24(packed.pos) 26
24(packed): 23(ptr) Variable Function
47(i): 45(ptr) Variable Function
69(packed2): 23(ptr) Variable Function
28: 13 Load 27(tex)
30: 29(ptr) AccessChain 24(packed) 25
Store 30 28
39: 38(ptr) AccessChain 35(packed.uv) 26
Store 39 37
Store 41(packed.x) 36
Store 43(packed.n) 44
Store 45(i) 26
Branch 46
46: Label
LoopMerge 48 49 None
Branch 50
50: Label
51: 25(int) Load 45(i)
54: 53(bool) SLessThan 51 52
BranchConditional 54 47 48
47: Label
55: 25(int) Load 45(i)
56: 25(int) Load 45(i)
57: 38(ptr) AccessChain 35(packed.uv) 56
58: 31(fvec2) Load 57
59: 29(ptr) AccessChain 24(packed.pos) 55
60: 19(fvec3) Load 59
61: 31(fvec2) VectorShuffle 60 60 0 1
62: 31(fvec2) FAdd 61 58
63: 29(ptr) AccessChain 24(packed.pos) 55
64: 19(fvec3) Load 63
65: 19(fvec3) VectorShuffle 64 62 3 4 2
Store 63 65
Branch 49
49: Label
66: 25(int) Load 45(i)
67: 25(int) IAdd 66 52
Store 45(i) 67
Branch 46
35: 34(ptr) AccessChain 24(packed) 31 25
Store 35 33
40: 39(ptr) AccessChain 24(packed) 36 25
Store 40 38
43: 42(ptr) AccessChain 24(packed) 41
Store 43 37
46: 45(ptr) AccessChain 24(packed) 44
Store 46 41
Store 47(i) 25
Branch 48
48: Label
69: 13 Load 15(packed.tex)
Store 68(packed2.tex) 69
71: 22 Load 24(packed.pos)
Store 70(packed2.pos) 71
73: 33 Load 35(packed.uv)
Store 72(packed2.uv) 73
75: 6(float) Load 41(packed.x)
Store 74(packed2.x) 75
77: 25(int) Load 43(packed.n)
Store 76(packed2.n) 77
78: 7(fvec4) Load 10(pos)
79: 29(ptr) AccessChain 70(packed2.pos) 26
80: 19(fvec3) Load 79
81: 6(float) CompositeExtract 80 0
82: 6(float) CompositeExtract 80 1
83: 6(float) CompositeExtract 80 2
84: 7(fvec4) CompositeConstruct 81 82 83 27
85: 7(fvec4) FAdd 78 84
ReturnValue 85
LoopMerge 50 51 None
Branch 52
52: Label
53: 21(int) Load 47(i)
55: 54(bool) SLessThan 53 31
BranchConditional 55 49 50
49: Label
56: 21(int) Load 47(i)
57: 21(int) Load 47(i)
58: 39(ptr) AccessChain 24(packed) 36 57
59: 18(fvec2) Load 58
60: 34(ptr) AccessChain 24(packed) 31 56
61: 14(fvec3) Load 60
62: 18(fvec2) VectorShuffle 61 61 0 1
63: 18(fvec2) FAdd 62 59
64: 34(ptr) AccessChain 24(packed) 31 56
65: 14(fvec3) Load 64
66: 14(fvec3) VectorShuffle 65 63 3 4 2
Store 64 66
Branch 51
51: Label
67: 21(int) Load 47(i)
68: 21(int) IAdd 67 31
Store 47(i) 68
Branch 48
50: Label
70: 22(Packed) Load 24(packed)
Store 69(packed2) 70
71: 7(fvec4) Load 10(pos)
72: 34(ptr) AccessChain 69(packed2) 31 25
73: 14(fvec3) Load 72
74: 6(float) CompositeExtract 73 0
75: 6(float) CompositeExtract 73 1
76: 6(float) CompositeExtract 73 2
77: 7(fvec4) CompositeConstruct 74 75 76 32
78: 7(fvec4) FAdd 71 77
ReturnValue 78
FunctionEnd