| 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 |