WIP: add other builtins to interstage IO

(Still adding tests: do not commit)

This fixes PR #632 so that:

(a) The 4 PerVertex builtins are added to an interface block for all stages except fragment.

(b) Other builtin qualified variables are added as "loose" linkage members.

(c) Arrayness from the PerVertex builtins is moved to the PerVertex block.

(d) Sometimes, two PerVertex blocks are created, one for in, one for out (e.g, for some GS that
    both reads and writes a Position)
This commit is contained in:
steve-lunarg 2017-01-07 09:07:14 -07:00
parent 5d89d4d483
commit 46d5428422
16 changed files with 519 additions and 196 deletions

View File

@ -4,48 +4,96 @@ gl_FragCoord origin is upper left
0:? Sequence 0:? Sequence
0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; (temp float) 0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; (temp float)
0:8 Function Parameters: 0:8 Function Parameters:
0:8 'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:8 'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:? Sequence 0:? Sequence
0:9 Branch: Return with expression 0:9 Branch: Return with expression
0:9 add (temp float) 0:9 add (temp float)
0:9 direct index (temp float) 0:9 direct index (temp float)
0:9 v: direct index for structure (temp 2-component vector of float) 0:9 v: direct index for structure (temp 2-component vector of float)
0:9 'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:9 'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:9 Constant: 0:9 Constant:
0:9 0 (const int) 0:9 0 (const int)
0:9 Constant: 0:9 Constant:
0:9 1 (const int) 0:9 1 (const int)
0:9 direct index (temp float) 0:9 direct index (temp float)
0:9 fragCoord: direct index for structure (temp 4-component vector of float FragCoord) 0:9 fragCoord: direct index for structure (temp 4-component vector of float)
0:9 'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:9 'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:9 Constant: 0:9 Constant:
0:9 1 (const int) 0:9 1 (const int)
0:9 Constant: 0:9 Constant:
0:9 0 (const int) 0:9 0 (const int)
0:13 Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float) 0:13 Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float)
0:13 Function Parameters: 0:13 Function Parameters:
0:13 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:13 'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:? Sequence 0:? Sequence
0:15 move second child to first child (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:15 Sequence
0:15 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:15 move second child to first child (temp 2-component vector of float)
0:15 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:15 v: direct index for structure (temp 2-component vector of float)
0:15 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:15 Constant:
0:15 0 (const int)
0:15 v: direct index for structure (temp 2-component vector of float)
0:15 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:15 Constant:
0:15 0 (const int)
0:15 move second child to first child (temp 4-component vector of float)
0:15 fragCoord: direct index for structure (temp 4-component vector of float)
0:15 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:15 Constant:
0:15 1 (const int)
0:? 'i_fragCoord' (in 4-component vector of float FragCoord)
0:15 move second child to first child (temp 2-component vector of int)
0:15 i2: direct index for structure (temp 2-component vector of int)
0:15 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:15 Constant:
0:15 2 (const int)
0:15 i2: direct index for structure (temp 2-component vector of int)
0:15 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:15 Constant:
0:15 1 (const int)
0:16 Sequence 0:16 Sequence
0:16 move second child to first child (temp float) 0:16 move second child to first child (temp float)
0:16 'ret1' (temp float) 0:16 'ret1' (temp float)
0:16 Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float) 0:16 Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float)
0:16 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:16 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:17 Sequence 0:17 Sequence
0:17 move second child to first child (temp float) 0:17 move second child to first child (temp float)
0:17 'ret2' (temp float) 0:17 'ret2' (temp float)
0:17 Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float) 0:17 Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float)
0:17 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:17 Comma (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:17 Sequence
0:17 move second child to first child (temp 2-component vector of float)
0:17 v: direct index for structure (temp 2-component vector of float)
0:17 'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:17 Constant:
0:17 0 (const int)
0:17 v: direct index for structure (temp 2-component vector of float)
0:17 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:17 Constant:
0:17 0 (const int)
0:17 move second child to first child (temp 4-component vector of float)
0:17 fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
0:17 'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:17 Constant:
0:17 1 (const int)
0:? 'i_fragCoord' (in 4-component vector of float FragCoord)
0:17 move second child to first child (temp 2-component vector of int)
0:17 i2: direct index for structure (temp 2-component vector of int)
0:17 'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:17 Constant:
0:17 2 (const int)
0:17 i2: direct index for structure (temp 2-component vector of int)
0:17 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:17 Constant:
0:17 1 (const int)
0:17 'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:19 Sequence 0:19 Sequence
0:19 move second child to first child (temp 4-component vector of float) 0:19 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:19 vector-scale (temp 4-component vector of float) 0:19 vector-scale (temp 4-component vector of float)
0:19 vector-scale (temp 4-component vector of float) 0:19 vector-scale (temp 4-component vector of float)
0:19 fragCoord: direct index for structure (temp 4-component vector of float FragCoord) 0:19 fragCoord: direct index for structure (temp 4-component vector of float)
0:19 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:19 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:19 Constant: 0:19 Constant:
0:19 1 (const int) 0:19 1 (const int)
0:19 'ret1' (temp float) 0:19 'ret1' (temp float)
@ -53,7 +101,8 @@ gl_FragCoord origin is upper left
0:19 Branch: Return 0:19 Branch: Return
0:? Linker Objects 0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:? 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:? 'i_fragCoord' (in 4-component vector of float FragCoord)
Linked fragment stage: Linked fragment stage:
@ -64,48 +113,96 @@ gl_FragCoord origin is upper left
0:? Sequence 0:? Sequence
0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; (temp float) 0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; (temp float)
0:8 Function Parameters: 0:8 Function Parameters:
0:8 'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:8 'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:? Sequence 0:? Sequence
0:9 Branch: Return with expression 0:9 Branch: Return with expression
0:9 add (temp float) 0:9 add (temp float)
0:9 direct index (temp float) 0:9 direct index (temp float)
0:9 v: direct index for structure (temp 2-component vector of float) 0:9 v: direct index for structure (temp 2-component vector of float)
0:9 'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:9 'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:9 Constant: 0:9 Constant:
0:9 0 (const int) 0:9 0 (const int)
0:9 Constant: 0:9 Constant:
0:9 1 (const int) 0:9 1 (const int)
0:9 direct index (temp float) 0:9 direct index (temp float)
0:9 fragCoord: direct index for structure (temp 4-component vector of float FragCoord) 0:9 fragCoord: direct index for structure (temp 4-component vector of float)
0:9 'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:9 'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:9 Constant: 0:9 Constant:
0:9 1 (const int) 0:9 1 (const int)
0:9 Constant: 0:9 Constant:
0:9 0 (const int) 0:9 0 (const int)
0:13 Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float) 0:13 Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float)
0:13 Function Parameters: 0:13 Function Parameters:
0:13 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:13 'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:? Sequence 0:? Sequence
0:15 move second child to first child (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:15 Sequence
0:15 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:15 move second child to first child (temp 2-component vector of float)
0:15 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:15 v: direct index for structure (temp 2-component vector of float)
0:15 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:15 Constant:
0:15 0 (const int)
0:15 v: direct index for structure (temp 2-component vector of float)
0:15 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:15 Constant:
0:15 0 (const int)
0:15 move second child to first child (temp 4-component vector of float)
0:15 fragCoord: direct index for structure (temp 4-component vector of float)
0:15 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:15 Constant:
0:15 1 (const int)
0:? 'i_fragCoord' (in 4-component vector of float FragCoord)
0:15 move second child to first child (temp 2-component vector of int)
0:15 i2: direct index for structure (temp 2-component vector of int)
0:15 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:15 Constant:
0:15 2 (const int)
0:15 i2: direct index for structure (temp 2-component vector of int)
0:15 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:15 Constant:
0:15 1 (const int)
0:16 Sequence 0:16 Sequence
0:16 move second child to first child (temp float) 0:16 move second child to first child (temp float)
0:16 'ret1' (temp float) 0:16 'ret1' (temp float)
0:16 Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float) 0:16 Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float)
0:16 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:16 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:17 Sequence 0:17 Sequence
0:17 move second child to first child (temp float) 0:17 move second child to first child (temp float)
0:17 'ret2' (temp float) 0:17 'ret2' (temp float)
0:17 Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float) 0:17 Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float)
0:17 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:17 Comma (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:17 Sequence
0:17 move second child to first child (temp 2-component vector of float)
0:17 v: direct index for structure (temp 2-component vector of float)
0:17 'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:17 Constant:
0:17 0 (const int)
0:17 v: direct index for structure (temp 2-component vector of float)
0:17 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:17 Constant:
0:17 0 (const int)
0:17 move second child to first child (temp 4-component vector of float)
0:17 fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
0:17 'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:17 Constant:
0:17 1 (const int)
0:? 'i_fragCoord' (in 4-component vector of float FragCoord)
0:17 move second child to first child (temp 2-component vector of int)
0:17 i2: direct index for structure (temp 2-component vector of int)
0:17 'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:17 Constant:
0:17 2 (const int)
0:17 i2: direct index for structure (temp 2-component vector of int)
0:17 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:17 Constant:
0:17 1 (const int)
0:17 'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
0:19 Sequence 0:19 Sequence
0:19 move second child to first child (temp 4-component vector of float) 0:19 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:19 vector-scale (temp 4-component vector of float) 0:19 vector-scale (temp 4-component vector of float)
0:19 vector-scale (temp 4-component vector of float) 0:19 vector-scale (temp 4-component vector of float)
0:19 fragCoord: direct index for structure (temp 4-component vector of float FragCoord) 0:19 fragCoord: direct index for structure (temp 4-component vector of float)
0:19 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:19 'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:19 Constant: 0:19 Constant:
0:19 1 (const int) 0:19 1 (const int)
0:19 'ret1' (temp float) 0:19 'ret1' (temp float)
@ -113,16 +210,17 @@ gl_FragCoord origin is upper left
0:19 Branch: Return 0:19 Branch: Return
0:? Linker Objects 0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2}) 0:? 'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
0:? 'i_fragCoord' (in 4-component vector of float FragCoord)
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 52 // Id's are bound by 78
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 32 43 EntryPoint Fragment 4 "PixelShaderFunction" 33 40 70
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction" Name 4 "PixelShaderFunction"
Name 11 "InParam" Name 11 "InParam"
@ -132,15 +230,25 @@ gl_FragCoord origin is upper left
Name 15 "fun(struct-InParam-vf2-vf4-vi21;" Name 15 "fun(struct-InParam-vf2-vf4-vi21;"
Name 14 "p" Name 14 "p"
Name 30 "local" Name 30 "local"
Name 32 "i" Name 31 "InParam"
Name 34 "ret1" MemberName 31(InParam) 0 "v"
Name 35 "param" MemberName 31(InParam) 1 "i2"
Name 38 "ret2" Name 33 "i"
Name 39 "param" Name 40 "i_fragCoord"
Name 43 "@entryPointOutput" Name 50 "ret1"
MemberDecorate 11(InParam) 1 BuiltIn FragCoord Name 51 "param"
Decorate 32(i) Location 0 Name 54 "ret2"
Decorate 43(@entryPointOutput) Location 0 Name 55 "InParam"
MemberName 55(InParam) 0 "v"
MemberName 55(InParam) 1 "fragCoord"
MemberName 55(InParam) 2 "i2"
Name 57 "aggShadow"
Name 66 "param"
Name 70 "@entryPointOutput"
Decorate 33(i) Location 0
Decorate 40(i_fragCoord) BuiltIn FragCoord
MemberDecorate 55(InParam) 1 BuiltIn FragCoord
Decorate 70(@entryPointOutput) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -157,35 +265,66 @@ gl_FragCoord origin is upper left
20: TypePointer Function 6(float) 20: TypePointer Function 6(float)
23: 9(int) Constant 1 23: 9(int) Constant 1
24: 18(int) Constant 0 24: 18(int) Constant 0
31: TypePointer Input 11(InParam) 31(InParam): TypeStruct 7(fvec2) 10(ivec2)
32(i): 31(ptr) Variable Input 32: TypePointer Input 31(InParam)
42: TypePointer Output 8(fvec4) 33(i): 32(ptr) Variable Input
43(@entryPointOutput): 42(ptr) Variable Output 34: TypePointer Input 7(fvec2)
44: TypePointer Function 8(fvec4) 37: TypePointer Function 7(fvec2)
39: TypePointer Input 8(fvec4)
40(i_fragCoord): 39(ptr) Variable Input
42: TypePointer Function 8(fvec4)
44: 9(int) Constant 2
45: TypePointer Input 10(ivec2)
48: TypePointer Function 10(ivec2)
55(InParam): TypeStruct 7(fvec2) 8(fvec4) 10(ivec2)
56: TypePointer Function 55(InParam)
69: TypePointer Output 8(fvec4)
70(@entryPointOutput): 69(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3 4(PixelShaderFunction): 2 Function None 3
5: Label 5: Label
30(local): 12(ptr) Variable Function 30(local): 12(ptr) Variable Function
34(ret1): 20(ptr) Variable Function 50(ret1): 20(ptr) Variable Function
35(param): 12(ptr) Variable Function 51(param): 12(ptr) Variable Function
38(ret2): 20(ptr) Variable Function 54(ret2): 20(ptr) Variable Function
39(param): 12(ptr) Variable Function 57(aggShadow): 56(ptr) Variable Function
33: 11(InParam) Load 32(i) 66(param): 56(ptr) Variable Function
Store 30(local) 33 35: 34(ptr) AccessChain 33(i) 17
36: 11(InParam) Load 30(local) 36: 7(fvec2) Load 35
Store 35(param) 36 38: 37(ptr) AccessChain 30(local) 17
37: 6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 35(param) Store 38 36
Store 34(ret1) 37 41: 8(fvec4) Load 40(i_fragCoord)
40: 11(InParam) Load 32(i) 43: 42(ptr) AccessChain 30(local) 23
Store 39(param) 40 Store 43 41
41: 6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 39(param) 46: 45(ptr) AccessChain 33(i) 23
Store 38(ret2) 41 47: 10(ivec2) Load 46
45: 44(ptr) AccessChain 30(local) 23 49: 48(ptr) AccessChain 30(local) 44
46: 8(fvec4) Load 45 Store 49 47
47: 6(float) Load 34(ret1) 52: 11(InParam) Load 30(local)
48: 8(fvec4) VectorTimesScalar 46 47 Store 51(param) 52
49: 6(float) Load 38(ret2) 53: 6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 51(param)
50: 8(fvec4) VectorTimesScalar 48 49 Store 50(ret1) 53
Store 43(@entryPointOutput) 50 58: 34(ptr) AccessChain 33(i) 17
59: 7(fvec2) Load 58
60: 37(ptr) AccessChain 57(aggShadow) 17
Store 60 59
61: 8(fvec4) Load 40(i_fragCoord)
62: 42(ptr) AccessChain 57(aggShadow) 23
Store 62 61
63: 45(ptr) AccessChain 33(i) 23
64: 10(ivec2) Load 63
65: 48(ptr) AccessChain 57(aggShadow) 44
Store 65 64
67: 55(InParam) Load 57(aggShadow)
Store 66(param) 67
68: 6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 66(param)
Store 54(ret2) 68
71: 42(ptr) AccessChain 30(local) 23
72: 8(fvec4) Load 71
73: 6(float) Load 50(ret1)
74: 8(fvec4) VectorTimesScalar 72 73
75: 6(float) Load 54(ret2)
76: 8(fvec4) VectorTimesScalar 74 75
Store 70(@entryPointOutput) 76
Return Return
FunctionEnd FunctionEnd
15(fun(struct-InParam-vf2-vf4-vi21;): 6(float) Function None 13 15(fun(struct-InParam-vf2-vf4-vi21;): 6(float) Function None 13

View File

@ -102,7 +102,7 @@ Shader version: 450
0:? 'g_tTexcdf4' (uniform textureCube) 0:? 'g_tTexcdf4' (uniform textureCube)
0:? 'g_tTexcdi4' (uniform itextureCube) 0:? 'g_tTexcdi4' (uniform itextureCube)
0:? 'g_tTexcdu4' (uniform utextureCube) 0:? 'g_tTexcdu4' (uniform utextureCube)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
Linked vertex stage: Linked vertex stage:
@ -211,17 +211,17 @@ Shader version: 450
0:? 'g_tTexcdf4' (uniform textureCube) 0:? 'g_tTexcdf4' (uniform textureCube)
0:? 'g_tTexcdi4' (uniform itextureCube) 0:? 'g_tTexcdi4' (uniform itextureCube)
0:? 'g_tTexcdu4' (uniform utextureCube) 0:? 'g_tTexcdu4' (uniform utextureCube)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 121 // Id's are bound by 124
Capability Shader Capability Shader
Capability Sampled1D Capability Sampled1D
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 97 EntryPoint Vertex 4 "main" 97 123
Name 4 "main" Name 4 "main"
Name 9 "txval20" Name 9 "txval20"
Name 12 "g_tTex2df4" Name 12 "g_tTex2df4"
@ -248,6 +248,9 @@ Shader version: 450
Name 114 "g_tTex3df4" Name 114 "g_tTex3df4"
Name 117 "g_tTex3di4" Name 117 "g_tTex3di4"
Name 120 "g_tTex3du4" Name 120 "g_tTex3du4"
Name 121 "PerVertex_out"
MemberName 121(PerVertex_out) 0 "Pos"
Name 123 "PerVertex_out"
Decorate 12(g_tTex2df4) DescriptorSet 0 Decorate 12(g_tTex2df4) DescriptorSet 0
Decorate 16(g_sSamp) DescriptorSet 0 Decorate 16(g_sSamp) DescriptorSet 0
Decorate 16(g_sSamp) Binding 0 Decorate 16(g_sSamp) Binding 0
@ -267,6 +270,8 @@ Shader version: 450
Decorate 114(g_tTex3df4) DescriptorSet 0 Decorate 114(g_tTex3df4) DescriptorSet 0
Decorate 117(g_tTex3di4) DescriptorSet 0 Decorate 117(g_tTex3di4) DescriptorSet 0
Decorate 120(g_tTex3du4) DescriptorSet 0 Decorate 120(g_tTex3du4) DescriptorSet 0
MemberDecorate 121(PerVertex_out) 0 BuiltIn Position
Decorate 121(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -349,6 +354,9 @@ Shader version: 450
118: TypeImage 41(int) 3D sampled format:Unknown 118: TypeImage 41(int) 3D sampled format:Unknown
119: TypePointer UniformConstant 118 119: TypePointer UniformConstant 118
120(g_tTex3du4): 119(ptr) Variable UniformConstant 120(g_tTex3du4): 119(ptr) Variable UniformConstant
121(PerVertex_out): TypeStruct 7(fvec4)
122: TypePointer Output 121(PerVertex_out)
123(PerVertex_out): 122(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(txval20): 8(ptr) Variable Function 9(txval20): 8(ptr) Variable Function

View File

@ -48,7 +48,7 @@ Shader version: 450
0:? Linker Objects 0:? Linker Objects
0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) 0:? 'g_sSamp' (layout(binding=0 ) uniform sampler)
0:? 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) 0:? 'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
Linked vertex stage: Linked vertex stage:
@ -103,18 +103,18 @@ Shader version: 450
0:? Linker Objects 0:? Linker Objects
0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) 0:? 'g_sSamp' (layout(binding=0 ) uniform sampler)
0:? 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) 0:? 'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 43 // Id's are bound by 46
Capability Shader Capability Shader
Capability Sampled1D Capability Sampled1D
Capability ImageQuery Capability ImageQuery
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 36 EntryPoint Vertex 4 "main" 36 45
Name 4 "main" Name 4 "main"
Name 8 "sizeQueryTemp" Name 8 "sizeQueryTemp"
Name 12 "g_tTex1df4" Name 12 "g_tTex1df4"
@ -126,11 +126,16 @@ Shader version: 450
Name 29 "vsout" Name 29 "vsout"
Name 36 "Pos" Name 36 "Pos"
Name 42 "g_sSamp" Name 42 "g_sSamp"
Name 43 "PerVertex_out"
MemberName 43(PerVertex_out) 0 "Pos"
Name 45 "PerVertex_out"
Decorate 12(g_tTex1df4) DescriptorSet 0 Decorate 12(g_tTex1df4) DescriptorSet 0
Decorate 12(g_tTex1df4) Binding 0 Decorate 12(g_tTex1df4) Binding 0
Decorate 36(Pos) BuiltIn Position Decorate 36(Pos) BuiltIn Position
Decorate 42(g_sSamp) DescriptorSet 0 Decorate 42(g_sSamp) DescriptorSet 0
Decorate 42(g_sSamp) Binding 0 Decorate 42(g_sSamp) Binding 0
MemberDecorate 43(PerVertex_out) 0 BuiltIn Position
Decorate 43(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
@ -153,6 +158,9 @@ Shader version: 450
40: TypeSampler 40: TypeSampler
41: TypePointer UniformConstant 40 41: TypePointer UniformConstant 40
42(g_sSamp): 41(ptr) Variable UniformConstant 42(g_sSamp): 41(ptr) Variable UniformConstant
43(PerVertex_out): TypeStruct 26(fvec4)
44: TypePointer Output 43(PerVertex_out)
45(PerVertex_out): 44(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
8(sizeQueryTemp): 7(ptr) Variable Function 8(sizeQueryTemp): 7(ptr) Variable Function

View File

@ -218,7 +218,7 @@ Shader version: 450
0:? 'g_tTexcdi4a' (uniform itextureCubeArray) 0:? 'g_tTexcdi4a' (uniform itextureCubeArray)
0:? 'g_tTexcdu4a' (uniform utextureCubeArray) 0:? 'g_tTexcdu4a' (uniform utextureCubeArray)
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) 0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
Linked vertex stage: Linked vertex stage:
@ -443,18 +443,18 @@ Shader version: 450
0:? 'g_tTexcdi4a' (uniform itextureCubeArray) 0:? 'g_tTexcdi4a' (uniform itextureCubeArray)
0:? 'g_tTexcdu4a' (uniform utextureCubeArray) 0:? 'g_tTexcdu4a' (uniform utextureCubeArray)
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) 0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 166 // Id's are bound by 169
Capability Shader Capability Shader
Capability Sampled1D Capability Sampled1D
Capability SampledCubeArray Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 123 EntryPoint Vertex 4 "main" 123 168
Name 4 "main" Name 4 "main"
Name 9 "g_tTex1df4" Name 9 "g_tTex1df4"
Name 15 "$Global" Name 15 "$Global"
@ -492,6 +492,9 @@ Shader version: 450
Name 159 "g_tTexcdf4a" Name 159 "g_tTexcdf4a"
Name 162 "g_tTexcdi4a" Name 162 "g_tTexcdi4a"
Name 165 "g_tTexcdu4a" Name 165 "g_tTexcdu4a"
Name 166 "PerVertex_out"
MemberName 166(PerVertex_out) 0 "Pos"
Name 168 "PerVertex_out"
Decorate 9(g_tTex1df4) DescriptorSet 0 Decorate 9(g_tTex1df4) DescriptorSet 0
Decorate 9(g_tTex1df4) Binding 0 Decorate 9(g_tTex1df4) Binding 0
MemberDecorate 15($Global) 0 Offset 0 MemberDecorate 15($Global) 0 Offset 0
@ -527,6 +530,8 @@ Shader version: 450
Decorate 159(g_tTexcdf4a) DescriptorSet 0 Decorate 159(g_tTexcdf4a) DescriptorSet 0
Decorate 162(g_tTexcdi4a) DescriptorSet 0 Decorate 162(g_tTexcdi4a) DescriptorSet 0
Decorate 165(g_tTexcdu4a) DescriptorSet 0 Decorate 165(g_tTexcdu4a) DescriptorSet 0
MemberDecorate 166(PerVertex_out) 0 BuiltIn Position
Decorate 166(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -624,6 +629,9 @@ Shader version: 450
163: TypeImage 19(int) Cube array sampled format:Unknown 163: TypeImage 19(int) Cube array sampled format:Unknown
164: TypePointer UniformConstant 163 164: TypePointer UniformConstant 163
165(g_tTexcdu4a): 164(ptr) Variable UniformConstant 165(g_tTexcdu4a): 164(ptr) Variable UniformConstant
166(PerVertex_out): TypeStruct 27(fvec4)
167: TypePointer Output 166(PerVertex_out)
168(PerVertex_out): 167(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
116(vsout): 115(ptr) Variable Function 116(vsout): 115(ptr) Variable Function

View File

@ -239,7 +239,7 @@ Shader version: 450
0:? 'g_tTexcdf4' (uniform textureCube) 0:? 'g_tTexcdf4' (uniform textureCube)
0:? 'g_tTexcdi4' (uniform itextureCube) 0:? 'g_tTexcdi4' (uniform itextureCube)
0:? 'g_tTexcdu4' (uniform utextureCube) 0:? 'g_tTexcdu4' (uniform utextureCube)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
Linked vertex stage: Linked vertex stage:
@ -485,17 +485,17 @@ Shader version: 450
0:? 'g_tTexcdf4' (uniform textureCube) 0:? 'g_tTexcdf4' (uniform textureCube)
0:? 'g_tTexcdi4' (uniform itextureCube) 0:? 'g_tTexcdi4' (uniform itextureCube)
0:? 'g_tTexcdu4' (uniform utextureCube) 0:? 'g_tTexcdu4' (uniform utextureCube)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 161 // Id's are bound by 164
Capability Shader Capability Shader
Capability Sampled1D Capability Sampled1D
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 156 EntryPoint Vertex 4 "main" 156 163
Name 4 "main" Name 4 "main"
Name 9 "txval10" Name 9 "txval10"
Name 12 "g_tTex1df4" Name 12 "g_tTex1df4"
@ -527,6 +527,9 @@ Shader version: 450
Name 150 "vsout" Name 150 "vsout"
Name 156 "Pos" Name 156 "Pos"
Name 160 "g_tTex1df4a" Name 160 "g_tTex1df4a"
Name 161 "PerVertex_out"
MemberName 161(PerVertex_out) 0 "Pos"
Name 163 "PerVertex_out"
Decorate 12(g_tTex1df4) DescriptorSet 0 Decorate 12(g_tTex1df4) DescriptorSet 0
Decorate 12(g_tTex1df4) Binding 0 Decorate 12(g_tTex1df4) Binding 0
Decorate 16(g_sSamp) DescriptorSet 0 Decorate 16(g_sSamp) DescriptorSet 0
@ -545,6 +548,8 @@ Shader version: 450
Decorate 156(Pos) BuiltIn Position Decorate 156(Pos) BuiltIn Position
Decorate 160(g_tTex1df4a) DescriptorSet 0 Decorate 160(g_tTex1df4a) DescriptorSet 0
Decorate 160(g_tTex1df4a) Binding 1 Decorate 160(g_tTex1df4a) Binding 1
MemberDecorate 161(PerVertex_out) 0 BuiltIn Position
Decorate 161(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -637,6 +642,9 @@ Shader version: 450
155: TypePointer Output 7(fvec4) 155: TypePointer Output 7(fvec4)
156(Pos): 155(ptr) Variable Output 156(Pos): 155(ptr) Variable Output
160(g_tTex1df4a): 11(ptr) Variable UniformConstant 160(g_tTex1df4a): 11(ptr) Variable UniformConstant
161(PerVertex_out): TypeStruct 7(fvec4)
162: TypePointer Output 161(PerVertex_out)
163(PerVertex_out): 162(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(txval10): 8(ptr) Variable Function 9(txval10): 8(ptr) Variable Function

View File

@ -185,7 +185,7 @@ Shader version: 450
0:? 'g_tTexcdf4' (uniform textureCube) 0:? 'g_tTexcdf4' (uniform textureCube)
0:? 'g_tTexcdi4' (uniform itextureCube) 0:? 'g_tTexcdi4' (uniform itextureCube)
0:? 'g_tTexcdu4' (uniform utextureCube) 0:? 'g_tTexcdu4' (uniform utextureCube)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
Linked vertex stage: Linked vertex stage:
@ -377,17 +377,17 @@ Shader version: 450
0:? 'g_tTexcdf4' (uniform textureCube) 0:? 'g_tTexcdf4' (uniform textureCube)
0:? 'g_tTexcdi4' (uniform itextureCube) 0:? 'g_tTexcdi4' (uniform itextureCube)
0:? 'g_tTexcdu4' (uniform utextureCube) 0:? 'g_tTexcdu4' (uniform utextureCube)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 157 // Id's are bound by 160
Capability Shader Capability Shader
Capability Sampled1D Capability Sampled1D
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 152 EntryPoint Vertex 4 "main" 152 159
Name 4 "main" Name 4 "main"
Name 9 "txval10" Name 9 "txval10"
Name 12 "g_tTex1df4" Name 12 "g_tTex1df4"
@ -419,6 +419,9 @@ Shader version: 450
Name 146 "vsout" Name 146 "vsout"
Name 152 "Pos" Name 152 "Pos"
Name 156 "g_tTex1df4a" Name 156 "g_tTex1df4a"
Name 157 "PerVertex_out"
MemberName 157(PerVertex_out) 0 "Pos"
Name 159 "PerVertex_out"
Decorate 12(g_tTex1df4) DescriptorSet 0 Decorate 12(g_tTex1df4) DescriptorSet 0
Decorate 12(g_tTex1df4) Binding 0 Decorate 12(g_tTex1df4) Binding 0
Decorate 16(g_sSamp) DescriptorSet 0 Decorate 16(g_sSamp) DescriptorSet 0
@ -437,6 +440,8 @@ Shader version: 450
Decorate 152(Pos) BuiltIn Position Decorate 152(Pos) BuiltIn Position
Decorate 156(g_tTex1df4a) DescriptorSet 0 Decorate 156(g_tTex1df4a) DescriptorSet 0
Decorate 156(g_tTex1df4a) Binding 1 Decorate 156(g_tTex1df4a) Binding 1
MemberDecorate 157(PerVertex_out) 0 BuiltIn Position
Decorate 157(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -525,6 +530,9 @@ Shader version: 450
151: TypePointer Output 7(fvec4) 151: TypePointer Output 7(fvec4)
152(Pos): 151(ptr) Variable Output 152(Pos): 151(ptr) Variable Output
156(g_tTex1df4a): 11(ptr) Variable UniformConstant 156(g_tTex1df4a): 11(ptr) Variable UniformConstant
157(PerVertex_out): TypeStruct 7(fvec4)
158: TypePointer Output 157(PerVertex_out)
159(PerVertex_out): 158(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(txval10): 8(ptr) Variable Function 9(txval10): 8(ptr) Variable Function

View File

@ -9,7 +9,7 @@ gl_FragCoord origin is upper left
0:34 Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float) 0:34 Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
0:34 Function Parameters: 0:34 Function Parameters:
0:34 'input' (layout(location=0 ) in 4-component vector of float) 0:34 'input' (layout(location=0 ) in 4-component vector of float)
0:34 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4}) 0:34 's' (in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:? Sequence 0:? Sequence
0:39 Compare Equal (temp bool) 0:39 Compare Equal (temp bool)
0:39 's3' (temp structure{temp 3-component vector of bool b3}) 0:39 's3' (temp structure{temp 3-component vector of bool b3})
@ -20,9 +20,9 @@ gl_FragCoord origin is upper left
0:40 Constant: 0:40 Constant:
0:40 0 (const int) 0:40 0 (const int)
0:40 ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float) 0:40 ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float)
0:40 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4}) 0:40 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:40 Constant: 0:40 Constant:
0:40 7 (const int) 0:40 6 (const int)
0:42 Sequence 0:42 Sequence
0:42 move second child to first child (temp 4-component vector of float) 0:42 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
@ -31,9 +31,10 @@ gl_FragCoord origin is upper left
0:? Linker Objects 0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input' (layout(location=0 ) in 4-component vector of float) 0:? 'input' (layout(location=0 ) in 4-component vector of float)
0:? 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4}) 0:? 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:? 's2' (global structure{temp 4-component vector of float i}) 0:? 's2' (global structure{temp 4-component vector of float i})
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) 0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
0:? 's_ff1' (in bool Face)
Linked fragment stage: Linked fragment stage:
@ -45,7 +46,7 @@ gl_FragCoord origin is upper left
0:34 Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float) 0:34 Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
0:34 Function Parameters: 0:34 Function Parameters:
0:34 'input' (layout(location=0 ) in 4-component vector of float) 0:34 'input' (layout(location=0 ) in 4-component vector of float)
0:34 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4}) 0:34 's' (in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:? Sequence 0:? Sequence
0:39 Compare Equal (temp bool) 0:39 Compare Equal (temp bool)
0:39 's3' (temp structure{temp 3-component vector of bool b3}) 0:39 's3' (temp structure{temp 3-component vector of bool b3})
@ -56,9 +57,9 @@ gl_FragCoord origin is upper left
0:40 Constant: 0:40 Constant:
0:40 0 (const int) 0:40 0 (const int)
0:40 ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float) 0:40 ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float)
0:40 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4}) 0:40 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:40 Constant: 0:40 Constant:
0:40 7 (const int) 0:40 6 (const int)
0:42 Sequence 0:42 Sequence
0:42 move second child to first child (temp 4-component vector of float) 0:42 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
@ -67,18 +68,19 @@ gl_FragCoord origin is upper left
0:? Linker Objects 0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input' (layout(location=0 ) in 4-component vector of float) 0:? 'input' (layout(location=0 ) in 4-component vector of float)
0:? 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4}) 0:? 's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:? 's2' (global structure{temp 4-component vector of float i}) 0:? 's2' (global structure{temp 4-component vector of float i})
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) 0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
0:? 's_ff1' (in bool Face)
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 44 // Id's are bound by 46
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 27 35 36 EntryPoint Fragment 4 "PixelShaderFunction" 27 35 36 45
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction" Name 4 "PixelShaderFunction"
Name 8 "FS" Name 8 "FS"
@ -92,10 +94,9 @@ gl_FragCoord origin is upper left
MemberName 25(IN_S) 1 "b" MemberName 25(IN_S) 1 "b"
MemberName 25(IN_S) 2 "c" MemberName 25(IN_S) 2 "c"
MemberName 25(IN_S) 3 "d" MemberName 25(IN_S) 3 "d"
MemberName 25(IN_S) 4 "ff1" MemberName 25(IN_S) 4 "ff2"
MemberName 25(IN_S) 5 "ff2" MemberName 25(IN_S) 5 "ff3"
MemberName 25(IN_S) 6 "ff3" MemberName 25(IN_S) 6 "ff4"
MemberName 25(IN_S) 7 "ff4"
Name 27 "s" Name 27 "s"
Name 35 "@entryPointOutput" Name 35 "@entryPointOutput"
Name 36 "input" Name 36 "input"
@ -109,7 +110,7 @@ gl_FragCoord origin is upper left
MemberName 41($Global) 1 "ff5" MemberName 41($Global) 1 "ff5"
MemberName 41($Global) 2 "ff6" MemberName 41($Global) 2 "ff6"
Name 43 "" Name 43 ""
MemberDecorate 25(IN_S) 4 BuiltIn FrontFacing Name 45 "s_ff1"
Decorate 27(s) Location 1 Decorate 27(s) Location 1
Decorate 35(@entryPointOutput) Location 0 Decorate 35(@entryPointOutput) Location 0
Decorate 36(input) Location 0 Decorate 36(input) Location 0
@ -122,6 +123,7 @@ gl_FragCoord origin is upper left
MemberDecorate 41($Global) 2 Offset 1636 MemberDecorate 41($Global) 2 Offset 1636
Decorate 41($Global) Block Decorate 41($Global) Block
Decorate 43 DescriptorSet 0 Decorate 43 DescriptorSet 0
Decorate 45(s_ff1) BuiltIn FrontFacing
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeBool 6: TypeBool
@ -136,10 +138,10 @@ gl_FragCoord origin is upper left
22: TypeInt 32 1 22: TypeInt 32 1
23: 22(int) Constant 0 23: 22(int) Constant 0
24: TypeVector 17(float) 2 24: TypeVector 17(float) 2
25(IN_S): TypeStruct 18(fvec4) 6(bool) 17(float) 24(fvec2) 6(bool) 6(bool) 6(bool) 18(fvec4) 25(IN_S): TypeStruct 18(fvec4) 6(bool) 17(float) 24(fvec2) 6(bool) 6(bool) 18(fvec4)
26: TypePointer Input 25(IN_S) 26: TypePointer Input 25(IN_S)
27(s): 26(ptr) Variable Input 27(s): 26(ptr) Variable Input
28: 22(int) Constant 7 28: 22(int) Constant 6
29: TypePointer Input 18(fvec4) 29: TypePointer Input 18(fvec4)
32: TypePointer Private 18(fvec4) 32: TypePointer Private 18(fvec4)
34: TypePointer Output 18(fvec4) 34: TypePointer Output 18(fvec4)
@ -150,6 +152,8 @@ gl_FragCoord origin is upper left
41($Global): TypeStruct 40(myS) 17(float) 17(float) 41($Global): TypeStruct 40(myS) 17(float) 17(float)
42: TypePointer Uniform 41($Global) 42: TypePointer Uniform 41($Global)
43: 42(ptr) Variable Uniform 43: 42(ptr) Variable Uniform
44: TypePointer Input 6(bool)
45(s_ff1): 44(ptr) Variable Input
4(PixelShaderFunction): 2 Function None 3 4(PixelShaderFunction): 2 Function None 3
5: Label 5: Label
10(s3): 9(ptr) Variable Function 10(s3): 9(ptr) Variable Function

