HLSL: struct splitting: assignments of hierarchical split types

This commit adds support for copying nested hierarchical types of split
types.  E.g, a struct of a struct containing both user and builtin interstage
IO variables.

When copying split types, if any subtree does NOT contain builtin interstage
IO, we can copy the whole subtree with one assignment, which saves a bunch
of AST verbosity for memberwise copies of that subtree.
This commit is contained in:
steve-lunarg
2016-12-19 15:48:01 -07:00
parent a2e7531057
commit 132d331870
19 changed files with 1113 additions and 234 deletions

View File

@@ -49,7 +49,7 @@ output primitive = triangle_strip
0:22 Sequence
0:22 Sequence
0:22 move second child to first child (temp 4-component vector of float)
0:? 'position' (out 4-component vector of float Position)
0:? 'outStream.position' (out 4-component vector of float Position)
0:22 position: direct index for structure (temp 4-component vector of float)
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
@@ -76,7 +76,7 @@ output primitive = triangle_strip
0:? Linker Objects
0:? 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'position' (out 4-component vector of float Position)
0:? 'outStream.position' (out 4-component vector of float Position)
Linked geometry stage:
@@ -132,7 +132,7 @@ output primitive = triangle_strip
0:22 Sequence
0:22 Sequence
0:22 move second child to first child (temp 4-component vector of float)
0:? 'position' (out 4-component vector of float Position)
0:? 'outStream.position' (out 4-component vector of float Position)
0:22 position: direct index for structure (temp 4-component vector of float)
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
@@ -159,7 +159,7 @@ output primitive = triangle_strip
0:? Linker Objects
0:? 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'position' (out 4-component vector of float Position)
0:? 'outStream.position' (out 4-component vector of float Position)
// Module Version 10000
// Generated by (magic number): 80001
@@ -184,13 +184,13 @@ output primitive = triangle_strip
MemberName 14(VertexData) 1 "color"
MemberName 14(VertexData) 2 "uv"
Name 19 "vin"
Name 36 "position"
Name 36 "outStream.position"
Name 39 "PS_IN"
MemberName 39(PS_IN) 0 "color"
MemberName 39(PS_IN) 1 "uv"
Name 41 "outStream"
Decorate 19(vin) Location 0
Decorate 36(position) BuiltIn Position
Decorate 36(outStream.position) BuiltIn Position
Decorate 41(outStream) Location 0
2: TypeVoid
3: TypeFunction 2
@@ -214,7 +214,7 @@ output primitive = triangle_strip
29: TypePointer Function 8(fvec2)
31: 12(int) Constant 0
35: TypePointer Output 7(fvec4)
36(position): 35(ptr) Variable Output
36(outStream.position): 35(ptr) Variable Output
39(PS_IN): TypeStruct 7(fvec4) 8(fvec2)
40: TypePointer Output 39(PS_IN)
41(outStream): 40(ptr) Variable Output
@@ -236,7 +236,7 @@ output primitive = triangle_strip
Store 34 33
37: 23(ptr) AccessChain 11(vout) 31
38: 7(fvec4) Load 37
Store 36(position) 38
Store 36(outStream.position) 38
42: 23(ptr) AccessChain 11(vout) 13
43: 7(fvec4) Load 42
44: 35(ptr) AccessChain 41(outStream) 31