HLSL: Stop flattening non-IO structs containing opaques.

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

View file

@ -4,14 +4,19 @@ Shader version: 500
0:? Sequence
0:5 Function Definition: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
0:5 Function Parameters:
0:? 'tex.smpl' ( in sampler)
0:? 'tex.tex' ( in texture2D)
0:5 'tex' ( in structure{ temp sampler smpl, temp texture2D tex})
0:? Sequence
0:6 Branch: Return with expression
0:6 texture ( temp 4-component vector of float)
0:6 Construct combined texture-sampler ( temp sampler2D)
0:? 'tex.tex' ( in texture2D)
0:? 'tex.smpl' ( in sampler)
0:6 tex: direct index for structure ( temp texture2D)
0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex})
0:6 Constant:
0:6 1 (const int)
0:6 smpl: direct index for structure ( temp sampler)
0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex})
0:6 Constant:
0:6 0 (const int)
0:? Constant:
0:? 0.300000
0:? 0.400000
@ -19,10 +24,16 @@ Shader version: 500
0:10 Function Parameters:
0:? Sequence
0:12 move second child to first child ( temp sampler)
0:? 't.smpl' ( temp sampler)
0:12 smpl: direct index for structure ( temp sampler)
0:12 't' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:12 Constant:
0:12 0 (const int)
0:12 'g_tInputTexture_sampler' ( uniform sampler)
0:13 move second child to first child ( temp texture2D)
0:? 't.tex' ( temp texture2D)
0:13 tex: direct index for structure ( temp texture2D)
0:13 't' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:13 Constant:
0:13 1 (const int)
0:13 'g_tInputTexture' ( uniform texture2D)
0:14 Branch: Return with expression
0:14 't' ( temp structure{ temp sampler smpl, temp texture2D tex})
@ -30,67 +41,34 @@ Shader version: 500
0:18 Function Parameters:
0:? Sequence
0:19 Sequence
0:19 Sequence
0:19 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 Construct structure ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 'g_tInputTexture_sampler' ( uniform sampler)
0:19 'g_tInputTexture' ( uniform texture2D)
0:19 move second child to first child ( temp sampler)
0:? 'tex1.smpl' ( temp sampler)
0:19 smpl: direct index for structure ( temp sampler)
0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 Constant:
0:19 0 (const int)
0:19 move second child to first child ( temp texture2D)
0:? 'tex1.tex' ( temp texture2D)
0:19 tex: direct index for structure ( temp texture2D)
0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 Constant:
0:19 1 (const int)
0:19 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 'tex1' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 Construct structure ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 'g_tInputTexture_sampler' ( uniform sampler)
0:19 'g_tInputTexture' ( uniform texture2D)
0:20 Sequence
0:20 move second child to first child ( temp 4-component vector of float)
0:20 'res' ( temp 4-component vector of float)
0:20 Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
0:? 'tex1.smpl' ( temp sampler)
0:? 'tex1.tex' ( temp texture2D)
0:20 'tex1' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Sequence
0:21 Sequence
0:21 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Function Call: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 move second child to first child ( temp sampler)
0:? 'tex2.smpl' ( temp sampler)
0:21 smpl: direct index for structure ( temp sampler)
0:21 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Constant:
0:21 0 (const int)
0:21 move second child to first child ( temp texture2D)
0:? 'tex2.tex' ( temp texture2D)
0:21 tex: direct index for structure ( temp texture2D)
0:21 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Constant:
0:21 1 (const int)
0:21 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 'tex2' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Function Call: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex})
0:22 add second child into first child ( temp 4-component vector of float)
0:22 'res' ( temp 4-component vector of float)
0:22 Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
0:? 'tex2.smpl' ( temp sampler)
0:? 'tex2.tex' ( temp texture2D)
0:22 'tex2' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:23 Sequence
0:23 Sequence
0:23 move second child to first child ( temp sampler)
0:? 'tex3.smpl' ( temp sampler)
0:? 'tex1.smpl' ( temp sampler)
0:23 move second child to first child ( temp texture2D)
0:? 'tex3.tex' ( temp texture2D)
0:? 'tex1.tex' ( temp texture2D)
0:23 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:23 'tex3' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:23 'tex1' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:24 add second child into first child ( temp 4-component vector of float)
0:24 'res' ( temp 4-component vector of float)
0:24 Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
0:? 'tex3.smpl' ( temp sampler)
0:? 'tex3.tex' ( temp texture2D)
0:25 Branch: Return with expression
0:25 'res' ( temp 4-component vector of float)
0:24 'tex3' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:26 Branch: Return with expression
0:26 'res' ( temp 4-component vector of float)
0:18 Function Definition: main( ( temp void)
0:18 Function Parameters:
0:? Sequence
@ -110,14 +88,19 @@ Shader version: 500
0:? Sequence
0:5 Function Definition: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
0:5 Function Parameters:
0:? 'tex.smpl' ( in sampler)
0:? 'tex.tex' ( in texture2D)
0:5 'tex' ( in structure{ temp sampler smpl, temp texture2D tex})
0:? Sequence
0:6 Branch: Return with expression
0:6 texture ( temp 4-component vector of float)
0:6 Construct combined texture-sampler ( temp sampler2D)
0:? 'tex.tex' ( in texture2D)
0:? 'tex.smpl' ( in sampler)
0:6 tex: direct index for structure ( temp texture2D)
0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex})
0:6 Constant:
0:6 1 (const int)
0:6 smpl: direct index for structure ( temp sampler)
0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex})
0:6 Constant:
0:6 0 (const int)
0:? Constant:
0:? 0.300000
0:? 0.400000
@ -125,10 +108,16 @@ Shader version: 500
0:10 Function Parameters:
0:? Sequence
0:12 move second child to first child ( temp sampler)
0:? 't.smpl' ( temp sampler)
0:12 smpl: direct index for structure ( temp sampler)
0:12 't' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:12 Constant:
0:12 0 (const int)
0:12 'g_tInputTexture_sampler' ( uniform sampler)
0:13 move second child to first child ( temp texture2D)
0:? 't.tex' ( temp texture2D)
0:13 tex: direct index for structure ( temp texture2D)
0:13 't' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:13 Constant:
0:13 1 (const int)
0:13 'g_tInputTexture' ( uniform texture2D)
0:14 Branch: Return with expression
0:14 't' ( temp structure{ temp sampler smpl, temp texture2D tex})
@ -136,67 +125,34 @@ Shader version: 500
0:18 Function Parameters:
0:? Sequence
0:19 Sequence
0:19 Sequence
0:19 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 Construct structure ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 'g_tInputTexture_sampler' ( uniform sampler)
0:19 'g_tInputTexture' ( uniform texture2D)
0:19 move second child to first child ( temp sampler)
0:? 'tex1.smpl' ( temp sampler)
0:19 smpl: direct index for structure ( temp sampler)
0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 Constant:
0:19 0 (const int)
0:19 move second child to first child ( temp texture2D)
0:? 'tex1.tex' ( temp texture2D)
0:19 tex: direct index for structure ( temp texture2D)
0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 Constant:
0:19 1 (const int)
0:19 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 'tex1' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 Construct structure ( temp structure{ temp sampler smpl, temp texture2D tex})
0:19 'g_tInputTexture_sampler' ( uniform sampler)
0:19 'g_tInputTexture' ( uniform texture2D)
0:20 Sequence
0:20 move second child to first child ( temp 4-component vector of float)
0:20 'res' ( temp 4-component vector of float)
0:20 Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
0:? 'tex1.smpl' ( temp sampler)
0:? 'tex1.tex' ( temp texture2D)
0:20 'tex1' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Sequence
0:21 Sequence
0:21 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Function Call: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 move second child to first child ( temp sampler)
0:? 'tex2.smpl' ( temp sampler)
0:21 smpl: direct index for structure ( temp sampler)
0:21 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Constant:
0:21 0 (const int)
0:21 move second child to first child ( temp texture2D)
0:? 'tex2.tex' ( temp texture2D)
0:21 tex: direct index for structure ( temp texture2D)
0:21 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Constant:
0:21 1 (const int)
0:21 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 'tex2' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:21 Function Call: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex})
0:22 add second child into first child ( temp 4-component vector of float)
0:22 'res' ( temp 4-component vector of float)
0:22 Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
0:? 'tex2.smpl' ( temp sampler)
0:? 'tex2.tex' ( temp texture2D)
0:22 'tex2' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:23 Sequence
0:23 Sequence
0:23 move second child to first child ( temp sampler)
0:? 'tex3.smpl' ( temp sampler)
0:? 'tex1.smpl' ( temp sampler)
0:23 move second child to first child ( temp texture2D)
0:? 'tex3.tex' ( temp texture2D)
0:? 'tex1.tex' ( temp texture2D)
0:23 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
0:23 'tex3' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:23 'tex1' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:24 add second child into first child ( temp 4-component vector of float)
0:24 'res' ( temp 4-component vector of float)
0:24 Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
0:? 'tex3.smpl' ( temp sampler)
0:? 'tex3.tex' ( temp texture2D)
0:25 Branch: Return with expression
0:25 'res' ( temp 4-component vector of float)
0:24 'tex3' ( temp structure{ temp sampler smpl, temp texture2D tex})
0:26 Branch: Return with expression
0:26 'res' ( temp 4-component vector of float)
0:18 Function Definition: main( ( temp void)
0:18 Function Parameters:
0:? Sequence
@ -210,164 +166,126 @@ Shader version: 500
// Module Version 10000
// Generated by (magic number): 80002
// Id's are bound by 101
// Id's are bound by 82
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 99
EntryPoint Vertex 4 "main" 80
Source HLSL 500
Name 4 "main"
Name 15 "lookUp(struct-FxaaTex-p1-t211;"
Name 13 "tex.smpl"
Name 14 "tex.tex"
Name 17 "FxaaTex"
MemberName 17(FxaaTex) 0 "smpl"
MemberName 17(FxaaTex) 1 "tex"
Name 19 "fillOpaque("
Name 22 "@main("
Name 36 "t.smpl"
Name 38 "g_tInputTexture_sampler"
Name 40 "t.tex"
Name 42 "g_tInputTexture"
Name 45 "t"
Name 49 "flattenTemp"
Name 53 "tex1.smpl"
Name 58 "tex1.tex"
Name 63 "res"
Name 9 "FxaaTex"
MemberName 9(FxaaTex) 0 "smpl"
MemberName 9(FxaaTex) 1 "tex"
Name 14 "lookUp(struct-FxaaTex-p1-t211;"
Name 13 "tex"
Name 17 "fillOpaque("
Name 20 "@main("
Name 41 "t"
Name 43 "g_tInputTexture_sampler"
Name 47 "g_tInputTexture"
Name 53 "tex1"
Name 58 "res"
Name 59 "param"
Name 62 "tex2"
Name 64 "param"
Name 66 "param"
Name 69 "flattenTemp"
Name 71 "tex2.smpl"
Name 74 "tex2.tex"
Name 77 "param"
Name 79 "param"
Name 84 "tex3.smpl"
Name 86 "tex3.tex"
Name 88 "param"
Name 90 "param"
Name 99 "@entryPointOutput"
Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
Decorate 42(g_tInputTexture) DescriptorSet 0
Decorate 99(@entryPointOutput) Location 0
Name 69 "tex3"
Name 71 "param"
Name 80 "@entryPointOutput"
Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
Decorate 47(g_tInputTexture) DescriptorSet 0
Decorate 80(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeSampler
7: TypePointer Function 6
8: TypeFloat 32
9: TypeImage 8(float) 2D sampled format:Unknown
10: TypePointer Function 9
11: TypeVector 8(float) 4
12: TypeFunction 11(fvec4) 7(ptr) 10(ptr)
17(FxaaTex): TypeStruct 6 9
18: TypeFunction 17(FxaaTex)
21: TypeFunction 11(fvec4)
26: TypeSampledImage 9
28: TypeVector 8(float) 2
29: 8(float) Constant 1050253722
30: 8(float) Constant 1053609165
31: 28(fvec2) ConstantComposite 29 30
32: 8(float) Constant 0
37: TypePointer UniformConstant 6
38(g_tInputTexture_sampler): 37(ptr) Variable UniformConstant
41: TypePointer UniformConstant 9
42(g_tInputTexture): 41(ptr) Variable UniformConstant
44: TypePointer Function 17(FxaaTex)
54: TypeInt 32 1
55: 54(int) Constant 0
59: 54(int) Constant 1
62: TypePointer Function 11(fvec4)
98: TypePointer Output 11(fvec4)
99(@entryPointOutput): 98(ptr) Variable Output
7: TypeFloat 32
8: TypeImage 7(float) 2D sampled format:Unknown
9(FxaaTex): TypeStruct 6 8
10: TypePointer Function 9(FxaaTex)
11: TypeVector 7(float) 4
12: TypeFunction 11(fvec4) 10(ptr)
16: TypeFunction 9(FxaaTex)
19: TypeFunction 11(fvec4)
22: TypeInt 32 1
23: 22(int) Constant 1
24: TypePointer Function 8
27: 22(int) Constant 0
28: TypePointer Function 6
31: TypeSampledImage 8
33: TypeVector 7(float) 2
34: 7(float) Constant 1050253722
35: 7(float) Constant 1053609165
36: 33(fvec2) ConstantComposite 34 35
37: 7(float) Constant 0
42: TypePointer UniformConstant 6
43(g_tInputTexture_sampler): 42(ptr) Variable UniformConstant
46: TypePointer UniformConstant 8
47(g_tInputTexture): 46(ptr) Variable UniformConstant
57: TypePointer Function 11(fvec4)
79: TypePointer Output 11(fvec4)
80(@entryPointOutput): 79(ptr) Variable Output
4(main): 2 Function None 3
5: Label
100: 11(fvec4) FunctionCall 22(@main()
Store 99(@entryPointOutput) 100
81: 11(fvec4) FunctionCall 20(@main()
Store 80(@entryPointOutput) 81
Return
FunctionEnd
15(lookUp(struct-FxaaTex-p1-t211;): 11(fvec4) Function None 12
13(tex.smpl): 7(ptr) FunctionParameter
14(tex.tex): 10(ptr) FunctionParameter
16: Label
24: 9 Load 14(tex.tex)
25: 6 Load 13(tex.smpl)
27: 26 SampledImage 24 25
33: 11(fvec4) ImageSampleExplicitLod 27 31 Lod 32
ReturnValue 33
14(lookUp(struct-FxaaTex-p1-t211;): 11(fvec4) Function None 12
13(tex): 10(ptr) FunctionParameter
15: Label
25: 24(ptr) AccessChain 13(tex) 23
26: 8 Load 25
29: 28(ptr) AccessChain 13(tex) 27
30: 6 Load 29
32: 31 SampledImage 26 30
38: 11(fvec4) ImageSampleExplicitLod 32 36 Lod 37
ReturnValue 38
FunctionEnd
19(fillOpaque(): 17(FxaaTex) Function None 18
20: Label
36(t.smpl): 7(ptr) Variable Function
40(t.tex): 10(ptr) Variable Function
45(t): 44(ptr) Variable Function
39: 6 Load 38(g_tInputTexture_sampler)
Store 36(t.smpl) 39
43: 9 Load 42(g_tInputTexture)
Store 40(t.tex) 43
46: 17(FxaaTex) Load 45(t)
ReturnValue 46
17(fillOpaque(): 9(FxaaTex) Function None 16
18: Label
41(t): 10(ptr) Variable Function
44: 6 Load 43(g_tInputTexture_sampler)
45: 28(ptr) AccessChain 41(t) 27
Store 45 44
48: 8 Load 47(g_tInputTexture)
49: 24(ptr) AccessChain 41(t) 23
Store 49 48
50: 9(FxaaTex) Load 41(t)
ReturnValue 50
FunctionEnd
22(@main(): 11(fvec4) Function None 21
23: Label
49(flattenTemp): 44(ptr) Variable Function
53(tex1.smpl): 7(ptr) Variable Function
58(tex1.tex): 10(ptr) Variable Function
63(res): 62(ptr) Variable Function
64(param): 7(ptr) Variable Function
66(param): 10(ptr) Variable Function
69(flattenTemp): 44(ptr) Variable Function
71(tex2.smpl): 7(ptr) Variable Function
74(tex2.tex): 10(ptr) Variable Function
77(param): 7(ptr) Variable Function
79(param): 10(ptr) Variable Function
84(tex3.smpl): 7(ptr) Variable Function
86(tex3.tex): 10(ptr) Variable Function
88(param): 7(ptr) Variable Function
90(param): 10(ptr) Variable Function
50: 6 Load 38(g_tInputTexture_sampler)
51: 9 Load 42(g_tInputTexture)
52: 17(FxaaTex) CompositeConstruct 50 51
Store 49(flattenTemp) 52
56: 7(ptr) AccessChain 49(flattenTemp) 55
57: 6 Load 56
Store 53(tex1.smpl) 57
60: 10(ptr) AccessChain 49(flattenTemp) 59
61: 9 Load 60
Store 58(tex1.tex) 61
65: 6 Load 53(tex1.smpl)
20(@main(): 11(fvec4) Function None 19
21: Label
53(tex1): 10(ptr) Variable Function
58(res): 57(ptr) Variable Function
59(param): 10(ptr) Variable Function
62(tex2): 10(ptr) Variable Function
64(param): 10(ptr) Variable Function
69(tex3): 10(ptr) Variable Function
71(param): 10(ptr) Variable Function
54: 6 Load 43(g_tInputTexture_sampler)
55: 8 Load 47(g_tInputTexture)
56: 9(FxaaTex) CompositeConstruct 54 55
Store 53(tex1) 56
60: 9(FxaaTex) Load 53(tex1)
Store 59(param) 60
61: 11(fvec4) FunctionCall 14(lookUp(struct-FxaaTex-p1-t211;) 59(param)
Store 58(res) 61
63: 9(FxaaTex) FunctionCall 17(fillOpaque()
Store 62(tex2) 63
65: 9(FxaaTex) Load 62(tex2)
Store 64(param) 65
67: 9 Load 58(tex1.tex)
Store 66(param) 67
68: 11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 64(param) 66(param)
Store 63(res) 68
70: 17(FxaaTex) FunctionCall 19(fillOpaque()
Store 69(flattenTemp) 70
72: 7(ptr) AccessChain 69(flattenTemp) 55
73: 6 Load 72
Store 71(tex2.smpl) 73
75: 10(ptr) AccessChain 69(flattenTemp) 59
76: 9 Load 75
Store 74(tex2.tex) 76
78: 6 Load 71(tex2.smpl)
Store 77(param) 78
80: 9 Load 74(tex2.tex)
Store 79(param) 80
81: 11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 77(param) 79(param)
82: 11(fvec4) Load 63(res)
83: 11(fvec4) FAdd 82 81
Store 63(res) 83
85: 6 Load 53(tex1.smpl)
Store 84(tex3.smpl) 85
87: 9 Load 58(tex1.tex)
Store 86(tex3.tex) 87
89: 6 Load 84(tex3.smpl)
Store 88(param) 89
91: 9 Load 86(tex3.tex)
Store 90(param) 91
92: 11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 88(param) 90(param)
93: 11(fvec4) Load 63(res)
94: 11(fvec4) FAdd 93 92
Store 63(res) 94
95: 11(fvec4) Load 63(res)
ReturnValue 95
66: 11(fvec4) FunctionCall 14(lookUp(struct-FxaaTex-p1-t211;) 64(param)
67: 11(fvec4) Load 58(res)
68: 11(fvec4) FAdd 67 66
Store 58(res) 68
70: 9(FxaaTex) Load 53(tex1)
Store 69(tex3) 70
72: 9(FxaaTex) Load 69(tex3)
Store 71(param) 72
73: 11(fvec4) FunctionCall 14(lookUp(struct-FxaaTex-p1-t211;) 71(param)
74: 11(fvec4) Load 58(res)
75: 11(fvec4) FAdd 74 73
Store 58(res) 75
76: 11(fvec4) Load 58(res)
ReturnValue 76
FunctionEnd