HLSL: Intercept flatten aggregates passed to a function input, and copy member-by-member.

This commit is contained in:
John Kessenich 2016-09-19 00:06:19 -06:00
parent f911500db8
commit 5159d4f1af
4 changed files with 275 additions and 98 deletions

View File

@ -2,37 +2,91 @@ hlsl.entry-in.frag
Shader version: 450 Shader version: 450
gl_FragCoord origin is upper left gl_FragCoord origin is upper left
0:? Sequence 0:? Sequence
0:8 Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (global 4-component vector of float) 0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; (global float)
0:8 Function Parameters: 0:8 Function Parameters:
0:8 '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: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:? Sequence
0:9 Branch: Return with expression
0:9 add (temp float)
0:9 direct index (temp 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 Constant:
0:9 0 (const int)
0:9 Constant:
0:9 1 (const int)
0:9 direct index (temp float)
0:9 fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
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 Constant:
0:9 1 (const int)
0:9 Constant:
0:9 0 (const int)
0:13 Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (global 4-component vector of float)
0:13 Function Parameters:
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:? Sequence 0:? Sequence
0:10 move second child to first child (temp 2-component vector of float) 0:15 move second child to first child (temp 2-component vector of float)
0:10 v: direct index for structure (temp 2-component vector of float) 0:15 v: direct index for structure (temp 2-component vector of float)
0:10 '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 '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:10 Constant: 0:15 Constant:
0:10 0 (const int) 0:15 0 (const int)
0:? 'v' (layout(location=0 ) in 2-component vector of float) 0:? 'v' (layout(location=0 ) in 2-component vector of float)
0:10 move second child to first child (temp 4-component vector of float) 0:15 move second child to first child (temp 4-component vector of float)
0:10 fragCoord: direct index for structure (temp 4-component vector of float FragCoord) 0:15 fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
0:10 '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 '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:10 Constant: 0:15 Constant:
0:10 1 (const int) 0:15 1 (const int)
0:? 'fragCoord' (in 4-component vector of float FragCoord) 0:? 'fragCoord' (in 4-component vector of float FragCoord)
0:10 move second child to first child (temp 2-component vector of int) 0:15 move second child to first child (temp 2-component vector of int)
0:10 i2: direct index for structure (temp 2-component vector of int) 0:15 i2: direct index for structure (temp 2-component vector of int)
0:10 '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 '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:10 Constant: 0:15 Constant:
0:10 2 (const int) 0:15 2 (const int)
0:? 'i2' (layout(location=1 ) in 2-component vector of int) 0:? 'i2' (layout(location=1 ) in 2-component vector of int)
0:12 Sequence 0:16 Sequence
0:12 move second child to first child (temp 4-component vector of float) 0:16 move second child to first child (temp float)
0:16 'ret1' (temp float)
0:16 Function Call: fun(struct-InParam-vf2-vf4-vi21; (global 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:17 Sequence
0:17 move second child to first child (temp float)
0:17 'ret2' (temp float)
0:17 Function Call: fun(struct-InParam-vf2-vf4-vi21; (global float)
0:? Comma (temp float)
0:? Sequence
0:? move second child to first child (temp 2-component vector of float)
0:? v: direct index for structure (temp 2-component vector of float)
0:? 'aggShadow' (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:? Constant:
0:? 0 (const int)
0:? 'v' (layout(location=0 ) in 2-component vector of float)
0:? move second child to first child (temp 4-component vector of float)
0:? fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
0:? 'aggShadow' (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:? Constant:
0:? 1 (const int)
0:? 'fragCoord' (in 4-component vector of float FragCoord)
0:? move second child to first child (temp 2-component vector of int)
0:? i2: direct index for structure (temp 2-component vector of int)
0:? 'aggShadow' (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:? Constant:
0:? 2 (const int)
0:? 'i2' (layout(location=1 ) in 2-component vector of int)
0:? 'aggShadow' (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:19 Sequence
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:12 fragCoord: direct index for structure (temp 4-component vector of float FragCoord) 0:19 vector-scale (temp 4-component vector of float)
0:12 '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 vector-scale (temp 4-component vector of float)
0:12 Constant: 0:19 fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
0:12 1 (const int) 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:12 Branch: Return 0:19 Constant:
0:19 1 (const int)
0:19 'ret1' (temp float)
0:19 'ret2' (temp float)
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:? 'v' (layout(location=0 ) in 2-component vector of float) 0:? 'v' (layout(location=0 ) in 2-component vector of float)
@ -46,37 +100,91 @@ Linked fragment stage:
Shader version: 450 Shader version: 450
gl_FragCoord origin is upper left gl_FragCoord origin is upper left
0:? Sequence 0:? Sequence
0:8 Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (global 4-component vector of float) 0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; (global float)
0:8 Function Parameters: 0:8 Function Parameters:
0:8 '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: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:? Sequence
0:9 Branch: Return with expression
0:9 add (temp float)
0:9 direct index (temp 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 Constant:
0:9 0 (const int)
0:9 Constant:
0:9 1 (const int)
0:9 direct index (temp float)
0:9 fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
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 Constant:
0:9 1 (const int)
0:9 Constant:
0:9 0 (const int)
0:13 Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (global 4-component vector of float)
0:13 Function Parameters:
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:? Sequence 0:? Sequence
0:10 move second child to first child (temp 2-component vector of float) 0:15 move second child to first child (temp 2-component vector of float)
0:10 v: direct index for structure (temp 2-component vector of float) 0:15 v: direct index for structure (temp 2-component vector of float)
0:10 '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 '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:10 Constant: 0:15 Constant:
0:10 0 (const int) 0:15 0 (const int)
0:? 'v' (layout(location=0 ) in 2-component vector of float) 0:? 'v' (layout(location=0 ) in 2-component vector of float)
0:10 move second child to first child (temp 4-component vector of float) 0:15 move second child to first child (temp 4-component vector of float)
0:10 fragCoord: direct index for structure (temp 4-component vector of float FragCoord) 0:15 fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
0:10 '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 '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:10 Constant: 0:15 Constant:
0:10 1 (const int) 0:15 1 (const int)
0:? 'fragCoord' (in 4-component vector of float FragCoord) 0:? 'fragCoord' (in 4-component vector of float FragCoord)
0:10 move second child to first child (temp 2-component vector of int) 0:15 move second child to first child (temp 2-component vector of int)
0:10 i2: direct index for structure (temp 2-component vector of int) 0:15 i2: direct index for structure (temp 2-component vector of int)
0:10 '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 '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:10 Constant: 0:15 Constant:
0:10 2 (const int) 0:15 2 (const int)
0:? 'i2' (layout(location=1 ) in 2-component vector of int) 0:? 'i2' (layout(location=1 ) in 2-component vector of int)
0:12 Sequence 0:16 Sequence
0:12 move second child to first child (temp 4-component vector of float) 0:16 move second child to first child (temp float)
0:16 'ret1' (temp float)
0:16 Function Call: fun(struct-InParam-vf2-vf4-vi21; (global 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:17 Sequence
0:17 move second child to first child (temp float)
0:17 'ret2' (temp float)
0:17 Function Call: fun(struct-InParam-vf2-vf4-vi21; (global float)
0:? Comma (temp float)
0:? Sequence
0:? move second child to first child (temp 2-component vector of float)
0:? v: direct index for structure (temp 2-component vector of float)
0:? 'aggShadow' (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:? Constant:
0:? 0 (const int)
0:? 'v' (layout(location=0 ) in 2-component vector of float)
0:? move second child to first child (temp 4-component vector of float)
0:? fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
0:? 'aggShadow' (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:? Constant:
0:? 1 (const int)
0:? 'fragCoord' (in 4-component vector of float FragCoord)
0:? move second child to first child (temp 2-component vector of int)
0:? i2: direct index for structure (temp 2-component vector of int)
0:? 'aggShadow' (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:? Constant:
0:? 2 (const int)
0:? 'i2' (layout(location=1 ) in 2-component vector of int)
0:? 'aggShadow' (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:19 Sequence
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:12 fragCoord: direct index for structure (temp 4-component vector of float FragCoord) 0:19 vector-scale (temp 4-component vector of float)
0:12 '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 vector-scale (temp 4-component vector of float)
0:12 Constant: 0:19 fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
0:12 1 (const int) 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:12 Branch: Return 0:19 Constant:
0:19 1 (const int)
0:19 'ret1' (temp float)
0:19 'ret2' (temp float)
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:? 'v' (layout(location=0 ) in 2-component vector of float) 0:? 'v' (layout(location=0 ) in 2-component vector of float)
@ -85,28 +193,35 @@ gl_FragCoord origin is upper left
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 37 // Id's are bound by 71
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 16 22 28 33 EntryPoint Fragment 4 "PixelShaderFunction" 32 37 43 63
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction" Name 4 "PixelShaderFunction"
Name 11 "InParam" Name 11 "InParam"
MemberName 11(InParam) 0 "v" MemberName 11(InParam) 0 "v"
MemberName 11(InParam) 1 "fragCoord" MemberName 11(InParam) 1 "fragCoord"
MemberName 11(InParam) 2 "i2" MemberName 11(InParam) 2 "i2"
Name 13 "local" Name 15 "fun(struct-InParam-vf2-vf4-vi21;"
Name 16 "v" Name 14 "p"
Name 22 "fragCoord" Name 30 "local"
Name 28 "i2" Name 32 "v"
Name 33 "@entryPointOutput" Name 37 "fragCoord"
Name 43 "i2"
Name 47 "ret1"
Name 48 "param"
Name 51 "ret2"
Name 52 "aggShadow"
Name 59 "param"
Name 63 "@entryPointOutput"
MemberDecorate 11(InParam) 1 BuiltIn FragCoord MemberDecorate 11(InParam) 1 BuiltIn FragCoord
Decorate 16(v) Location 0 Decorate 32(v) Location 0
Decorate 22(fragCoord) BuiltIn FragCoord Decorate 37(fragCoord) BuiltIn FragCoord
Decorate 28(i2) Location 1 Decorate 43(i2) Location 1
Decorate 33(@entryPointOutput) Location 0 Decorate 63(@entryPointOutput) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -116,34 +231,75 @@ gl_FragCoord origin is upper left
10: TypeVector 9(int) 2 10: TypeVector 9(int) 2
11(InParam): TypeStruct 7(fvec2) 8(fvec4) 10(ivec2) 11(InParam): TypeStruct 7(fvec2) 8(fvec4) 10(ivec2)
12: TypePointer Function 11(InParam) 12: TypePointer Function 11(InParam)
14: 9(int) Constant 0 13: TypeFunction 6(float) 12(ptr)
15: TypePointer Input 7(fvec2) 17: 9(int) Constant 0
16(v): 15(ptr) Variable Input 18: TypeInt 32 0
18: TypePointer Function 7(fvec2) 19: 18(int) Constant 1
20: 9(int) Constant 1 20: TypePointer Function 6(float)
21: TypePointer Input 8(fvec4) 23: 9(int) Constant 1
22(fragCoord): 21(ptr) Variable Input 24: 18(int) Constant 0
24: TypePointer Function 8(fvec4) 31: TypePointer Input 7(fvec2)
26: 9(int) Constant 2 32(v): 31(ptr) Variable Input
27: TypePointer Input 10(ivec2) 34: TypePointer Function 7(fvec2)
28(i2): 27(ptr) Variable Input 36: TypePointer Input 8(fvec4)
30: TypePointer Function 10(ivec2) 37(fragCoord): 36(ptr) Variable Input
32: TypePointer Output 8(fvec4) 39: TypePointer Function 8(fvec4)
33(@entryPointOutput): 32(ptr) Variable Output 41: 9(int) Constant 2
42: TypePointer Input 10(ivec2)
43(i2): 42(ptr) Variable Input
45: TypePointer Function 10(ivec2)
62: TypePointer Output 8(fvec4)
63(@entryPointOutput): 62(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3 4(PixelShaderFunction): 2 Function None 3
5: Label 5: Label
13(local): 12(ptr) Variable Function 30(local): 12(ptr) Variable Function
17: 7(fvec2) Load 16(v) 47(ret1): 20(ptr) Variable Function
19: 18(ptr) AccessChain 13(local) 14 48(param): 12(ptr) Variable Function
Store 19 17 51(ret2): 20(ptr) Variable Function
23: 8(fvec4) Load 22(fragCoord) 52(aggShadow): 12(ptr) Variable Function
25: 24(ptr) AccessChain 13(local) 20 59(param): 20(ptr) Variable Function
Store 25 23 33: 7(fvec2) Load 32(v)
29: 10(ivec2) Load 28(i2) 35: 34(ptr) AccessChain 30(local) 17
31: 30(ptr) AccessChain 13(local) 26 Store 35 33
Store 31 29 38: 8(fvec4) Load 37(fragCoord)
34: 24(ptr) AccessChain 13(local) 20 40: 39(ptr) AccessChain 30(local) 23
35: 8(fvec4) Load 34 Store 40 38
Store 33(@entryPointOutput) 35 44: 10(ivec2) Load 43(i2)
46: 45(ptr) AccessChain 30(local) 41
Store 46 44
49: 11(InParam) Load 30(local)
Store 48(param) 49
50: 6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 48(param)
Store 47(ret1) 50
53: 7(fvec2) Load 32(v)
54: 34(ptr) AccessChain 52(aggShadow) 17
Store 54 53
55: 8(fvec4) Load 37(fragCoord)
56: 39(ptr) AccessChain 52(aggShadow) 23
Store 56 55
57: 10(ivec2) Load 43(i2)
58: 45(ptr) AccessChain 52(aggShadow) 41
Store 58 57
60: 11(InParam) Load 52(aggShadow)
Store 59(param) 60
61: 6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 59(param)
Store 51(ret2) 61
64: 39(ptr) AccessChain 30(local) 23
65: 8(fvec4) Load 64
66: 6(float) Load 47(ret1)
67: 8(fvec4) VectorTimesScalar 65 66
68: 6(float) Load 51(ret2)
69: 8(fvec4) VectorTimesScalar 67 68
Store 63(@entryPointOutput) 69
Return Return
FunctionEnd FunctionEnd
15(fun(struct-InParam-vf2-vf4-vi21;): 6(float) Function None 13
14(p): 12(ptr) FunctionParameter
16: Label
21: 20(ptr) AccessChain 14(p) 17 19
22: 6(float) Load 21
25: 20(ptr) AccessChain 14(p) 23 24
26: 6(float) Load 25
27: 6(float) FAdd 22 26
ReturnValue 27
FunctionEnd

View File

@ -4,10 +4,17 @@ struct InParam {
int2 i2; int2 i2;
}; };
float fun(InParam p)
{
return p.v.y + p.fragCoord.x;
}
float4 PixelShaderFunction(InParam i) : COLOR0 float4 PixelShaderFunction(InParam i) : COLOR0
{ {
InParam local; InParam local;
local = i; local = i;
float ret1 = fun(local);
float ret2 = fun(i);
return local.fragCoord; return local.fragCoord * ret1 * ret2;
} }

View File

@ -3,4 +3,4 @@
// For the date, it uses the current date (when then script is run). // For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "Overload400-PrecQual.1493" #define GLSLANG_REVISION "Overload400-PrecQual.1493"
#define GLSLANG_DATE "18-Sep-2016" #define GLSLANG_DATE "19-Sep-2016"

View File

@ -2241,6 +2241,16 @@ TIntermTyped* HlslParseContext::handleLengthMethod(const TSourceLoc& loc, TFunct
void HlslParseContext::addInputArgumentConversions(const TFunction& function, TIntermNode*& arguments) const void HlslParseContext::addInputArgumentConversions(const TFunction& function, TIntermNode*& arguments) const
{ {
TIntermAggregate* aggregate = arguments->getAsAggregate(); TIntermAggregate* aggregate = arguments->getAsAggregate();
const auto setArg = [&](int argNum, TIntermNode* arg) {
if (function.getParamCount() == 1)
arguments = arg;
else {
if (aggregate)
aggregate->getSequence()[argNum] = arg;
else
arguments = arg;
}
};
// Process each argument's conversion // Process each argument's conversion
for (int i = 0; i < function.getParamCount(); ++i) { for (int i = 0; i < function.getParamCount(); ++i) {
@ -2254,16 +2264,20 @@ void HlslParseContext::addInputArgumentConversions(const TFunction& function, TI
// convert to the correct type. // convert to the correct type.
arg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg); arg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg);
arg = intermediate.addShapeConversion(EOpFunctionCall, *function[i].type, arg); arg = intermediate.addShapeConversion(EOpFunctionCall, *function[i].type, arg);
if (arg) { setArg(i, arg);
if (function.getParamCount() == 1) }
arguments = arg; } else {
else { if (shouldFlatten(arg->getType())) {
if (aggregate) TSourceLoc dummyLoc;
aggregate->getSequence()[i] = arg; dummyLoc.init();
else TVariable* internalAggregate = makeInternalVariable("aggShadow", *function[i].type);
arguments = arg; TIntermSymbol* internalSymbolNode = new TIntermSymbol(internalAggregate->getUniqueId(),
} internalAggregate->getName(),
} internalAggregate->getType());
TIntermAggregate* assignAgg = handleAssign(dummyLoc, EOpAssign, internalSymbolNode, arg)->getAsAggregate();
assignAgg = intermediate.growAggregate(assignAgg, internalSymbolNode);
assignAgg->setOperator(EOpComma);
setArg(i, assignAgg);
} }
} }
} }