blob: 6c5db4791e12b88d589f50e3d15915ca5d05da33 [file] [log] [blame]
group if "If Statements"
case single_statement
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 1.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
out0 = 0.0;
if (in0 >= 1.0)
out0 = 1.0;
${OUTPUT}
}
""
end
case compound_statement
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 1.0 ];
output float out1 = [ 1.0 | 0.0 | 0.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
out0 = 0.0;
out1 = 1.0;
if (in0 >= 1.0)
{
out0 = 1.0;
out1 = 0.0;
}
${OUTPUT}
}
""
end
case sequence_statements
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 1.0 ];
output float out1 = [ 1.0 | 0.0 | 0.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
out0 = 0.0;
out1 = 1.0;
if (in0 >= 1.0)
out0 = 1.0, out1 = 0.0;
${OUTPUT}
}
""
end
case sequence_condition
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 1.0 ];
output float out1 = [ 1.0 | 0.0 | 0.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
out0 = 0.0;
out1 = 1.0;
if (false, in0 >= 1.0)
out0 = 1.0, out1 = 0.0;
${OUTPUT}
}
""
end
case complex_condition
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 1.0 ];
output float out1 = [ 1.0 | 0.0 | 0.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
out0 = 0.0;
out1 = 1.0;
if (false || (in0 >= 1.0) && (in0 - 2.0*in0 < 0.0))
out0 = 1.0, out1 = 0.0;
${OUTPUT}
}
""
end
case if_else
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 1.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (in0 >= 1.0)
out0 = 1.0;
else
out0 = 0.0;
${OUTPUT}
}
""
end
case if_elseif
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 2.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
out0 = 0.0;
if (in0 >= 2.0)
out0 = 2.0;
else if (in0 >= 1.0)
out0 = 1.0;
${OUTPUT}
}
""
end
case if_elseif_else
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 2.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (in0 >= 2.0)
out0 = 2.0;
else if (in0 >= 1.0)
out0 = 1.0;
else
out0 = 0.0;
${OUTPUT}
}
""
end
case mixed_if_elseif_else
version 300 es
values
{
input float in0 = [ 0.0 | 1.0 | 2.0 ];
output float out0 = [ 0.0 | 1.0 | 2.0 ];
}
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (in0 >= 2.0)
{
out0 = 2.0;
}
else if (in0 >= 1.0)
out0 = 2.0, out0 = 1.0;
else
out0 = 0.0;
${OUTPUT}
}
""
end
case constant_conditional_assignment_to_matrix
version 300 es
vertex ""
#version 300 es
// This variant doesn't provoke the crash seen in the versions below.
${VERTEX_DECLARATIONS}
out mediump float FragVarying;
const float in0 = 0.0;
void main()
{
mat2 projectionMatrix = mat2(0.0, 0.0, 0.0, 0.0);
if (in0 == 1.0)
{
projectionMatrix[0][0] = 1.0;
}
FragVarying = 1.0;
gl_Position = dEQP_Position + vec4(projectionMatrix[1][0], 0.0, 0.0, 0.0);
}
""
fragment ""
#version 300 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
in mediump float FragVarying;
void main()
{
${FRAG_COLOR} = vec4(FragVarying, 1.0, 1.0, 1.0);
}
""
end
case input_conditional_assignment_to_matrix
version 300 es
values
{
input float in0 = [ 0.0 ];
}
vertex ""
#version 300 es
${VERTEX_DECLARATIONS}
out mediump float FragVarying; // Necessary to reproduce.
void main()
{
// Crashes with mat4 as well. Does not crash with vectors.
mat2 projectionMatrix = mat2(0.0, 0.0, 0.0, 0.0);
// Testing a non-constant variable is necessary.
if (in0 == 1.0)
{
// Using the matrix variable appears necessary.
projectionMatrix[0][0] = 1.0;
}
FragVarying = 1.0;
// Referencing the matrix is necessary though clearly the compiler
// doesn't realize the assignment is useless.
gl_Position = dEQP_Position + vec4(projectionMatrix[1][0], 0.0, 0.0, 0.0);
}
""
fragment ""
#version 300 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
in mediump float FragVarying;
void main()
{
${FRAG_COLOR} = vec4(FragVarying, 1.0, 1.0, 1.0);
}
""
end
case uniform_conditional_assignment_to_matrix
version 300 es
values
{
uniform float uni0 = [ 0.0 ];
}
vertex ""
#version 300 es
precision mediump float;
${VERTEX_DECLARATIONS}
out mediump float FragVarying; // Necessary to reproduce.
void main()
{
// Crashes with mat4 as well. Does not crash with vectors.
mat2 projectionMatrix = mat2(0.0, 0.0, 0.0, 0.0);
// Testing a non-constant variable is necessary.
if (uni0 == 1.0)
{
// Using the matrix variable appears necessary.
projectionMatrix[0][0] = 1.0;
}
FragVarying = 1.0;
// Referencing the matrix is necessary though clearly the compiler
// doesn't realize the assignment is useless.
gl_Position = dEQP_Position + vec4(projectionMatrix[1][0], 0.0, 0.0, 0.0);
}
""
fragment ""
#version 300 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
in mediump float FragVarying;
void main()
{
${FRAG_COLOR} = vec4(FragVarying, 1.0, 1.0, 1.0);
}
""
end
end # if
group invalid_if "Invalid If Conditionals"
case missing_parenthesis
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if true
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case unclosed_parenthesis
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (true
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case int_condition
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (5)
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case int_zero_condition
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (0)
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case int_one_condition
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (1)
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case int_uniform_condition
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
precision mediump int;
uniform int u0;
${DECLARATIONS}
void main()
{
if (u0)
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case float_condition
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (5.0)
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case float_zero_condition
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (0.0)
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case float_one_condition
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
${DECLARATIONS}
void main()
{
if (1.0)
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
case sampler_condition
version 300 es
expect compile_fail
both ""
#version 300 es
precision mediump float;
uniform sampler2D s0;
${DECLARATIONS}
void main()
{
if (s0)
${POSITION_FRAG_COLOR} = vec4(1.0);
}
""
end
end # invalid_if