Whole stack: Fix stale types in the AST linker object nodes, fixing #557.

Rationalizes the entire tracking of the linker object nodes, effecting
GLSL, HLSL, and SPIR-V, to allow tracked objects to be fully edited before
their type snapshot for linker objects.

Should only effect things when the rest of the AST contained no reference to
the symbol, because normal AST nodes were not stale. Also will only effect such
objects when their types were edited.
This commit is contained in:
John Kessenich
2016-11-05 10:15:53 -06:00
parent e5e58cfee3
commit d3f1122a44
107 changed files with 630 additions and 560 deletions

View File

@@ -26,9 +26,7 @@ gl_FragCoord origin is upper left
0:42 'input' (layout(location=0 ) in 4-component vector of float)
0:42 Branch: Return
0:? Linker Objects
0:? 's2' (global structure{temp 4-component vector of float i})
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'anon@0' (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:? 'input' (layout(location=0 ) in 4-component vector of float)
0:? 'a' (layout(location=1 ) smooth in 4-component vector of float)
0:? 'b' (layout(location=2 ) flat in bool)
@@ -38,6 +36,8 @@ gl_FragCoord origin is upper left
0:? 'ff2' (layout(location=5 offset=4 ) in bool)
0:? 'ff3' (layout(location=6 binding=0 offset=4 ) in bool)
0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
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})
Linked fragment stage:
@@ -66,9 +66,7 @@ gl_FragCoord origin is upper left
0:42 'input' (layout(location=0 ) in 4-component vector of float)
0:42 Branch: Return
0:? Linker Objects
0:? 's2' (global structure{temp 4-component vector of float i})
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'anon@0' (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:? 'input' (layout(location=0 ) in 4-component vector of float)
0:? 'a' (layout(location=1 ) smooth in 4-component vector of float)
0:? 'b' (layout(location=2 ) flat in bool)
@@ -78,15 +76,17 @@ gl_FragCoord origin is upper left
0:? 'ff2' (layout(location=5 offset=4 ) in bool)
0:? 'ff3' (layout(location=6 binding=0 offset=4 ) in bool)
0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
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})
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 49
// Id's are bound by 50
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 25 30 31 38 40 42 45 46 47 48
EntryPoint Fragment 4 "PixelShaderFunction" 25 30 31 34 36 38 41 42 43 44
ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction"
Name 8 "FS"
@@ -98,44 +98,51 @@ gl_FragCoord origin is upper left
Name 25 "ff4"
Name 30 "@entryPointOutput"
Name 31 "input"
Name 34 "myS"
MemberName 34(myS) 0 "b"
MemberName 34(myS) 1 "c"
MemberName 34(myS) 2 "a"
MemberName 34(myS) 3 "d"
Name 35 "$Global"
MemberName 35($Global) 0 "s1"
MemberName 35($Global) 1 "ff5"
MemberName 35($Global) 2 "ff6"
Name 37 ""
Name 38 "a"
Name 40 "b"
Name 42 "c"
Name 45 "d"
Name 46 "ff1"
Name 47 "ff2"
Name 48 "ff3"
Name 34 "a"
Name 36 "b"
Name 38 "c"
Name 41 "d"
Name 42 "ff1"
Name 43 "ff2"
Name 44 "ff3"
Name 46 "myS"
MemberName 46(myS) 0 "b"
MemberName 46(myS) 1 "c"
MemberName 46(myS) 2 "a"
MemberName 46(myS) 3 "d"
Name 47 "$Global"
MemberName 47($Global) 0 "s1"
MemberName 47($Global) 1 "ff5"
MemberName 47($Global) 2 "ff6"
Name 49 ""
Decorate 25(ff4) Offset 4
Decorate 25(ff4) Location 7
Decorate 25(ff4) Binding 0
Decorate 30(@entryPointOutput) Location 0
Decorate 31(input) Location 0
Decorate 35($Global) Block
Decorate 37 DescriptorSet 0
Decorate 38(a) Location 1
Decorate 40(b) Flat
Decorate 40(b) Location 2
Decorate 42(c) NoPerspective
Decorate 42(c) Centroid
Decorate 42(c) Location 3
Decorate 45(d) Centroid
Decorate 45(d) Location 4
Decorate 46(ff1) BuiltIn FrontFacing
Decorate 47(ff2) Offset 4
Decorate 47(ff2) Location 5
Decorate 48(ff3) Offset 4
Decorate 48(ff3) Location 6
Decorate 48(ff3) Binding 0
Decorate 34(a) Location 1
Decorate 36(b) Flat
Decorate 36(b) Location 2
Decorate 38(c) NoPerspective
Decorate 38(c) Centroid
Decorate 38(c) Location 3
Decorate 41(d) Centroid
Decorate 41(d) Location 4
Decorate 42(ff1) BuiltIn FrontFacing
Decorate 43(ff2) Offset 4
Decorate 43(ff2) Location 5
Decorate 44(ff3) Offset 4
Decorate 44(ff3) Location 6
Decorate 44(ff3) Binding 0
MemberDecorate 46(myS) 0 Offset 0
MemberDecorate 46(myS) 1 Offset 4
MemberDecorate 46(myS) 2 Offset 16
MemberDecorate 46(myS) 3 Offset 32
MemberDecorate 47($Global) 0 Offset 0
MemberDecorate 47($Global) 1 Offset 1620
MemberDecorate 47($Global) 2 Offset 1636
Decorate 47($Global) Block
Decorate 49 DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeBool
@@ -155,21 +162,22 @@ gl_FragCoord origin is upper left
29: TypePointer Output 18(fvec4)
30(@entryPointOutput): 29(ptr) Variable Output
31(input): 24(ptr) Variable Input
34(myS): TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
35($Global): TypeStruct 34(myS) 17(float) 17(float)
36: TypePointer Uniform 35($Global)
37: 36(ptr) Variable Uniform
38(a): 24(ptr) Variable Input
39: TypePointer Input 6(bool)
40(b): 39(ptr) Variable Input
41: TypePointer Input 17(float)
42(c): 41(ptr) Variable Input
43: TypeVector 17(float) 2
44: TypePointer Input 43(fvec2)
45(d): 44(ptr) Variable Input
46(ff1): 39(ptr) Variable Input
47(ff2): 39(ptr) Variable Input
48(ff3): 39(ptr) Variable Input
34(a): 24(ptr) Variable Input
35: TypePointer Input 6(bool)
36(b): 35(ptr) Variable Input
37: TypePointer Input 17(float)
38(c): 37(ptr) Variable Input
39: TypeVector 17(float) 2
40: TypePointer Input 39(fvec2)
41(d): 40(ptr) Variable Input
42(ff1): 35(ptr) Variable Input
43(ff2): 35(ptr) Variable Input
44(ff3): 35(ptr) Variable Input
45: TypeInt 32 0
46(myS): TypeStruct 45(int) 45(int) 18(fvec4) 18(fvec4)
47($Global): TypeStruct 46(myS) 17(float) 17(float)
48: TypePointer Uniform 47($Global)
49: 48(ptr) Variable Uniform
4(PixelShaderFunction): 2 Function None 3
5: Label
10(s3): 9(ptr) Variable Function