HLSL: Flatten more I/O: non-arrayed user-only structures.

The goal is to flatten all I/O, but there are multiple categories and
steps to complete, likely including a final unification of splitting
and flattening.
This commit is contained in:
John Kessenich 2017-08-04 12:04:44 -06:00
parent cca42a8ea6
commit b6be80f44e
12 changed files with 693 additions and 374 deletions

View File

@ -42,14 +42,34 @@ output primitive = line_strip
0:20 Constant:
0:20 0 (const int)
0:22 Sequence
0:22 move second child to first child ( temp structure{ temp float myfloat, temp int something})
0:22 'OutputStream' (layout( location=0) out structure{ temp float myfloat, temp int something})
0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:22 Sequence
0:22 move second child to first child ( temp float)
0:? 'myfloat' (layout( location=0) out float)
0:22 myfloat: direct index for structure ( temp float)
0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp int)
0:? 'something' (layout( location=1) out int)
0:22 something: direct index for structure ( temp int)
0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:22 Constant:
0:22 1 (const int)
0:22 EmitVertex ( temp void)
0:23 Sequence
0:23 move second child to first child ( temp structure{ temp float myfloat, temp int something})
0:23 'OutputStream' (layout( location=0) out structure{ temp float myfloat, temp int something})
0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:23 Sequence
0:23 move second child to first child ( temp float)
0:? 'myfloat' (layout( location=0) out float)
0:23 myfloat: direct index for structure ( temp float)
0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:23 Constant:
0:23 0 (const int)
0:23 move second child to first child ( temp int)
0:? 'something' (layout( location=1) out int)
0:23 something: direct index for structure ( temp int)
0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:23 Constant:
0:23 1 (const int)
0:23 EmitVertex ( temp void)
0:24 EndPrimitive ( temp void)
0:16 Function Definition: main( ( temp void)
@ -68,7 +88,8 @@ output primitive = line_strip
0:? Linker Objects
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
0:? 'test' (layout( location=1) in 3-element array of uint)
0:? 'OutputStream' (layout( location=0) out structure{ temp float myfloat, temp int something})
0:? 'myfloat' (layout( location=0) out float)
0:? 'something' (layout( location=1) out int)
Linked geometry stage:
@ -117,14 +138,34 @@ output primitive = line_strip
0:20 Constant:
0:20 0 (const int)
0:22 Sequence
0:22 move second child to first child ( temp structure{ temp float myfloat, temp int something})
0:22 'OutputStream' (layout( location=0) out structure{ temp float myfloat, temp int something})
0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:22 Sequence
0:22 move second child to first child ( temp float)
0:? 'myfloat' (layout( location=0) out float)
0:22 myfloat: direct index for structure ( temp float)
0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp int)
0:? 'something' (layout( location=1) out int)
0:22 something: direct index for structure ( temp int)
0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:22 Constant:
0:22 1 (const int)
0:22 EmitVertex ( temp void)
0:23 Sequence
0:23 move second child to first child ( temp structure{ temp float myfloat, temp int something})
0:23 'OutputStream' (layout( location=0) out structure{ temp float myfloat, temp int something})
0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:23 Sequence
0:23 move second child to first child ( temp float)
0:? 'myfloat' (layout( location=0) out float)
0:23 myfloat: direct index for structure ( temp float)
0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:23 Constant:
0:23 0 (const int)
0:23 move second child to first child ( temp int)
0:? 'something' (layout( location=1) out int)
0:23 something: direct index for structure ( temp int)
0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
0:23 Constant:
0:23 1 (const int)
0:23 EmitVertex ( temp void)
0:24 EndPrimitive ( temp void)
0:16 Function Definition: main( ( temp void)
@ -143,16 +184,17 @@ output primitive = line_strip
0:? Linker Objects
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
0:? 'test' (layout( location=1) in 3-element array of uint)
0:? 'OutputStream' (layout( location=0) out structure{ temp float myfloat, temp int something})
0:? 'myfloat' (layout( location=0) out float)
0:? 'something' (layout( location=1) out int)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 60
// Id's are bound by 68
Capability Geometry
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 42 47 50
EntryPoint Geometry 4 "main" 42 46 55 58
ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputLineStrip
@ -167,18 +209,20 @@ output primitive = line_strip
Name 16 "test"
Name 17 "OutputStream"
Name 20 "Vert"
Name 42 "OutputStream"
Name 45 "VertexID"
Name 47 "VertexID"
Name 49 "test"
Name 50 "test"
Name 52 "OutputStream"
Name 53 "param"
Name 55 "param"
Name 57 "param"
Decorate 42(OutputStream) Location 0
Decorate 47(VertexID) Location 0
Decorate 50(test) Location 1
Name 42 "myfloat"
Name 46 "something"
Name 53 "VertexID"
Name 55 "VertexID"
Name 57 "test"
Name 58 "test"
Name 60 "OutputStream"
Name 61 "param"
Name 63 "param"
Name 65 "param"
Decorate 42(myfloat) Location 0
Decorate 46(something) Location 1
Decorate 55(VertexID) Location 0
Decorate 58(test) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@ -196,30 +240,32 @@ output primitive = line_strip
29: 11(int) Constant 2
34: TypePointer Function 10(float)
39: TypePointer Function 11(int)
41: TypePointer Output 12(PSInput)
42(OutputStream): 41(ptr) Variable Output
46: TypePointer Input 8
47(VertexID): 46(ptr) Variable Input
50(test): 46(ptr) Variable Input
41: TypePointer Output 10(float)
42(myfloat): 41(ptr) Variable Output
45: TypePointer Output 11(int)
46(something): 45(ptr) Variable Output
54: TypePointer Input 8
55(VertexID): 54(ptr) Variable Input
58(test): 54(ptr) Variable Input
4(main): 2 Function None 3
5: Label
45(VertexID): 9(ptr) Variable Function
49(test): 9(ptr) Variable Function
52(OutputStream): 13(ptr) Variable Function
53(param): 9(ptr) Variable Function
55(param): 9(ptr) Variable Function
57(param): 13(ptr) Variable Function
48: 8 Load 47(VertexID)
Store 45(VertexID) 48
51: 8 Load 50(test)
Store 49(test) 51
54: 8 Load 45(VertexID)
Store 53(param) 54
56: 8 Load 49(test)
Store 55(param) 56
58: 2 FunctionCall 18(@main(u1[3];u1[3];struct-PSInput-f1-i11;) 53(param) 55(param) 57(param)
59: 12(PSInput) Load 57(param)
Store 52(OutputStream) 59
53(VertexID): 9(ptr) Variable Function
57(test): 9(ptr) Variable Function
60(OutputStream): 13(ptr) Variable Function
61(param): 9(ptr) Variable Function
63(param): 9(ptr) Variable Function
65(param): 13(ptr) Variable Function
56: 8 Load 55(VertexID)
Store 53(VertexID) 56
59: 8 Load 58(test)
Store 57(test) 59
62: 8 Load 53(VertexID)
Store 61(param) 62
64: 8 Load 57(test)
Store 63(param) 64
66: 2 FunctionCall 18(@main(u1[3];u1[3];struct-PSInput-f1-i11;) 61(param) 63(param) 65(param)
67: 12(PSInput) Load 65(param)
Store 60(OutputStream) 67
Return
FunctionEnd
18(@main(u1[3];u1[3];struct-PSInput-f1-i11;): 2 Function None 14
@ -244,11 +290,19 @@ output primitive = line_strip
38: 11(int) Bitcast 37
40: 39(ptr) AccessChain 20(Vert) 25
Store 40 38
43: 12(PSInput) Load 20(Vert)
Store 42(OutputStream) 43
43: 34(ptr) AccessChain 20(Vert) 21
44: 10(float) Load 43
Store 42(myfloat) 44
47: 39(ptr) AccessChain 20(Vert) 25
48: 11(int) Load 47
Store 46(something) 48
EmitVertex
44: 12(PSInput) Load 20(Vert)
Store 42(OutputStream) 44
49: 34(ptr) AccessChain 20(Vert) 21
50: 10(float) Load 49
Store 42(myfloat) 50
51: 39(ptr) AccessChain 20(Vert) 25
52: 11(int) Load 51
Store 46(something) 52
EmitVertex
EndPrimitive
Return

View File

@ -105,14 +105,28 @@ triangle order = none
0:? 'pcf_data_flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Function Call: @main(struct-ds_in_t-vf4-vf31[3];vf3;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 3-component vector of float)
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
0:22 Sequence
0:22 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Function Call: @main(struct-ds_in_t-vf4-vf31[3];vf3;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 3-component vector of float)
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
0:22 move second child to first child ( temp 4-component vector of float)
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:22 pos: direct index for structure ( temp 4-component vector of float)
0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp 3-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:22 norm: direct index for structure ( temp 3-component vector of float)
0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 1 (const int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:? 'pcf_data_flTessFactor' ( patch in 4-element array of float TessLevelOuter)
@ -228,14 +242,28 @@ triangle order = none
0:? 'pcf_data_flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Function Call: @main(struct-ds_in_t-vf4-vf31[3];vf3;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 3-component vector of float)
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
0:22 Sequence
0:22 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Function Call: @main(struct-ds_in_t-vf4-vf31[3];vf3;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 3-component vector of float)
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
0:22 move second child to first child ( temp 4-component vector of float)
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:22 pos: direct index for structure ( temp 4-component vector of float)
0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp 3-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:22 norm: direct index for structure ( temp 3-component vector of float)
0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 1 (const int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:? 'pcf_data_flTessFactor' ( patch in 4-element array of float TessLevelOuter)
@ -243,12 +271,12 @@ triangle order = none
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 88
// Id's are bound by 95
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationEvaluation 4 "main" 51 55 61 76 81
EntryPoint TessellationEvaluation 4 "main" 51 55 61 76 88 92
ExecutionMode 4 Triangles
Source HLSL 500
Name 4 "main"
@ -273,9 +301,11 @@ triangle order = none
Name 57 "pcf_data"
Name 61 "pcf_data_flTessFactor"
Name 76 "pcf_data_flInsideTessFactor"
Name 81 "@entryPointOutput"
Name 83 "param"
Name 85 "param"
Name 80 "flattenTemp"
Name 82 "param"
Name 84 "param"
Name 88 "pos"
Name 92 "norm"
Decorate 51(i) Location 0
Decorate 55(tesscoord) Patch
Decorate 55(tesscoord) BuiltIn TessCoord
@ -283,7 +313,8 @@ triangle order = none
Decorate 61(pcf_data_flTessFactor) BuiltIn TessLevelOuter
Decorate 76(pcf_data_flInsideTessFactor) Patch
Decorate 76(pcf_data_flInsideTessFactor) BuiltIn TessLevelInner
Decorate 81(@entryPointOutput) Location 0
Decorate 88(pos) Location 0
Decorate 92(norm) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -322,15 +353,18 @@ triangle order = none
74: TypeArray 6(float) 73
75: TypePointer Input 74
76(pcf_data_flInsideTessFactor): 75(ptr) Variable Input
80: TypePointer Output 17(gs_in_t)
81(@entryPointOutput): 80(ptr) Variable Output
87: TypePointer Output 7(fvec4)
88(pos): 87(ptr) Variable Output
91: TypePointer Output 8(fvec3)
92(norm): 91(ptr) Variable Output
4(main): 2 Function None 3
5: Label
49(i): 48(ptr) Variable Function
53(tesscoord): 13(ptr) Variable Function
57(pcf_data): 16(ptr) Variable Function
83(param): 13(ptr) Variable Function
85(param): 16(ptr) Variable Function
80(flattenTemp): 24(ptr) Variable Function
82(param): 13(ptr) Variable Function
84(param): 16(ptr) Variable Function
52: 12 Load 51(i)
Store 49(i) 52
56: 8(fvec3) Load 55(tesscoord)
@ -351,13 +385,19 @@ triangle order = none
78: 6(float) Load 77
79: 30(ptr) AccessChain 57(pcf_data) 37
Store 79 78
82: 12 Load 49(i)
84: 8(fvec3) Load 53(tesscoord)
Store 83(param) 84
86:15(pcf_in_t) Load 57(pcf_data)
Store 85(param) 86
87: 17(gs_in_t) FunctionCall 22(@main(struct-ds_in_t-vf4-vf31[3];vf3;struct-pcf_in_t-f1[3]-f11;) 82 83(param) 85(param)
Store 81(@entryPointOutput) 87
81: 12 Load 49(i)
83: 8(fvec3) Load 53(tesscoord)
Store 82(param) 83
85:15(pcf_in_t) Load 57(pcf_data)
Store 84(param) 85
86: 17(gs_in_t) FunctionCall 22(@main(struct-ds_in_t-vf4-vf31[3];vf3;struct-pcf_in_t-f1[3]-f11;) 81 82(param) 84(param)
Store 80(flattenTemp) 86
89: 35(ptr) AccessChain 80(flattenTemp) 27
90: 7(fvec4) Load 89
Store 88(pos) 90
93: 13(ptr) AccessChain 80(flattenTemp) 37
94: 8(fvec3) Load 93
Store 92(norm) 94
Return
FunctionEnd
22(@main(struct-ds_in_t-vf4-vf31[3];vf3;struct-pcf_in_t-f1[3]-f11;): 17(gs_in_t) Function None 18

View File

@ -114,14 +114,28 @@ triangle order = none
0:25 move second child to first child ( temp 3-component vector of float)
0:? 'tesscoord' ( temp 3-component vector of float)
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:25 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 Function Call: @main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 3-component vector of float)
0:25 Sequence
0:25 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 Function Call: @main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 3-component vector of float)
0:25 move second child to first child ( temp 4-component vector of float)
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:25 pos: direct index for structure ( temp 4-component vector of float)
0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 Constant:
0:25 0 (const int)
0:25 move second child to first child ( temp 3-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:25 norm: direct index for structure ( temp 3-component vector of float)
0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 Constant:
0:25 1 (const int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:? 'pcf_data' (layout( location=2) patch in structure{ temp float foo})
@ -247,14 +261,28 @@ triangle order = none
0:25 move second child to first child ( temp 3-component vector of float)
0:? 'tesscoord' ( temp 3-component vector of float)
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:25 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 Function Call: @main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 3-component vector of float)
0:25 Sequence
0:25 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 Function Call: @main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 3-component vector of float)
0:25 move second child to first child ( temp 4-component vector of float)
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:25 pos: direct index for structure ( temp 4-component vector of float)
0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 Constant:
0:25 0 (const int)
0:25 move second child to first child ( temp 3-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:25 norm: direct index for structure ( temp 3-component vector of float)
0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:25 Constant:
0:25 1 (const int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:? 'pcf_data' (layout( location=2) patch in structure{ temp float foo})
@ -263,12 +291,12 @@ triangle order = none
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 94
// Id's are bound by 101
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationEvaluation 4 "main" 52 67 73 80 84 87
EntryPoint TessellationEvaluation 4 "main" 52 67 73 80 84 94 98
ExecutionMode 4 Triangles
Source HLSL 500
Name 4 "main"
@ -297,9 +325,11 @@ triangle order = none
Name 80 "i"
Name 82 "tesscoord"
Name 84 "tesscoord"
Name 87 "@entryPointOutput"
Name 89 "param"
Name 91 "param"
Name 86 "flattenTemp"
Name 88 "param"
Name 90 "param"
Name 94 "pos"
Name 98 "norm"
Decorate 52(pcf_data_flTessFactor) Patch
Decorate 52(pcf_data_flTessFactor) BuiltIn TessLevelOuter
Decorate 67(pcf_data_flInsideTessFactor) Patch
@ -310,7 +340,8 @@ triangle order = none
Decorate 80(i) Location 0
Decorate 84(tesscoord) Patch
Decorate 84(tesscoord) BuiltIn TessCoord
Decorate 87(@entryPointOutput) Location 0
Decorate 94(pos) Location 0
Decorate 98(norm) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -352,15 +383,18 @@ triangle order = none
80(i): 79(ptr) Variable Input
83: TypePointer Input 13(fvec3)
84(tesscoord): 83(ptr) Variable Input
86: TypePointer Output 17(gs_in_t)
87(@entryPointOutput): 86(ptr) Variable Output
93: TypePointer Output 12(fvec4)
94(pos): 93(ptr) Variable Output
97: TypePointer Output 13(fvec3)
98(norm): 97(ptr) Variable Output
4(main): 2 Function None 3
5: Label
48(pcf_data): 11(ptr) Variable Function
78(i): 77(ptr) Variable Function
82(tesscoord): 16(ptr) Variable Function
89(param): 11(ptr) Variable Function
91(param): 16(ptr) Variable Function
86(flattenTemp): 24(ptr) Variable Function
88(param): 11(ptr) Variable Function
90(param): 16(ptr) Variable Function
54: 53(ptr) AccessChain 52(pcf_data_flTessFactor) 27
55: 6(float) Load 54
56: 30(ptr) AccessChain 48(pcf_data) 27 27
@ -385,13 +419,19 @@ triangle order = none
Store 78(i) 81
85: 13(fvec3) Load 84(tesscoord)
Store 82(tesscoord) 85
88: 15 Load 78(i)
90:10(pcf_in_t) Load 48(pcf_data)
Store 89(param) 90
92: 13(fvec3) Load 82(tesscoord)
Store 91(param) 92
93: 17(gs_in_t) FunctionCall 22(@main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3;) 89(param) 88 91(param)
Store 87(@entryPointOutput) 93
87: 15 Load 78(i)
89:10(pcf_in_t) Load 48(pcf_data)
Store 88(param) 89
91: 13(fvec3) Load 82(tesscoord)
Store 90(param) 91
92: 17(gs_in_t) FunctionCall 22(@main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3;) 88(param) 87 90(param)
Store 86(flattenTemp) 92
95: 35(ptr) AccessChain 86(flattenTemp) 27
96: 12(fvec4) Load 95
Store 94(pos) 96
99: 16(ptr) AccessChain 86(flattenTemp) 37
100: 13(fvec3) Load 99
Store 98(norm) 100
Return
FunctionEnd
22(@main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3;): 17(gs_in_t) Function None 18

View File

@ -102,14 +102,28 @@ triangle order = none
0:? 'pcf_data_flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 Function Call: @main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 2-component vector of float)
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
0:24 Sequence
0:24 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 Function Call: @main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 2-component vector of float)
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
0:24 move second child to first child ( temp 4-component vector of float)
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:24 pos: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp 3-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:24 norm: direct index for structure ( temp 3-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 Constant:
0:24 1 (const int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:? 'i' (layout( location=0) in 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:? 'pcf_data_flTessFactor' ( patch in 4-element array of float TessLevelOuter)
@ -222,14 +236,28 @@ triangle order = none
0:? 'pcf_data_flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 Function Call: @main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 2-component vector of float)
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
0:24 Sequence
0:24 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 Function Call: @main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( temp 2-component vector of float)
0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
0:24 move second child to first child ( temp 4-component vector of float)
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:24 pos: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp 3-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:24 norm: direct index for structure ( temp 3-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:24 Constant:
0:24 1 (const int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'pos' (layout( location=0) out 4-component vector of float)
0:? 'norm' (layout( location=1) out 3-component vector of float)
0:? 'i' (layout( location=0) in 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:? 'pcf_data_flTessFactor' ( patch in 4-element array of float TessLevelOuter)
@ -237,12 +265,12 @@ triangle order = none
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 93
// Id's are bound by 100
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationEvaluation 4 "main" 54 58 67 81 86
EntryPoint TessellationEvaluation 4 "main" 54 58 67 81 93 97
ExecutionMode 4 Isolines
Source HLSL 500
Name 4 "main"
@ -267,9 +295,11 @@ triangle order = none
Name 63 "pcf_data"
Name 67 "pcf_data_flTessFactor"
Name 81 "pcf_data_flInsideTessFactor"
Name 86 "@entryPointOutput"
Name 88 "param"
Name 90 "param"
Name 85 "flattenTemp"
Name 87 "param"
Name 89 "param"
Name 93 "pos"
Name 97 "norm"
Decorate 54(i) Location 0
Decorate 58(tesscoord) Patch
Decorate 58(tesscoord) BuiltIn TessCoord
@ -277,7 +307,8 @@ triangle order = none
Decorate 67(pcf_data_flTessFactor) BuiltIn TessLevelOuter
Decorate 81(pcf_data_flInsideTessFactor) Patch
Decorate 81(pcf_data_flInsideTessFactor) BuiltIn TessLevelInner
Decorate 86(@entryPointOutput) Location 0
Decorate 93(pos) Location 0
Decorate 97(norm) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -318,15 +349,18 @@ triangle order = none
79: TypeArray 6(float) 11
80: TypePointer Input 79
81(pcf_data_flInsideTessFactor): 80(ptr) Variable Input
85: TypePointer Output 19(gs_in_t)
86(@entryPointOutput): 85(ptr) Variable Output
92: TypePointer Output 7(fvec4)
93(pos): 92(ptr) Variable Output
96: TypePointer Output 8(fvec3)
97(norm): 96(ptr) Variable Output
4(main): 2 Function None 3
5: Label
52(i): 51(ptr) Variable Function
56(tesscoord): 14(ptr) Variable Function
63(pcf_data): 18(ptr) Variable Function
88(param): 14(ptr) Variable Function
90(param): 18(ptr) Variable Function
85(flattenTemp): 26(ptr) Variable Function
87(param): 14(ptr) Variable Function
89(param): 18(ptr) Variable Function
55: 12 Load 54(i)
Store 52(i) 55
59: 8(fvec3) Load 58(tesscoord)
@ -350,13 +384,19 @@ triangle order = none
83: 6(float) Load 82
84: 32(ptr) AccessChain 63(pcf_data) 39
Store 84 83
87: 12 Load 52(i)
89: 13(fvec2) Load 56(tesscoord)
Store 88(param) 89
91:17(pcf_in_t) Load 63(pcf_data)
Store 90(param) 91
92: 19(gs_in_t) FunctionCall 24(@main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11;) 87 88(param) 90(param)
Store 86(@entryPointOutput) 92
86: 12 Load 52(i)
88: 13(fvec2) Load 56(tesscoord)
Store 87(param) 88
90:17(pcf_in_t) Load 63(pcf_data)
Store 89(param) 90
91: 19(gs_in_t) FunctionCall 24(@main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11;) 86 87(param) 89(param)
Store 85(flattenTemp) 91
94: 37(ptr) AccessChain 85(flattenTemp) 29
95: 7(fvec4) Load 94
Store 93(pos) 95
98: 46(ptr) AccessChain 85(flattenTemp) 39
99: 8(fvec3) Load 98
Store 97(norm) 99
Return
FunctionEnd
24(@main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11;): 19(gs_in_t) Function None 20

View File

@ -11,9 +11,10 @@ gl_FragCoord origin is upper left
0:10 Function Definition: main( ( temp void)
0:10 Function Parameters:
0:? Sequence
0:10 move second child to first child ( temp structure{})
0:? 'i' ( temp structure{})
0:? 'i' ( in structure{})
0:10 Sequence
0:10 move second child to first child ( temp structure{})
0:? 'i' ( temp structure{})
0:? 'i' ( in structure{})
0:10 Sequence
0:10 move second child to first child ( temp structure{})
0:? '@entryPointOutput' ( out structure{})
@ -37,9 +38,10 @@ gl_FragCoord origin is upper left
0:10 Function Definition: main( ( temp void)
0:10 Function Parameters:
0:? Sequence
0:10 move second child to first child ( temp structure{})
0:? 'i' ( temp structure{})
0:? 'i' ( in structure{})
0:10 Sequence
0:10 move second child to first child ( temp structure{})
0:? 'i' ( temp structure{})
0:? 'i' ( in structure{})
0:10 Sequence
0:10 move second child to first child ( temp structure{})
0:? '@entryPointOutput' ( out structure{})

View File

@ -14,10 +14,11 @@ Shader version: 500
0:10 move second child to first child ( temp structure{})
0:? 'i' ( temp structure{})
0:? 'i' ( in structure{})
0:10 move second child to first child ( temp structure{})
0:? '@entryPointOutput' ( out structure{})
0:10 Function Call: @main(struct-vs_in1; ( temp structure{})
0:? 'i' ( temp structure{})
0:10 Sequence
0:10 move second child to first child ( temp structure{})
0:? '@entryPointOutput' ( out structure{})
0:10 Function Call: @main(struct-vs_in1; ( temp structure{})
0:? 'i' ( temp structure{})
0:? Linker Objects
@ -39,10 +40,11 @@ Shader version: 500
0:10 move second child to first child ( temp structure{})
0:? 'i' ( temp structure{})
0:? 'i' ( in structure{})
0:10 move second child to first child ( temp structure{})
0:? '@entryPointOutput' ( out structure{})
0:10 Function Call: @main(struct-vs_in1; ( temp structure{})
0:? 'i' ( temp structure{})
0:10 Sequence
0:10 move second child to first child ( temp structure{})
0:? '@entryPointOutput' ( out structure{})
0:10 Function Call: @main(struct-vs_in1; ( temp structure{})
0:? 'i' ( temp structure{})
0:? Linker Objects
// Module Version 10000

View File

@ -12,9 +12,31 @@ using depth_greater
0:15 Function Definition: main( ( temp void)
0:15 Function Parameters:
0:? Sequence
0:15 move second child to first child ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:? 't' (layout( location=0) in structure{ temp float f, centroid temp float g, temp float d, temp 4-component vector of float normal})
0:15 Sequence
0:15 move second child to first child ( temp float)
0:15 f: direct index for structure ( temp float)
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 0 (const int)
0:? 'f' (layout( location=0) in float)
0:15 move second child to first child ( temp float)
0:15 g: direct index for structure ( temp float)
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 1 (const int)
0:? 'g' (layout( location=1) centroid in float)
0:15 move second child to first child ( temp float)
0:15 d: direct index for structure ( temp float)
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 2 (const int)
0:? 'd' (layout( location=2) in float)
0:15 move second child to first child ( temp 4-component vector of float)
0:15 normal: direct index for structure ( temp 4-component vector of float)
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 3 (const int)
0:? 'normal' (layout( location=3) in 4-component vector of float)
0:15 Sequence
0:15 move second child to first child ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
@ -51,7 +73,10 @@ using depth_greater
0:? 'g' (layout( location=1) out float)
0:? 'd' ( out float FragDepth)
0:? 'normal' (layout( location=2) out 4-component vector of float)
0:? 't' (layout( location=0) in structure{ temp float f, centroid temp float g, temp float d, temp 4-component vector of float normal})
0:? 'f' (layout( location=0) in float)
0:? 'g' (layout( location=1) centroid in float)
0:? 'd' (layout( location=2) in float)
0:? 'normal' (layout( location=3) in 4-component vector of float)
Linked fragment stage:
@ -70,9 +95,31 @@ using depth_greater
0:15 Function Definition: main( ( temp void)
0:15 Function Parameters:
0:? Sequence
0:15 move second child to first child ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:? 't' (layout( location=0) in structure{ temp float f, centroid temp float g, temp float d, temp 4-component vector of float normal})
0:15 Sequence
0:15 move second child to first child ( temp float)
0:15 f: direct index for structure ( temp float)
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 0 (const int)
0:? 'f' (layout( location=0) in float)
0:15 move second child to first child ( temp float)
0:15 g: direct index for structure ( temp float)
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 1 (const int)
0:? 'g' (layout( location=1) centroid in float)
0:15 move second child to first child ( temp float)
0:15 d: direct index for structure ( temp float)
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 2 (const int)
0:? 'd' (layout( location=2) in float)
0:15 move second child to first child ( temp 4-component vector of float)
0:15 normal: direct index for structure ( temp 4-component vector of float)
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 3 (const int)
0:? 'normal' (layout( location=3) in 4-component vector of float)
0:15 Sequence
0:15 move second child to first child ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
@ -109,16 +156,19 @@ using depth_greater
0:? 'g' (layout( location=1) out float)
0:? 'd' ( out float FragDepth)
0:? 'normal' (layout( location=2) out 4-component vector of float)
0:? 't' (layout( location=0) in structure{ temp float f, centroid temp float g, temp float d, temp 4-component vector of float normal})
0:? 'f' (layout( location=0) in float)
0:? 'g' (layout( location=1) centroid in float)
0:? 'd' (layout( location=2) in float)
0:? 'normal' (layout( location=3) in 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 64
// Id's are bound by 66
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 21 43 46 49 53
EntryPoint Fragment 4 "main" 22 27 31 36 45 48 51 55
ExecutionMode 4 OriginUpperLeft
ExecutionMode 4 DepthGreater
Source HLSL 500
@ -132,54 +182,55 @@ using depth_greater
Name 11 "t"
Name 14 "local"
Name 18 "t"
Name 19 "T"
MemberName 19(T) 0 "f"
MemberName 19(T) 1 "g"
MemberName 19(T) 2 "d"
MemberName 19(T) 3 "normal"
Name 21 "t"
Name 38 "flattenTemp"
Name 39 "param"
Name 43 "f"
Name 46 "g"
Name 49 "d"
Name 53 "normal"
Name 56 "T"
MemberName 56(T) 0 "f"
MemberName 56(T) 1 "g"
MemberName 56(T) 2 "d"
MemberName 56(T) 3 "normal"
Name 57 "$Global"
MemberName 57($Global) 0 "s"
Name 59 ""
Name 60 "T"
MemberName 60(T) 0 "f"
MemberName 60(T) 1 "g"
MemberName 60(T) 2 "d"
MemberName 60(T) 3 "normal"
Name 61 "buff"
MemberName 61(buff) 0 "t"
Name 63 ""
MemberDecorate 19(T) 1 Centroid
Decorate 21(t) Location 0
Decorate 43(f) Location 0
Decorate 46(g) Location 1
Decorate 49(d) BuiltIn FragDepth
Decorate 53(normal) Location 2
MemberDecorate 56(T) 0 Offset 68
MemberDecorate 56(T) 1 Offset 72
MemberDecorate 56(T) 2 Offset 76
MemberDecorate 56(T) 3 Offset 80
MemberDecorate 57($Global) 0 Offset 0
Decorate 57($Global) Block
Decorate 59 DescriptorSet 0
MemberDecorate 60(T) 0 Offset 0
MemberDecorate 60(T) 1 Offset 4
MemberDecorate 60(T) 2 Offset 8
MemberDecorate 60(T) 3 Offset 16
MemberDecorate 61(buff) 0 Offset 96
Decorate 61(buff) Block
Decorate 63 DescriptorSet 0
Name 22 "f"
Name 27 "g"
Name 31 "d"
Name 36 "normal"
Name 40 "flattenTemp"
Name 41 "param"
Name 45 "f"
Name 48 "g"
Name 51 "d"
Name 55 "normal"
Name 58 "T"
MemberName 58(T) 0 "f"
MemberName 58(T) 1 "g"
MemberName 58(T) 2 "d"
MemberName 58(T) 3 "normal"
Name 59 "$Global"
MemberName 59($Global) 0 "s"
Name 61 ""
Name 62 "T"
MemberName 62(T) 0 "f"
MemberName 62(T) 1 "g"
MemberName 62(T) 2 "d"
MemberName 62(T) 3 "normal"
Name 63 "buff"
MemberName 63(buff) 0 "t"
Name 65 ""
Decorate 22(f) Location 0
Decorate 27(g) Centroid
Decorate 27(g) Location 1
Decorate 31(d) Location 2
Decorate 36(normal) Location 3
Decorate 45(f) Location 0
Decorate 48(g) Location 1
Decorate 51(d) BuiltIn FragDepth
Decorate 55(normal) Location 2
MemberDecorate 58(T) 0 Offset 68
MemberDecorate 58(T) 1 Offset 72
MemberDecorate 58(T) 2 Offset 76
MemberDecorate 58(T) 3 Offset 80
MemberDecorate 59($Global) 0 Offset 0
Decorate 59($Global) Block
Decorate 61 DescriptorSet 0
MemberDecorate 62(T) 0 Offset 0
MemberDecorate 62(T) 1 Offset 4
MemberDecorate 62(T) 2 Offset 8
MemberDecorate 62(T) 3 Offset 16
MemberDecorate 63(buff) 0 Offset 96
Decorate 63(buff) Block
Decorate 65 DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -187,64 +238,66 @@ using depth_greater
8(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
9: TypePointer Function 8(T)
10: TypeFunction 8(T) 9(ptr)
19(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
20: TypePointer Input 19(T)
21(t): 20(ptr) Variable Input
24: TypeInt 32 1
25: 24(int) Constant 0
26: TypePointer Function 6(float)
29: 24(int) Constant 1
32: 24(int) Constant 2
35: 24(int) Constant 3
36: TypePointer Function 7(fvec4)
42: TypePointer Output 6(float)
43(f): 42(ptr) Variable Output
46(g): 42(ptr) Variable Output
49(d): 42(ptr) Variable Output
52: TypePointer Output 7(fvec4)
53(normal): 52(ptr) Variable Output
56(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
57($Global): TypeStruct 56(T)
58: TypePointer Uniform 57($Global)
59: 58(ptr) Variable Uniform
60(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
61(buff): TypeStruct 60(T)
62: TypePointer Uniform 61(buff)
63: 62(ptr) Variable Uniform
19: TypeInt 32 1
20: 19(int) Constant 0
21: TypePointer Input 6(float)
22(f): 21(ptr) Variable Input
24: TypePointer Function 6(float)
26: 19(int) Constant 1
27(g): 21(ptr) Variable Input
30: 19(int) Constant 2
31(d): 21(ptr) Variable Input
34: 19(int) Constant 3
35: TypePointer Input 7(fvec4)
36(normal): 35(ptr) Variable Input
38: TypePointer Function 7(fvec4)
44: TypePointer Output 6(float)
45(f): 44(ptr) Variable Output
48(g): 44(ptr) Variable Output
51(d): 44(ptr) Variable Output
54: TypePointer Output 7(fvec4)
55(normal): 54(ptr) Variable Output
58(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
59($Global): TypeStruct 58(T)
60: TypePointer Uniform 59($Global)
61: 60(ptr) Variable Uniform
62(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
63(buff): TypeStruct 62(T)
64: TypePointer Uniform 63(buff)
65: 64(ptr) Variable Uniform
4(main): 2 Function None 3
5: Label
18(t): 9(ptr) Variable Function
38(flattenTemp): 9(ptr) Variable Function
39(param): 9(ptr) Variable Function
22: 19(T) Load 21(t)
23: 6(float) CompositeExtract 22 0
27: 26(ptr) AccessChain 18(t) 25
Store 27 23
28: 6(float) CompositeExtract 22 1
30: 26(ptr) AccessChain 18(t) 29
Store 30 28
31: 6(float) CompositeExtract 22 2
33: 26(ptr) AccessChain 18(t) 32
Store 33 31
34: 7(fvec4) CompositeExtract 22 3
37: 36(ptr) AccessChain 18(t) 35
Store 37 34
40: 8(T) Load 18(t)
Store 39(param) 40
41: 8(T) FunctionCall 12(@main(struct-T-f1-f1-f1-vf41;) 39(param)
Store 38(flattenTemp) 41
44: 26(ptr) AccessChain 38(flattenTemp) 25
45: 6(float) Load 44
Store 43(f) 45
47: 26(ptr) AccessChain 38(flattenTemp) 29
48: 6(float) Load 47
Store 46(g) 48
50: 26(ptr) AccessChain 38(flattenTemp) 32
51: 6(float) Load 50
Store 49(d) 51
54: 36(ptr) AccessChain 38(flattenTemp) 35
55: 7(fvec4) Load 54
Store 53(normal) 55
40(flattenTemp): 9(ptr) Variable Function
41(param): 9(ptr) Variable Function
23: 6(float) Load 22(f)
25: 24(ptr) AccessChain 18(t) 20
Store 25 23
28: 6(float) Load 27(g)
29: 24(ptr) AccessChain 18(t) 26
Store 29 28
32: 6(float) Load 31(d)
33: 24(ptr) AccessChain 18(t) 30
Store 33 32
37: 7(fvec4) Load 36(normal)
39: 38(ptr) AccessChain 18(t) 34
Store 39 37
42: 8(T) Load 18(t)
Store 41(param) 42
43: 8(T) FunctionCall 12(@main(struct-T-f1-f1-f1-vf41;) 41(param)
Store 40(flattenTemp) 43
46: 24(ptr) AccessChain 40(flattenTemp) 20
47: 6(float) Load 46
Store 45(f) 47
49: 24(ptr) AccessChain 40(flattenTemp) 26
50: 6(float) Load 49
Store 48(g) 50
52: 24(ptr) AccessChain 40(flattenTemp) 30
53: 6(float) Load 52
Store 51(d) 53
56: 38(ptr) AccessChain 40(flattenTemp) 34
57: 7(fvec4) Load 56
Store 55(normal) 57
Return
FunctionEnd
12(@main(struct-T-f1-f1-f1-vf41;): 8(T) Function None 10

View File

@ -24,16 +24,27 @@ gl_FragCoord origin is upper left
0:7 Function Definition: main( ( temp void)
0:7 Function Parameters:
0:? Sequence
0:7 move second child to first child ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:7 Sequence
0:7 move second child to first child ( temp float)
0:7 interp: direct index for structure ( temp float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:7 Constant:
0:7 0 (const int)
0:? 'interp' (layout( location=0) in float)
0:7 move second child to first child ( temp uint)
0:7 no_interp: direct index for structure ( temp uint)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:7 Constant:
0:7 1 (const int)
0:? 'no_interp' (layout( location=1) flat in uint)
0:7 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:7 Function Call: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:? 'interp' (layout( location=0) in float)
0:? 'no_interp' (layout( location=1) flat in uint)
Linked fragment stage:
@ -64,16 +75,27 @@ gl_FragCoord origin is upper left
0:7 Function Definition: main( ( temp void)
0:7 Function Parameters:
0:? Sequence
0:7 move second child to first child ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:7 Sequence
0:7 move second child to first child ( temp float)
0:7 interp: direct index for structure ( temp float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:7 Constant:
0:7 0 (const int)
0:? 'interp' (layout( location=0) in float)
0:7 move second child to first child ( temp uint)
0:7 no_interp: direct index for structure ( temp uint)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:7 Constant:
0:7 1 (const int)
0:? 'no_interp' (layout( location=1) flat in uint)
0:7 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:7 Function Call: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:? 'interp' (layout( location=0) in float)
0:? 'no_interp' (layout( location=1) flat in uint)
// Module Version 10000
// Generated by (magic number): 80001
@ -82,7 +104,7 @@ gl_FragCoord origin is upper left
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 33 40
EntryPoint Fragment 4 "main" 32 36 40
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@ -92,14 +114,13 @@ gl_FragCoord origin is upper left
Name 13 "@main(struct-PSInput-f1-u11;"
Name 12 "input"
Name 30 "input"
Name 31 "PSInput"
MemberName 31(PSInput) 0 "interp"
MemberName 31(PSInput) 1 "no_interp"
Name 33 "input"
Name 32 "interp"
Name 36 "no_interp"
Name 40 "@entryPointOutput"
Name 41 "param"
MemberDecorate 31(PSInput) 1 Flat
Decorate 33(input) Location 0
Decorate 32(interp) Location 0
Decorate 36(no_interp) Flat
Decorate 36(no_interp) Location 1
Decorate 40(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
@ -116,20 +137,20 @@ gl_FragCoord origin is upper left
22: TypePointer Function 6(float)
25: 6(float) Constant 0
26: 6(float) Constant 1065353216
31(PSInput): TypeStruct 6(float) 7(int)
32: TypePointer Input 31(PSInput)
33(input): 32(ptr) Variable Input
31: TypePointer Input 6(float)
32(interp): 31(ptr) Variable Input
35: TypePointer Input 7(int)
36(no_interp): 35(ptr) Variable Input
39: TypePointer Output 10(fvec4)
40(@entryPointOutput): 39(ptr) Variable Output
4(main): 2 Function None 3
5: Label
30(input): 9(ptr) Variable Function
41(param): 9(ptr) Variable Function
34: 31(PSInput) Load 33(input)
35: 6(float) CompositeExtract 34 0
36: 22(ptr) AccessChain 30(input) 21
Store 36 35
37: 7(int) CompositeExtract 34 1
33: 6(float) Load 32(interp)
34: 22(ptr) AccessChain 30(input) 21
Store 34 33
37: 7(int) Load 36(no_interp)
38: 17(ptr) AccessChain 30(input) 16
Store 38 37
42: 8(PSInput) Load 30(input)

View File

@ -25,9 +25,19 @@ gl_FragCoord origin is upper left
0:7 Function Definition: main( ( temp void)
0:7 Function Parameters:
0:? Sequence
0:7 move second child to first child ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:7 Sequence
0:7 move second child to first child ( temp float)
0:7 interp: direct index for structure ( temp float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:7 Constant:
0:7 0 (const int)
0:? 'interp' (layout( location=0) in float)
0:7 move second child to first child ( temp uint)
0:7 no_interp: direct index for structure ( temp uint)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:7 Constant:
0:7 1 (const int)
0:? 'no_interp' (layout( location=1) flat in uint)
0:7 Function Call: @main(struct-PSInput-f1-u11;vf4;vf4; ( temp void)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'out1' ( temp 4-component vector of float)
@ -39,7 +49,8 @@ gl_FragCoord origin is upper left
0:? 'out2' (layout( location=3) out 4-component vector of float)
0:? 'out2' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:? 'interp' (layout( location=0) in float)
0:? 'no_interp' (layout( location=1) flat in uint)
0:? 'out1' (layout( location=1) out 4-component vector of float)
0:? 'out2' (layout( location=3) out 4-component vector of float)
@ -73,9 +84,19 @@ gl_FragCoord origin is upper left
0:7 Function Definition: main( ( temp void)
0:7 Function Parameters:
0:? Sequence
0:7 move second child to first child ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:7 Sequence
0:7 move second child to first child ( temp float)
0:7 interp: direct index for structure ( temp float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:7 Constant:
0:7 0 (const int)
0:? 'interp' (layout( location=0) in float)
0:7 move second child to first child ( temp uint)
0:7 no_interp: direct index for structure ( temp uint)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:7 Constant:
0:7 1 (const int)
0:? 'no_interp' (layout( location=1) flat in uint)
0:7 Function Call: @main(struct-PSInput-f1-u11;vf4;vf4; ( temp void)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'out1' ( temp 4-component vector of float)
@ -87,7 +108,8 @@ gl_FragCoord origin is upper left
0:? 'out2' (layout( location=3) out 4-component vector of float)
0:? 'out2' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:? 'interp' (layout( location=0) in float)
0:? 'no_interp' (layout( location=1) flat in uint)
0:? 'out1' (layout( location=1) out 4-component vector of float)
0:? 'out2' (layout( location=3) out 4-component vector of float)
@ -98,7 +120,7 @@ gl_FragCoord origin is upper left
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 25 46 48
EntryPoint Fragment 4 "main" 26 32 46 48
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@ -110,10 +132,8 @@ gl_FragCoord origin is upper left
Name 14 "out1"
Name 15 "out2"
Name 22 "input"
Name 23 "PSInput"
MemberName 23(PSInput) 0 "interp"
MemberName 23(PSInput) 1 "no_interp"
Name 25 "input"
Name 26 "interp"
Name 32 "no_interp"
Name 36 "out1"
Name 37 "out2"
Name 38 "param"
@ -121,8 +141,9 @@ gl_FragCoord origin is upper left
Name 41 "param"
Name 46 "out1"
Name 48 "out2"
MemberDecorate 23(PSInput) 1 Flat
Decorate 25(input) Location 0
Decorate 26(interp) Location 0
Decorate 32(no_interp) Flat
Decorate 32(no_interp) Location 1
Decorate 46(out1) Location 1
Decorate 48(out2) Location 3
2: TypeVoid
@ -138,13 +159,14 @@ gl_FragCoord origin is upper left
19: 10(fvec4) ConstantComposite 18 18 18 18
20: 6(float) Constant 0
21: 10(fvec4) ConstantComposite 20 20 20 20
23(PSInput): TypeStruct 6(float) 7(int)
24: TypePointer Input 23(PSInput)
25(input): 24(ptr) Variable Input
28: TypeInt 32 1
29: 28(int) Constant 0
30: TypePointer Function 6(float)
33: 28(int) Constant 1
23: TypeInt 32 1
24: 23(int) Constant 0
25: TypePointer Input 6(float)
26(interp): 25(ptr) Variable Input
28: TypePointer Function 6(float)
30: 23(int) Constant 1
31: TypePointer Input 7(int)
32(no_interp): 31(ptr) Variable Input
34: TypePointer Function 7(int)
45: TypePointer Output 10(fvec4)
46(out1): 45(ptr) Variable Output
@ -157,13 +179,12 @@ gl_FragCoord origin is upper left
38(param): 9(ptr) Variable Function
40(param): 11(ptr) Variable Function
41(param): 11(ptr) Variable Function
26: 23(PSInput) Load 25(input)
27: 6(float) CompositeExtract 26 0
31: 30(ptr) AccessChain 22(input) 29
Store 31 27
32: 7(int) CompositeExtract 26 1
35: 34(ptr) AccessChain 22(input) 33
Store 35 32
27: 6(float) Load 26(interp)
29: 28(ptr) AccessChain 22(input) 24
Store 29 27
33: 7(int) Load 32(no_interp)
35: 34(ptr) AccessChain 22(input) 30
Store 35 33
39: 8(PSInput) Load 22(input)
Store 38(param) 39
42: 2 FunctionCall 16(@main(struct-PSInput-f1-u11;vf4;vf4;) 38(param) 40(param) 41(param)

View File

@ -48,9 +48,19 @@ gl_FragCoord origin is upper left
0:12 Function Definition: main( ( temp void)
0:12 Function Parameters:
0:? Sequence
0:12 move second child to first child ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:12 Sequence
0:12 move second child to first child ( temp float)
0:12 interp: direct index for structure ( temp float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:12 Constant:
0:12 0 (const int)
0:? 'interp' (layout( location=0) in float)
0:12 move second child to first child ( temp uint)
0:12 no_interp: direct index for structure ( temp uint)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:12 Constant:
0:12 1 (const int)
0:? 'no_interp' (layout( location=1) flat in uint)
0:12 Sequence
0:12 move second child to first child ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
@ -75,7 +85,8 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'o1' (layout( location=2) out 4-component vector of float)
0:? 'o2' (layout( location=1) out 4-component vector of float)
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:? 'interp' (layout( location=0) in float)
0:? 'no_interp' (layout( location=1) flat in uint)
0:? 'po' (layout( location=0) out 4-component vector of float)
@ -131,9 +142,19 @@ gl_FragCoord origin is upper left
0:12 Function Definition: main( ( temp void)
0:12 Function Parameters:
0:? Sequence
0:12 move second child to first child ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:12 Sequence
0:12 move second child to first child ( temp float)
0:12 interp: direct index for structure ( temp float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:12 Constant:
0:12 0 (const int)
0:? 'interp' (layout( location=0) in float)
0:12 move second child to first child ( temp uint)
0:12 no_interp: direct index for structure ( temp uint)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:12 Constant:
0:12 1 (const int)
0:? 'no_interp' (layout( location=1) flat in uint)
0:12 Sequence
0:12 move second child to first child ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
@ -158,7 +179,8 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'o1' (layout( location=2) out 4-component vector of float)
0:? 'o2' (layout( location=1) out 4-component vector of float)
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:? 'interp' (layout( location=0) in float)
0:? 'no_interp' (layout( location=1) flat in uint)
0:? 'po' (layout( location=0) out 4-component vector of float)
// Module Version 10000
@ -168,7 +190,7 @@ gl_FragCoord origin is upper left
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 43 57 60 63
EntryPoint Fragment 4 "main" 42 46 57 60 63
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@ -183,10 +205,8 @@ gl_FragCoord origin is upper left
Name 15 "po"
Name 19 "pso"
Name 40 "input"
Name 41 "PSInput"
MemberName 41(PSInput) 0 "interp"
MemberName 41(PSInput) 1 "no_interp"
Name 43 "input"
Name 42 "interp"
Name 46 "no_interp"
Name 49 "flattenTemp"
Name 50 "po"
Name 51 "param"
@ -194,8 +214,9 @@ gl_FragCoord origin is upper left
Name 57 "o1"
Name 60 "o2"
Name 63 "po"
MemberDecorate 41(PSInput) 1 Flat
Decorate 43(input) Location 0
Decorate 42(interp) Location 0
Decorate 46(no_interp) Flat
Decorate 46(no_interp) Location 1
Decorate 57(o1) Location 2
Decorate 60(o2) Location 1
Decorate 63(po) Location 0
@ -219,9 +240,10 @@ gl_FragCoord origin is upper left
31: 6(float) Constant 1065353216
34: 10(fvec4) ConstantComposite 31 31 31 31
36: 10(fvec4) ConstantComposite 30 30 30 30
41(PSInput): TypeStruct 6(float) 7(int)
42: TypePointer Input 41(PSInput)
43(input): 42(ptr) Variable Input
41: TypePointer Input 6(float)
42(interp): 41(ptr) Variable Input
45: TypePointer Input 7(int)
46(no_interp): 45(ptr) Variable Input
56: TypePointer Output 10(fvec4)
57(o1): 56(ptr) Variable Output
60(o2): 56(ptr) Variable Output
@ -233,11 +255,10 @@ gl_FragCoord origin is upper left
50(po): 11(ptr) Variable Function
51(param): 9(ptr) Variable Function
53(param): 11(ptr) Variable Function
44: 41(PSInput) Load 43(input)
45: 6(float) CompositeExtract 44 0
46: 27(ptr) AccessChain 40(input) 21
Store 46 45
47: 7(int) CompositeExtract 44 1
43: 6(float) Load 42(interp)
44: 27(ptr) AccessChain 40(input) 21
Store 44 43
47: 7(int) Load 46(no_interp)
48: 23(ptr) AccessChain 40(input) 22
Store 48 47
52: 8(PSInput) Load 40(input)

View File

@ -48,9 +48,19 @@ gl_FragCoord origin is upper left
0:12 Function Definition: main( ( temp void)
0:12 Function Parameters:
0:? Sequence
0:12 move second child to first child ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:12 Sequence
0:12 move second child to first child ( temp float)
0:12 interp: direct index for structure ( temp float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:12 Constant:
0:12 0 (const int)
0:? 'interp' (layout( location=0) in float)
0:12 move second child to first child ( temp uint)
0:12 no_interp: direct index for structure ( temp uint)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:12 Constant:
0:12 1 (const int)
0:? 'no_interp' (layout( location=1) flat in uint)
0:12 Sequence
0:12 move second child to first child ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
@ -75,7 +85,8 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'o1' (layout( location=2) out 4-component vector of float)
0:? 'o2' (layout( location=3) out 4-component vector of float)
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:? 'interp' (layout( location=0) in float)
0:? 'no_interp' (layout( location=1) flat in uint)
0:? 'po' (layout( location=0) out 4-component vector of float)
@ -131,9 +142,19 @@ gl_FragCoord origin is upper left
0:12 Function Definition: main( ( temp void)
0:12 Function Parameters:
0:? Sequence
0:12 move second child to first child ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:12 Sequence
0:12 move second child to first child ( temp float)
0:12 interp: direct index for structure ( temp float)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:12 Constant:
0:12 0 (const int)
0:? 'interp' (layout( location=0) in float)
0:12 move second child to first child ( temp uint)
0:12 no_interp: direct index for structure ( temp uint)
0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
0:12 Constant:
0:12 1 (const int)
0:? 'no_interp' (layout( location=1) flat in uint)
0:12 Sequence
0:12 move second child to first child ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
@ -158,7 +179,8 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'o1' (layout( location=2) out 4-component vector of float)
0:? 'o2' (layout( location=3) out 4-component vector of float)
0:? 'input' (layout( location=0) in structure{ temp float interp, flat temp uint no_interp})
0:? 'interp' (layout( location=0) in float)
0:? 'no_interp' (layout( location=1) flat in uint)
0:? 'po' (layout( location=0) out 4-component vector of float)
// Module Version 10000
@ -168,7 +190,7 @@ gl_FragCoord origin is upper left
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 43 57 60 63
EntryPoint Fragment 4 "main" 42 46 57 60 63
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@ -183,10 +205,8 @@ gl_FragCoord origin is upper left
Name 15 "po"
Name 19 "pso"
Name 40 "input"
Name 41 "PSInput"
MemberName 41(PSInput) 0 "interp"
MemberName 41(PSInput) 1 "no_interp"
Name 43 "input"
Name 42 "interp"
Name 46 "no_interp"
Name 49 "flattenTemp"
Name 50 "po"
Name 51 "param"
@ -194,8 +214,9 @@ gl_FragCoord origin is upper left
Name 57 "o1"
Name 60 "o2"
Name 63 "po"
MemberDecorate 41(PSInput) 1 Flat
Decorate 43(input) Location 0
Decorate 42(interp) Location 0
Decorate 46(no_interp) Flat
Decorate 46(no_interp) Location 1
Decorate 57(o1) Location 2
Decorate 60(o2) Location 3
Decorate 63(po) Location 0
@ -219,9 +240,10 @@ gl_FragCoord origin is upper left
31: 6(float) Constant 1065353216
34: 10(fvec4) ConstantComposite 31 31 31 31
36: 10(fvec4) ConstantComposite 30 30 30 30
41(PSInput): TypeStruct 6(float) 7(int)
42: TypePointer Input 41(PSInput)
43(input): 42(ptr) Variable Input
41: TypePointer Input 6(float)
42(interp): 41(ptr) Variable Input
45: TypePointer Input 7(int)
46(no_interp): 45(ptr) Variable Input
56: TypePointer Output 10(fvec4)
57(o1): 56(ptr) Variable Output
60(o2): 56(ptr) Variable Output
@ -233,11 +255,10 @@ gl_FragCoord origin is upper left
50(po): 11(ptr) Variable Function
51(param): 9(ptr) Variable Function
53(param): 11(ptr) Variable Function
44: 41(PSInput) Load 43(input)
45: 6(float) CompositeExtract 44 0
46: 27(ptr) AccessChain 40(input) 21
Store 46 45
47: 7(int) CompositeExtract 44 1
43: 6(float) Load 42(interp)
44: 27(ptr) AccessChain 40(input) 21
Store 44 43
47: 7(int) Load 46(no_interp)
48: 23(ptr) AccessChain 40(input) 22
Store 48 47
52: 8(PSInput) Load 40(input)

View File

@ -1904,6 +1904,10 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
// Structs containing built-ins must be split
else if (variable.getType().containsBuiltIn())
split(variable);
else if (!variable.getType().getQualifier().isArrayedIo(language))
flatten(variable);
//else
// TODO: unify split and flatten, so all paths can create flattened I/O
}
// For clip and cull distance, multiple output variables potentially get merged
@ -1915,7 +1919,7 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
if (entryPointOutput != nullptr)
makeVariableInOut(*entryPointOutput);
for (auto it = inputs.begin(); it != inputs.end(); ++it)
if (!isDsPcfInput((*it)->getType())) // skip domain shader PCF input (see comment below)
if (!isDsPcfInput((*it)->getType())) // wait until the end for PCF input (see comment below)
makeVariableInOut(*(*it));
for (auto it = outputs.begin(); it != outputs.end(); ++it)
makeVariableInOut(*(*it));
@ -1927,7 +1931,7 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
// however, so this ensures the linkage is built in the correct order regardless of argument order.
if (language == EShLangTessEvaluation) {
for (auto it = inputs.begin(); it != inputs.end(); ++it)
if (isDsPcfInput((*it)->getType())) // skip domain shader PCF input (see comment below)
if (isDsPcfInput((*it)->getType()))
makeVariableInOut(*(*it));
}