Issue #28: Correctly handle a single input argument conversion when the input argument is an aggregate.

This commit is contained in:
John Kessenich 2015-07-21 16:00:34 -06:00
parent efb8461722
commit 8ba301c7c2
3 changed files with 30 additions and 3 deletions

View File

@ -187,6 +187,14 @@ Shader version: 400
0:62 Construct vec4 (temp 4-component vector of float)
0:62 Convert int to float (temp float)
0:62 'color' (temp int)
0:66 Function Definition: aggCall( (global void)
0:66 Function Parameters:
0:? Sequence
0:69 Function Call: m(vf2; (global 3-component vector of float)
0:69 Convert int to float (temp 2-component vector of float)
0:69 Construct ivec2 (temp 2-component vector of int)
0:69 Convert float to int (temp int)
0:69 'F' (temp float)
0:? Linker Objects
0:? 'u' (uniform float)
@ -380,6 +388,14 @@ Shader version: 400
0:62 Construct vec4 (temp 4-component vector of float)
0:62 Convert int to float (temp float)
0:62 'color' (temp int)
0:66 Function Definition: aggCall( (global void)
0:66 Function Parameters:
0:? Sequence
0:69 Function Call: m(vf2; (global 3-component vector of float)
0:69 Convert int to float (temp 2-component vector of float)
0:69 Construct ivec2 (temp 2-component vector of int)
0:69 Convert float to int (temp int)
0:69 'F' (temp float)
0:? Linker Objects
0:? 'u' (uniform float)

View File

@ -61,3 +61,10 @@ void main()
gl_FragColor = vec4(color);
}
vec3 m(vec2);
void aggCall()
{
float F;
m(ivec2(F)); // test input conversion of single argument that's an aggregate; other function tests in 120.vert
}

View File

@ -1239,10 +1239,14 @@ void TParseContext::addInputArgumentConversions(const TFunction& function, TInte
// convert to the correct type.
arg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg);
if (arg) {
if (aggregate)
aggregate->getSequence()[i] = arg;
else
if (function.getParamCount() == 1)
arguments = arg;
else {
if (aggregate)
aggregate->getSequence()[i] = arg;
else
arguments = arg;
}
}
}
}