View File

@ -59,7 +59,7 @@ Shader version: 450
0:? 'Pos_in' (in 4-component vector of float Position) 0:? 'Pos_in' (in 4-component vector of float Position)
0:? 'x1_in' (layout(location=1 ) in int) 0:? 'x1_in' (layout(location=1 ) in int)
0:? 'Pos_loose' (in 4-component vector of float Position) 0:? 'Pos_loose' (in 4-component vector of float Position)
0:? 'Pos_out' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos_out})
Linked vertex stage: Linked vertex stage:
@ -125,16 +125,16 @@ Shader version: 450
0:? 'Pos_in' (in 4-component vector of float Position) 0:? 'Pos_in' (in 4-component vector of float Position)
0:? 'x1_in' (layout(location=1 ) in int) 0:? 'x1_in' (layout(location=1 ) in int)
0:? 'Pos_loose' (in 4-component vector of float Position) 0:? 'Pos_loose' (in 4-component vector of float Position)
0:? 'Pos_out' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos_out})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 46 // Id's are bound by 49
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 14 20 22 28 33 39 EntryPoint Vertex 4 "main" 14 20 22 28 33 39 48
Name 4 "main" Name 4 "main"
Name 9 "VS_OUTPUT" Name 9 "VS_OUTPUT"
MemberName 9(VS_OUTPUT) 0 "x0_out" MemberName 9(VS_OUTPUT) 0 "x0_out"
@ -150,12 +150,17 @@ Shader version: 450
MemberName 31(VS_OUTPUT) 1 "x1_out" MemberName 31(VS_OUTPUT) 1 "x1_out"
Name 33 "@entryPointOutput" Name 33 "@entryPointOutput"
Name 39 "Pos_out" Name 39 "Pos_out"
Name 46 "PerVertex_out"
MemberName 46(PerVertex_out) 0 "Pos_out"
Name 48 "PerVertex_out"
Decorate 14(x0_in) Location 0 Decorate 14(x0_in) Location 0
Decorate 20(Pos_in) BuiltIn Position Decorate 20(Pos_in) BuiltIn Position
Decorate 22(Pos_loose) BuiltIn Position Decorate 22(Pos_loose) BuiltIn Position
Decorate 28(x1_in) Location 1 Decorate 28(x1_in) Location 1
Decorate 33(@entryPointOutput) Location 0 Decorate 33(@entryPointOutput) Location 0
Decorate 39(Pos_out) BuiltIn Position Decorate 39(Pos_out) BuiltIn Position
MemberDecorate 46(PerVertex_out) 0 BuiltIn Position
Decorate 46(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 1 6: TypeInt 32 1
@ -180,6 +185,9 @@ Shader version: 450
36: TypePointer Output 6(int) 36: TypePointer Output 6(int)
38: TypePointer Output 8(fvec4) 38: TypePointer Output 8(fvec4)
39(Pos_out): 38(ptr) Variable Output 39(Pos_out): 38(ptr) Variable Output
46(PerVertex_out): TypeStruct 8(fvec4)
47: TypePointer Output 46(PerVertex_out)
48(PerVertex_out): 47(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
11(vsout): 10(ptr) Variable Function 11(vsout): 10(ptr) Variable Function

View File

@ -64,7 +64,7 @@ output primitive = triangle_strip
0:? Linker Objects 0:? Linker Objects
0:? 'v' (layout(location=0 ) in 1-element array of uint) 0:? 'v' (layout(location=0 ) in 1-element array of uint)
0:? 'OutputStream' (layout(location=0 ) out structure{temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID}) 0:? 'OutputStream' (layout(location=0 ) out structure{temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
0:? 'OutputStream.Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position OutputStream_Pos})
Linked geometry stage: Linked geometry stage:
@ -135,16 +135,16 @@ output primitive = triangle_strip
0:? Linker Objects 0:? Linker Objects
0:? 'v' (layout(location=0 ) in 1-element array of uint) 0:? 'v' (layout(location=0 ) in 1-element array of uint)
0:? 'OutputStream' (layout(location=0 ) out structure{temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID}) 0:? 'OutputStream' (layout(location=0 ) out structure{temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
0:? 'OutputStream.Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position OutputStream_Pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 89 // Id's are bound by 90
Capability Geometry Capability Geometry
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 83 86 88 EntryPoint Geometry 4 "main" 83 86 89
ExecutionMode 4 InputPoints ExecutionMode 4 InputPoints
ExecutionMode 4 Invocations 1 ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip ExecutionMode 4 OutputTriangleStrip
@ -175,11 +175,14 @@ output primitive = triangle_strip
MemberName 84(PSInput) 1 "TerrainPos" MemberName 84(PSInput) 1 "TerrainPos"
MemberName 84(PSInput) 2 "VertexID" MemberName 84(PSInput) 2 "VertexID"
Name 86 "OutputStream" Name 86 "OutputStream"
Name 88 "OutputStream.Pos" Name 87 "PerVertex_out"
MemberName 87(PerVertex_out) 0 "OutputStream_Pos"
Name 89 "PerVertex_out"
MemberDecorate 14(PSInput) 0 BuiltIn Position MemberDecorate 14(PSInput) 0 BuiltIn Position
Decorate 83(v) Location 0 Decorate 83(v) Location 0
Decorate 86(OutputStream) Location 0 Decorate 86(OutputStream) Location 0
Decorate 88(OutputStream.Pos) BuiltIn Position MemberDecorate 87(PerVertex_out) 0 BuiltIn Position
Decorate 87(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -221,8 +224,9 @@ output primitive = triangle_strip
84(PSInput): TypeStruct 8(fvec2) 9(fvec3) 10(int) 84(PSInput): TypeStruct 8(fvec2) 9(fvec3) 10(int)
85: TypePointer Output 84(PSInput) 85: TypePointer Output 84(PSInput)
86(OutputStream): 85(ptr) Variable Output 86(OutputStream): 85(ptr) Variable Output
87: TypePointer Output 7(fvec4) 87(PerVertex_out): TypeStruct 7(fvec4)
88(OutputStream.Pos): 87(ptr) Variable Output 88: TypePointer Output 87(PerVertex_out)
89(PerVertex_out): 88(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
13(Out): 12(ptr) Variable Function 13(Out): 12(ptr) Variable Function

View File

@ -92,7 +92,7 @@ Shader version: 450
0:? 'x0_in' (layout(location=0 ) in int) 0:? 'x0_in' (layout(location=0 ) in int)
0:? 'Pos_in' (in 4-component vector of float Position) 0:? 'Pos_in' (in 4-component vector of float Position)
0:? 'x1_in' (layout(location=1 ) in int) 0:? 'x1_in' (layout(location=1 ) in int)
0:? 'Pos_out' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos_out})
Linked vertex stage: Linked vertex stage:
@ -191,16 +191,16 @@ Shader version: 450
0:? 'x0_in' (layout(location=0 ) in int) 0:? 'x0_in' (layout(location=0 ) in int)
0:? 'Pos_in' (in 4-component vector of float Position) 0:? 'Pos_in' (in 4-component vector of float Position)
0:? 'x1_in' (layout(location=1 ) in int) 0:? 'x1_in' (layout(location=1 ) in int)
0:? 'Pos_out' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos_out})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 69 // Id's are bound by 72
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 28 33 37 56 62 EntryPoint Vertex 4 "main" 28 33 37 56 62 71
Name 4 "main" Name 4 "main"
Name 9 "VS_INPUT" Name 9 "VS_INPUT"
MemberName 9(VS_INPUT) 0 "x0_in" MemberName 9(VS_INPUT) 0 "x0_in"
@ -229,11 +229,16 @@ Shader version: 450
MemberName 54(VS_OUTPUT) 1 "x1_out" MemberName 54(VS_OUTPUT) 1 "x1_out"
Name 56 "@entryPointOutput" Name 56 "@entryPointOutput"
Name 62 "Pos_out" Name 62 "Pos_out"
Name 69 "PerVertex_out"
MemberName 69(PerVertex_out) 0 "Pos_out"
Name 71 "PerVertex_out"
Decorate 28(x0_in) Location 0 Decorate 28(x0_in) Location 0
Decorate 33(Pos_in) BuiltIn Position Decorate 33(Pos_in) BuiltIn Position
Decorate 37(x1_in) Location 1 Decorate 37(x1_in) Location 1
Decorate 56(@entryPointOutput) Location 0 Decorate 56(@entryPointOutput) Location 0
Decorate 62(Pos_out) BuiltIn Position Decorate 62(Pos_out) BuiltIn Position
MemberDecorate 69(PerVertex_out) 0 BuiltIn Position
Decorate 69(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 1 6: TypeInt 32 1
@ -262,6 +267,9 @@ Shader version: 450
59: TypePointer Output 6(int) 59: TypePointer Output 6(int)
61: TypePointer Output 8(fvec4) 61: TypePointer Output 8(fvec4)
62(Pos_out): 61(ptr) Variable Output 62(Pos_out): 61(ptr) Variable Output
69(PerVertex_out): TypeStruct 8(fvec4)
70: TypePointer Output 69(PerVertex_out)
71(PerVertex_out): 70(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
25(vsout): 12(ptr) Variable Function 25(vsout): 12(ptr) Variable Function

View File

@ -37,7 +37,7 @@ output primitive = triangle_strip
0:30 Sequence 0:30 Sequence
0:30 Sequence 0:30 Sequence
0:30 move second child to first child (temp 4-component vector of float) 0:30 move second child to first child (temp 4-component vector of float)
0:? 'ts.psIn.pos' (out 4-component vector of float Position) 0:? 'ts_psIn_pos' (out 4-component vector of float Position)
0:30 pos: direct index for structure (temp 4-component vector of float) 0:30 pos: direct index for structure (temp 4-component vector of float)
0:30 psIn: direct index for structure (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc}) 0:30 psIn: direct index for structure (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:30 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io}) 0:30 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
@ -73,8 +73,8 @@ output primitive = triangle_strip
0:? Linker Objects 0:? Linker Objects
0:? 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc}) 0:? 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:? 'ts' (layout(location=0 ) out structure{temp structure{temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io}) 0:? 'ts' (layout(location=0 ) out structure{temp structure{temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:? 'tin.pos' (in 3-element array of 4-component vector of float Position) 0:? 'PerVertex_in' (in 3-element array of block{in 4-component vector of float Position tin_pos})
0:? 'ts.psIn.pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position ts_psIn_pos})
Linked geometry stage: Linked geometry stage:
@ -118,7 +118,7 @@ output primitive = triangle_strip
0:30 Sequence 0:30 Sequence
0:30 Sequence 0:30 Sequence
0:30 move second child to first child (temp 4-component vector of float) 0:30 move second child to first child (temp 4-component vector of float)
0:? 'ts.psIn.pos' (out 4-component vector of float Position) 0:? 'ts_psIn_pos' (out 4-component vector of float Position)
0:30 pos: direct index for structure (temp 4-component vector of float) 0:30 pos: direct index for structure (temp 4-component vector of float)
0:30 psIn: direct index for structure (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc}) 0:30 psIn: direct index for structure (temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc})
0:30 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io}) 0:30 'o' (temp structure{temp structure{temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
@ -154,17 +154,17 @@ output primitive = triangle_strip
0:? Linker Objects 0:? Linker Objects
0:? 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc}) 0:? 'tin' (layout(location=0 ) in 3-element array of structure{temp 2-component vector of float tc})
0:? 'ts' (layout(location=0 ) out structure{temp structure{temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io}) 0:? 'ts' (layout(location=0 ) out structure{temp structure{temp 2-component vector of float tc} psIn, temp structure{temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:? 'tin.pos' (in 3-element array of 4-component vector of float Position) 0:? 'PerVertex_in' (in 3-element array of block{in 4-component vector of float Position tin_pos})
0:? 'ts.psIn.pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position ts_psIn_pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 64 // Id's are bound by 68
Capability Geometry Capability Geometry
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 33 40 60 63 EntryPoint Geometry 4 "main" 33 40 60 64 67
ExecutionMode 4 Triangles ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 1 ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip ExecutionMode 4 OutputTriangleStrip
@ -180,7 +180,7 @@ output primitive = triangle_strip
MemberName 15(GS_OUT) 0 "psIn" MemberName 15(GS_OUT) 0 "psIn"
MemberName 15(GS_OUT) 1 "contains_no_builtin_io" MemberName 15(GS_OUT) 1 "contains_no_builtin_io"
Name 17 "o" Name 17 "o"
Name 33 "ts.psIn.pos" Name 33 "ts_psIn_pos"
Name 36 "PS_IN" Name 36 "PS_IN"
MemberName 36(PS_IN) 0 "tc" MemberName 36(PS_IN) 0 "tc"
Name 37 "STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO" Name 37 "STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO"
@ -193,11 +193,19 @@ output primitive = triangle_strip
Name 56 "PS_IN" Name 56 "PS_IN"
MemberName 56(PS_IN) 0 "tc" MemberName 56(PS_IN) 0 "tc"
Name 60 "tin" Name 60 "tin"
Name 63 "tin.pos" Name 61 "PerVertex_in"
Decorate 33(ts.psIn.pos) BuiltIn Position MemberName 61(PerVertex_in) 0 "tin_pos"
Name 64 "PerVertex_in"
Name 65 "PerVertex_out"
MemberName 65(PerVertex_out) 0 "ts_psIn_pos"
Name 67 "PerVertex_out"
Decorate 33(ts_psIn_pos) BuiltIn Position
Decorate 40(ts) Location 0 Decorate 40(ts) Location 0
Decorate 60(tin) Location 0 Decorate 60(tin) Location 0
Decorate 63(tin.pos) BuiltIn Position MemberDecorate 61(PerVertex_in) 0 BuiltIn Position
Decorate 61(PerVertex_in) Block
MemberDecorate 65(PerVertex_out) 0 BuiltIn Position
Decorate 65(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -224,7 +232,7 @@ output primitive = triangle_strip
29: 8(fvec2) ConstantComposite 27 28 29: 8(fvec2) ConstantComposite 27 28
30: TypePointer Function 8(fvec2) 30: TypePointer Function 8(fvec2)
32: TypePointer Output 7(fvec4) 32: TypePointer Output 7(fvec4)
33(ts.psIn.pos): 32(ptr) Variable Output 33(ts_psIn_pos): 32(ptr) Variable Output
36(PS_IN): TypeStruct 8(fvec2) 36(PS_IN): TypeStruct 8(fvec2)
37(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO): TypeStruct 12 13(int) 37(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO): TypeStruct 12 13(int)
38(GS_OUT): TypeStruct 36(PS_IN) 37(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO) 38(GS_OUT): TypeStruct 36(PS_IN) 37(STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO)
@ -240,9 +248,13 @@ output primitive = triangle_strip
58: TypeArray 56(PS_IN) 57 58: TypeArray 56(PS_IN) 57
59: TypePointer Input 58 59: TypePointer Input 58
60(tin): 59(ptr) Variable Input 60(tin): 59(ptr) Variable Input
61: TypeArray 7(fvec4) 57 61(PerVertex_in): TypeStruct 7(fvec4)
62: TypePointer Input 61 62: TypeArray 61(PerVertex_in) 57
63(tin.pos): 62(ptr) Variable Input 63: TypePointer Input 62
64(PerVertex_in): 63(ptr) Variable Input
65(PerVertex_out): TypeStruct 7(fvec4)
66: TypePointer Output 65(PerVertex_out)
67(PerVertex_out): 66(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
17(o): 16(ptr) Variable Function 17(o): 16(ptr) Variable Function
@ -252,7 +264,7 @@ output primitive = triangle_strip
Store 31 29 Store 31 29
34: 24(ptr) AccessChain 17(o) 18 18 34: 24(ptr) AccessChain 17(o) 18 18
35: 7(fvec4) Load 34 35: 7(fvec4) Load 34
Store 33(ts.psIn.pos) 35 Store 33(ts_psIn_pos) 35
41: 30(ptr) AccessChain 17(o) 18 26 41: 30(ptr) AccessChain 17(o) 18 26
42: 8(fvec2) Load 41 42: 8(fvec2) Load 41
44: 43(ptr) AccessChain 40(ts) 18 18 44: 43(ptr) AccessChain 40(ts) 18 18

View File

@ -29,12 +29,12 @@ output primitive = triangle_strip
0:18 Constant: 0:18 Constant:
0:18 0 (const int) 0:18 0 (const int)
0:18 indirect index (temp 4-component vector of float Position) 0:18 indirect index (temp 4-component vector of float Position)
0:18 'i.pos' (in 3-element array of 4-component vector of float Position) 0:18 'i_pos' (in 3-element array of 4-component vector of float Position)
0:18 'x' (temp int) 0:18 'x' (temp int)
0:19 Sequence 0:19 Sequence
0:19 Sequence 0:19 Sequence
0:19 move second child to first child (temp 4-component vector of float) 0:19 move second child to first child (temp 4-component vector of float)
0:? 'ts.pos' (out 4-component vector of float Position) 0:? 'ts_pos' (out 4-component vector of float Position)
0:19 pos: direct index for structure (temp 4-component vector of float) 0:19 pos: direct index for structure (temp 4-component vector of float)
0:19 'o' (temp structure{temp 4-component vector of float pos}) 0:19 'o' (temp structure{temp 4-component vector of float pos})
0:19 Constant: 0:19 Constant:
@ -44,8 +44,8 @@ output primitive = triangle_strip
0:17 Pre-Increment (temp int) 0:17 Pre-Increment (temp int)
0:17 'x' (temp int) 0:17 'x' (temp int)
0:? Linker Objects 0:? Linker Objects
0:? 'i.pos' (in 3-element array of 4-component vector of float Position) 0:? 'PerVertex_in' (in 3-element array of block{in 4-component vector of float Position i_pos})
0:? 'ts.pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position ts_pos})
Linked geometry stage: Linked geometry stage:
@ -81,12 +81,12 @@ output primitive = triangle_strip
0:18 Constant: 0:18 Constant:
0:18 0 (const int) 0:18 0 (const int)
0:18 indirect index (temp 4-component vector of float Position) 0:18 indirect index (temp 4-component vector of float Position)
0:18 'i.pos' (in 3-element array of 4-component vector of float Position) 0:18 'i_pos' (in 3-element array of 4-component vector of float Position)
0:18 'x' (temp int) 0:18 'x' (temp int)
0:19 Sequence 0:19 Sequence
0:19 Sequence 0:19 Sequence
0:19 move second child to first child (temp 4-component vector of float) 0:19 move second child to first child (temp 4-component vector of float)
0:? 'ts.pos' (out 4-component vector of float Position) 0:? 'ts_pos' (out 4-component vector of float Position)
0:19 pos: direct index for structure (temp 4-component vector of float) 0:19 pos: direct index for structure (temp 4-component vector of float)
0:19 'o' (temp structure{temp 4-component vector of float pos}) 0:19 'o' (temp structure{temp 4-component vector of float pos})
0:19 Constant: 0:19 Constant:
@ -96,17 +96,17 @@ output primitive = triangle_strip
0:17 Pre-Increment (temp int) 0:17 Pre-Increment (temp int)
0:17 'x' (temp int) 0:17 'x' (temp int)
0:? Linker Objects 0:? Linker Objects
0:? 'i.pos' (in 3-element array of 4-component vector of float Position) 0:? 'PerVertex_in' (in 3-element array of block{in 4-component vector of float Position i_pos})
0:? 'ts.pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position ts_pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 42 // Id's are bound by 49
Capability Geometry Capability Geometry
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 28 36 EntryPoint Geometry 4 "main" 28 36 45 48
ExecutionMode 4 Triangles ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 1 ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip ExecutionMode 4 OutputTriangleStrip
@ -116,10 +116,20 @@ output primitive = triangle_strip
Name 21 "GS_OUT" Name 21 "GS_OUT"
MemberName 21(GS_OUT) 0 "pos" MemberName 21(GS_OUT) 0 "pos"
Name 23 "o" Name 23 "o"
Name 28 "i.pos" Name 28 "i_pos"
Name 36 "ts.pos" Name 36 "ts_pos"
Decorate 28(i.pos) BuiltIn Position Name 42 "PerVertex_in"
Decorate 36(ts.pos) BuiltIn Position MemberName 42(PerVertex_in) 0 "i_pos"
Name 45 "PerVertex_in"
Name 46 "PerVertex_out"
MemberName 46(PerVertex_out) 0 "ts_pos"
Name 48 "PerVertex_out"
Decorate 28(i_pos) BuiltIn Position
Decorate 36(ts_pos) BuiltIn Position
MemberDecorate 42(PerVertex_in) 0 BuiltIn Position
Decorate 42(PerVertex_in) Block
MemberDecorate 46(PerVertex_out) 0 BuiltIn Position
Decorate 46(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 1 6: TypeInt 32 1
@ -135,12 +145,19 @@ output primitive = triangle_strip
25: 24(int) Constant 3 25: 24(int) Constant 3
26: TypeArray 20(fvec4) 25 26: TypeArray 20(fvec4) 25
27: TypePointer Input 26 27: TypePointer Input 26
28(i.pos): 27(ptr) Variable Input 28(i_pos): 27(ptr) Variable Input
30: TypePointer Input 20(fvec4) 30: TypePointer Input 20(fvec4)
33: TypePointer Function 20(fvec4) 33: TypePointer Function 20(fvec4)
35: TypePointer Output 20(fvec4) 35: TypePointer Output 20(fvec4)
36(ts.pos): 35(ptr) Variable Output 36(ts_pos): 35(ptr) Variable Output
40: 6(int) Constant 1 40: 6(int) Constant 1
42(PerVertex_in): TypeStruct 20(fvec4)
43: TypeArray 42(PerVertex_in) 25
44: TypePointer Input 43
45(PerVertex_in): 44(ptr) Variable Input
46(PerVertex_out): TypeStruct 20(fvec4)
47: TypePointer Output 46(PerVertex_out)
48(PerVertex_out): 47(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
8(x): 7(ptr) Variable Function 8(x): 7(ptr) Variable Function
@ -156,13 +173,13 @@ output primitive = triangle_strip
BranchConditional 18 11 12 BranchConditional 18 11 12
11: Label 11: Label
29: 6(int) Load 8(x) 29: 6(int) Load 8(x)
31: 30(ptr) AccessChain 28(i.pos) 29 31: 30(ptr) AccessChain 28(i_pos) 29
32: 20(fvec4) Load 31 32: 20(fvec4) Load 31
34: 33(ptr) AccessChain 23(o) 9 34: 33(ptr) AccessChain 23(o) 9
Store 34 32 Store 34 32
37: 33(ptr) AccessChain 23(o) 9 37: 33(ptr) AccessChain 23(o) 9
38: 20(fvec4) Load 37 38: 20(fvec4) Load 37
Store 36(ts.pos) 38 Store 36(ts_pos) 38
EmitVertex EmitVertex
Branch 13 Branch 13
13: Label 13: Label

View File

@ -26,7 +26,7 @@ Shader version: 450
0:? Linker Objects 0:? Linker Objects
0:? 'Pos_in' (in 4-component vector of float Position) 0:? 'Pos_in' (in 4-component vector of float Position)
0:? 'Pos_loose' (in 4-component vector of float Position) 0:? 'Pos_loose' (in 4-component vector of float Position)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
Linked vertex stage: Linked vertex stage:
@ -59,16 +59,16 @@ Shader version: 450
0:? Linker Objects 0:? Linker Objects
0:? 'Pos_in' (in 4-component vector of float Position) 0:? 'Pos_in' (in 4-component vector of float Position)
0:? 'Pos_loose' (in 4-component vector of float Position) 0:? 'Pos_loose' (in 4-component vector of float Position)
0:? 'Pos' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position Pos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 26 // Id's are bound by 29
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 14 16 22 EntryPoint Vertex 4 "main" 14 16 22 28
Name 4 "main" Name 4 "main"
Name 8 "VS_OUTPUT" Name 8 "VS_OUTPUT"
MemberName 8(VS_OUTPUT) 0 "Pos" MemberName 8(VS_OUTPUT) 0 "Pos"
@ -76,9 +76,14 @@ Shader version: 450
Name 14 "Pos_in" Name 14 "Pos_in"
Name 16 "Pos_loose" Name 16 "Pos_loose"
Name 22 "Pos" Name 22 "Pos"
Name 26 "PerVertex_out"
MemberName 26(PerVertex_out) 0 "Pos"
Name 28 "PerVertex_out"
Decorate 14(Pos_in) BuiltIn Position Decorate 14(Pos_in) BuiltIn Position
Decorate 16(Pos_loose) BuiltIn Position Decorate 16(Pos_loose) BuiltIn Position
Decorate 22(Pos) BuiltIn Position Decorate 22(Pos) BuiltIn Position
MemberDecorate 26(PerVertex_out) 0 BuiltIn Position
Decorate 26(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -93,6 +98,9 @@ Shader version: 450
19: TypePointer Function 7(fvec4) 19: TypePointer Function 7(fvec4)
21: TypePointer Output 7(fvec4) 21: TypePointer Output 7(fvec4)
22(Pos): 21(ptr) Variable Output 22(Pos): 21(ptr) Variable Output
26(PerVertex_out): TypeStruct 7(fvec4)
27: TypePointer Output 26(PerVertex_out)
28(PerVertex_out): 27(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
10(vsout): 9(ptr) Variable Function 10(vsout): 9(ptr) Variable Function

View File

@ -49,7 +49,7 @@ output primitive = triangle_strip
0:22 Sequence 0:22 Sequence
0:22 Sequence 0:22 Sequence
0:22 move second child to first child (temp 4-component vector of float) 0:22 move second child to first child (temp 4-component vector of float)
0:? 'outStream.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 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 '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: 0:22 Constant:
@ -76,7 +76,7 @@ output primitive = triangle_strip
0:? Linker Objects 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:? '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:? 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'outStream.position' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position outStream_position})
Linked geometry stage: Linked geometry stage:
@ -132,7 +132,7 @@ output primitive = triangle_strip
0:22 Sequence 0:22 Sequence
0:22 Sequence 0:22 Sequence
0:22 move second child to first child (temp 4-component vector of float) 0:22 move second child to first child (temp 4-component vector of float)
0:? 'outStream.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 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 '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: 0:22 Constant:
@ -159,16 +159,16 @@ output primitive = triangle_strip
0:? Linker Objects 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:? '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:? 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'outStream.position' (out 4-component vector of float Position) 0:? 'PerVertex_out' (out block{out 4-component vector of float Position outStream_position})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 49 // Id's are bound by 52
Capability Geometry Capability Geometry
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 19 36 41 EntryPoint Geometry 4 "main" 19 36 41 51
ExecutionMode 4 InputLines ExecutionMode 4 InputLines
ExecutionMode 4 Invocations 1 ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip ExecutionMode 4 OutputTriangleStrip
@ -184,14 +184,19 @@ output primitive = triangle_strip
MemberName 14(VertexData) 1 "color" MemberName 14(VertexData) 1 "color"
MemberName 14(VertexData) 2 "uv" MemberName 14(VertexData) 2 "uv"
Name 19 "vin" Name 19 "vin"
Name 36 "outStream.position" Name 36 "outStream_position"
Name 39 "PS_IN" Name 39 "PS_IN"
MemberName 39(PS_IN) 0 "color" MemberName 39(PS_IN) 0 "color"
MemberName 39(PS_IN) 1 "uv" MemberName 39(PS_IN) 1 "uv"
Name 41 "outStream" Name 41 "outStream"
Name 49 "PerVertex_out"
MemberName 49(PerVertex_out) 0 "outStream_position"
Name 51 "PerVertex_out"
Decorate 19(vin) Location 0 Decorate 19(vin) Location 0
Decorate 36(outStream.position) BuiltIn Position Decorate 36(outStream_position) BuiltIn Position
Decorate 41(outStream) Location 0 Decorate 41(outStream) Location 0
MemberDecorate 49(PerVertex_out) 0 BuiltIn Position
Decorate 49(PerVertex_out) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -214,11 +219,14 @@ output primitive = triangle_strip
29: TypePointer Function 8(fvec2) 29: TypePointer Function 8(fvec2)
31: 12(int) Constant 0 31: 12(int) Constant 0
35: TypePointer Output 7(fvec4) 35: TypePointer Output 7(fvec4)
36(outStream.position): 35(ptr) Variable Output 36(outStream_position): 35(ptr) Variable Output
39(PS_IN): TypeStruct 7(fvec4) 8(fvec2) 39(PS_IN): TypeStruct 7(fvec4) 8(fvec2)
40: TypePointer Output 39(PS_IN) 40: TypePointer Output 39(PS_IN)
41(outStream): 40(ptr) Variable Output 41(outStream): 40(ptr) Variable Output
47: TypePointer Output 8(fvec2) 47: TypePointer Output 8(fvec2)
49(PerVertex_out): TypeStruct 7(fvec4)
50: TypePointer Output 49(PerVertex_out)
51(PerVertex_out): 50(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
11(vout): 10(ptr) Variable Function 11(vout): 10(ptr) Variable Function
@ -236,7 +244,7 @@ output primitive = triangle_strip
Store 34 33 Store 34 33
37: 23(ptr) AccessChain 11(vout) 31 37: 23(ptr) AccessChain 11(vout) 31
38: 7(fvec4) Load 37 38: 7(fvec4) Load 37
Store 36(outStream.position) 38 Store 36(outStream_position) 38
42: 23(ptr) AccessChain 11(vout) 13 42: 23(ptr) AccessChain 11(vout) 13
43: 7(fvec4) Load 42 43: 7(fvec4) Load 42
44: 35(ptr) AccessChain 41(outStream) 31 44: 35(ptr) AccessChain 41(outStream) 31

View File

@ -1319,9 +1319,18 @@ public:
virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); } virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); }
virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); } virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
// Return true if this is interstage IO virtual bool isBuiltInInterstageIO(EShLanguage language) const
virtual bool isBuiltInInterstageIO() const
{ {
return isPerVertexAndBuiltIn(language) || isLooseAndBuiltIn(language);
}
// Return true if this is an interstage IO builtin
virtual bool isPerVertexAndBuiltIn(EShLanguage language) const
{
if (language == EShLangFragment)
return false;
// Any non-fragment stage
switch (getQualifier().builtIn) { switch (getQualifier().builtIn) {
case EbvPosition: case EbvPosition:
case EbvPointSize: case EbvPointSize:
@ -1333,6 +1342,15 @@ public:
} }
} }
// Return true if this is a loose builtin
virtual bool isLooseAndBuiltIn(EShLanguage language) const
{
if (getQualifier().builtIn == EbvNone)
return false;
return !isPerVertexAndBuiltIn(language);
}
// Recursively checks if the type contains the given basic type // Recursively checks if the type contains the given basic type
virtual bool containsBasicType(TBasicType checkType) const virtual bool containsBasicType(TBasicType checkType) const
{ {
@ -1401,33 +1419,20 @@ public:
} }
// Recursively checks if the type contains an interstage IO builtin // Recursively checks if the type contains an interstage IO builtin
virtual bool containsBuiltInInterstageIO() const virtual bool containsBuiltInInterstageIO(EShLanguage language) const
{ {
if (isBuiltInInterstageIO()) if (isBuiltInInterstageIO(language))
return true; return true;
if (! structure) if (! structure)
return false; return false;
for (unsigned int i = 0; i < structure->size(); ++i) { for (unsigned int i = 0; i < structure->size(); ++i) {
if ((*structure)[i].type->containsBuiltInInterstageIO()) if ((*structure)[i].type->containsBuiltInInterstageIO(language))
return true; return true;
} }
return false; return false;
} }
// Recursively checks whether a struct contains only interstage IO
virtual bool containsOnlyBuiltInInterstageIO() const
{
if (! structure)
return isBuiltInInterstageIO();
for (unsigned int i = 0; i < structure->size(); ++i) {
if (!(*structure)[i].type->containsOnlyBuiltInInterstageIO())
return false;
}
return true;
}
virtual bool containsNonOpaque() const virtual bool containsNonOpaque() const
{ {
// list all non-opaque types // list all non-opaque types

View File

@ -933,7 +933,7 @@ bool HlslParseContext::shouldSplit(const TType& type)
const TStorageQualifier qualifier = type.getQualifier().storage; const TStorageQualifier qualifier = type.getQualifier().storage;
// If it contains interstage IO, but not ONLY interstage IO, split the struct. // If it contains interstage IO, but not ONLY interstage IO, split the struct.
return type.isStruct() && type.containsBuiltInInterstageIO() && return type.isStruct() && type.containsBuiltInInterstageIO(language) &&
(qualifier == EvqVaryingIn || qualifier == EvqVaryingOut); (qualifier == EvqVaryingIn || qualifier == EvqVaryingOut);
} }
@ -990,13 +990,13 @@ TType& HlslParseContext::split(TType& type, TString name, const TType* outerStru
// Get iterator to (now at end) set of builtin iterstage IO members // Get iterator to (now at end) set of builtin iterstage IO members
const auto firstIo = std::stable_partition(userStructure->begin(), userStructure->end(), const auto firstIo = std::stable_partition(userStructure->begin(), userStructure->end(),
[](const TTypeLoc& t) {return !t.type->isBuiltInInterstageIO();}); [this](const TTypeLoc& t) {return !t.type->isBuiltInInterstageIO(language);});
// Move those to the builtin IO. However, we also propagate arrayness (just one level is handled // Move those to the builtin IO. However, we also propagate arrayness (just one level is handled
// now) to this variable. // now) to this variable.
for (auto ioType = firstIo; ioType != userStructure->end(); ++ioType) { for (auto ioType = firstIo; ioType != userStructure->end(); ++ioType) {
const TType& memberType = *ioType->type; const TType& memberType = *ioType->type;
TVariable* ioVar = makeInternalVariable(name + (name.empty() ? "" : ".") + memberType.getFieldName(), memberType); TVariable* ioVar = makeInternalVariable(name + (name.empty() ? "" : "_") + memberType.getFieldName(), memberType);
if (arraySizes) if (arraySizes)
ioVar->getWritableType().newArraySizes(*arraySizes); ioVar->getWritableType().newArraySizes(*arraySizes);
@ -1013,7 +1013,7 @@ TType& HlslParseContext::split(TType& type, TString name, const TType* outerStru
// Recurse further into the members. // Recurse further into the members.
for (unsigned int i = 0; i < userStructure->size(); ++i) for (unsigned int i = 0; i < userStructure->size(); ++i)
split(*(*userStructure)[i].type, split(*(*userStructure)[i].type,
name + (name.empty() ? "" : ".") + (*userStructure)[i].type->getFieldName(), name + (name.empty() ? "" : "_") + (*userStructure)[i].type->getFieldName(),
outerStructType); outerStructType);
} }
@ -1320,7 +1320,7 @@ TIntermTyped* HlslParseContext::splitAccessStruct(const TSourceLoc& loc, TInterm
const TType& memberType = *members[member].type; const TType& memberType = *members[member].type;
if (memberType.isBuiltInInterstageIO()) { if (memberType.isBuiltInInterstageIO(language)) {
// It's one of the interstage IO variables we split off. // It's one of the interstage IO variables we split off.
TIntermTyped* builtIn = intermediate.addSymbol(*interstageBuiltInIo[tInterstageIoData(memberType, base->getType())], loc); TIntermTyped* builtIn = intermediate.addSymbol(*interstageBuiltInIo[tInterstageIoData(memberType, base->getType())], loc);
@ -1344,7 +1344,7 @@ TIntermTyped* HlslParseContext::splitAccessStruct(const TSourceLoc& loc, TInterm
int newMember = 0; int newMember = 0;
for (int m=0; m<member; ++m) for (int m=0; m<member; ++m)
if (!members[m].type->isBuiltInInterstageIO()) if (!members[m].type->isBuiltInInterstageIO(language))
++newMember; ++newMember;
member = newMember; member = newMember;
@ -1437,6 +1437,9 @@ TFunction& HlslParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFu
// Add interstage IO variables to the linkage in canonical order. // Add interstage IO variables to the linkage in canonical order.
void HlslParseContext::addInterstageIoToLinkage() void HlslParseContext::addInterstageIoToLinkage()
{ {
TSourceLoc loc;
loc.init();
std::vector<tInterstageIoData> io; std::vector<tInterstageIoData> io;
io.reserve(interstageBuiltInIo.size()); io.reserve(interstageBuiltInIo.size());
@ -1446,8 +1449,75 @@ void HlslParseContext::addInterstageIoToLinkage()
// Our canonical order is the TBuiltInVariable numeric order. // Our canonical order is the TBuiltInVariable numeric order.
std::sort(io.begin(), io.end()); std::sort(io.begin(), io.end());
for (int idx = 0; idx < int(io.size()); ++idx) // We have to (potentially) track two IO blocks, one in, one out. E.g, a GS may have a
trackLinkageDeferred(*interstageBuiltInIo[io[idx]]); // PerVertex block in both directions, possibly with different members.
static const TStorageQualifier ioType[2] = { EvqVaryingIn, EvqVaryingOut };
static const char* blockName[2] = { "PerVertex_in", "PerVertex_out" };
TTypeList* ioBlockTypes[2] = { nullptr, nullptr };
TArraySizes* ioBlockArray[2] = { nullptr, nullptr };
for (int idx = 0; idx < int(io.size()); ++idx) {
TVariable* var = interstageBuiltInIo[io[idx]];
// Add the loose interstage IO to the linkage
if (var->getType().isLooseAndBuiltIn(language))
trackLinkageDeferred(*var);
// Add the PerVertex interstage IO to the IO block
if (var->getType().isPerVertexAndBuiltIn(language)) {
int blockId = 0;
switch (var->getType().getQualifier().storage) {
case EvqVaryingIn: blockId = 0; break;
case EvqVaryingOut: blockId = 1; break;
default: assert(0 && "Invalid storage qualifier");
}
// Lazy creation of type list only if we end up needing it.
if (ioBlockTypes[blockId] == nullptr)
ioBlockTypes[blockId] = new TTypeList();
TTypeLoc member = { new TType(EbtVoid), loc };
member.type->shallowCopy(var->getType());
member.type->setFieldName(var->getName());
// We may have collected these from different parts of different structures. If their
// array dimensions are not the same, we don't know what to do, so issue an error.
if (member.type->isArray()) {
if (ioBlockArray[blockId] == nullptr) {
ioBlockArray[blockId] = &member.type->getArraySizes();
} else {
if (*ioBlockArray[blockId] != member.type->getArraySizes())
error(loc, "PerVertex block array dimension mismatch", "", "");
}
member.type->clearArraySizes();
}
ioBlockTypes[blockId]->push_back(member);
}
}
// If there were PerVertex items, add the block to the linkage. Handle in and out separately.
for (int blockId = 0; blockId <= 1; ++blockId) {
if (ioBlockTypes[blockId] != nullptr) {
const TString* instanceName = NewPoolTString(blockName[blockId]);
TQualifier blockQualifier;
blockQualifier.clear();
blockQualifier.storage = ioType[blockId];
TType blockType(ioBlockTypes[blockId], *instanceName, blockQualifier);
if (ioBlockArray[blockId] != nullptr)
blockType.newArraySizes(*ioBlockArray[blockId]);
TVariable* ioBlock = new TVariable(instanceName, blockType);
if (!symbolTable.insert(*ioBlock))
error(loc, "block instance name redefinition", ioBlock->getName().c_str(), "");
else
trackLinkageDeferred(*ioBlock);
}
}
} }
// //
@ -1786,7 +1856,7 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
const TOperator op = node->getType().isArray() ? EOpIndexDirect : EOpIndexDirectStruct; const TOperator op = node->getType().isArray() ? EOpIndexDirect : EOpIndexDirectStruct;
const TType derefType(node->getType(), member); const TType derefType(node->getType(), member);
if (split && derefType.isBuiltInInterstageIO()) { if (split && derefType.isBuiltInInterstageIO(language)) {
// copy from interstage IO builtin if needed // copy from interstage IO builtin if needed
subTree = intermediate.addSymbol(*interstageBuiltInIo.find(tInterstageIoData(derefType, outer->getType()))->second); subTree = intermediate.addSymbol(*interstageBuiltInIo.find(tInterstageIoData(derefType, outer->getType()))->second);
} else if (flattened && isFinalFlattening(derefType)) { } else if (flattened && isFinalFlattening(derefType)) {
@ -1855,14 +1925,14 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
// recurse into it if there's something for splitting to do. That can save a lot of AST verbosity for // recurse into it if there's something for splitting to do. That can save a lot of AST verbosity for
// a bunch of memberwise copies. // a bunch of memberwise copies.
if (isFinalFlattening(typeL) || (!isFlattenLeft && !isFlattenRight && if (isFinalFlattening(typeL) || (!isFlattenLeft && !isFlattenRight &&
!typeL.containsBuiltInInterstageIO() && !typeR.containsBuiltInInterstageIO())) { !typeL.containsBuiltInInterstageIO(language) && !typeR.containsBuiltInInterstageIO(language))) {
assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subSplitLeft, subSplitRight, loc), loc); assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subSplitLeft, subSplitRight, loc), loc);
} else { } else {
traverse(subLeft, subRight, subSplitLeft, subSplitRight); traverse(subLeft, subRight, subSplitLeft, subSplitRight);
} }
memberL += (typeL.isBuiltInInterstageIO() ? 0 : 1); memberL += (typeL.isBuiltInInterstageIO(language) ? 0 : 1);
memberR += (typeR.isBuiltInInterstageIO() ? 0 : 1); memberR += (typeR.isBuiltInInterstageIO(language) ? 0 : 1);
} }
} else { } else {
assert(0); // we should never be called on a non-flattenable thing, because assert(0); // we should never be called on a non-flattenable thing, because
@ -5163,7 +5233,7 @@ TType* HlslParseContext::sanitizeType(TType* type)
sanitizedType->clearArraySizes(); sanitizedType->clearArraySizes();
return sanitizedType; return sanitizedType;
} else { } else {
if (type->containsBuiltInInterstageIO()) { if (type->containsBuiltInInterstageIO(language)) {
// This means the type contains interstage IO, but we've never encountered it before. // This means the type contains interstage IO, but we've never encountered it before.
// Copy it, sanitize it, and remember it in the sanitizedTypeMap // Copy it, sanitize it, and remember it in the sanitizedTypeMap
TType* sanitizedType = type->clone(); TType* sanitizedType = type->clone();