case float_input version 300 es values { input float in0 = [ 1.123 | 0.75 | -512.0 | -72.13 | 199.91 | -1.123 | -0.75 | 512.0 | -72.13 | -199.91 ]; output float out0 = [ 1.123 | 0.75 | -512.0 | -72.13 | 199.91 | -1.123 | -0.75 | 512.0 | -72.13 | -199.91 ]; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = in0; ${OUTPUT} } "" end case float_uniform version 300 es values { uniform float uni0 = [ 1.123 | 0.75 | -512.0 | -72.13 | 199.91 ]; output float out0 = [ 1.123 | 0.75 | -512.0 | -72.13 | 199.91 ]; } both "" #version 300 es precision highp float; ${DECLARATIONS} uniform float uni0; void main() { out0 = uni0; ${OUTPUT} } "" end case float_0 version 300 es values { output float out0 = 1.123; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = +1.123; ${OUTPUT} } "" end case float_1 version 300 es values { output float out0 = -1.123; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = -1.123; ${OUTPUT} } "" end case float_2 version 300 es values { output float out0 = 123.0; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = 123.; ${OUTPUT} } "" end case float_3 version 300 es values { output float out0 = 0.123; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = .123; ${OUTPUT} } "" end case float_4 version 300 es values { output float out0 = 123.0; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = 1.23e+2; ${OUTPUT} } "" end case float_5 version 300 es values { output float out0 = -123.0; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = -1.23E+2; ${OUTPUT} } "" end case float_6 version 300 es values { output float out0 = -123.0; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = -1.23e2; ${OUTPUT} } "" end case float_7 version 300 es values { output float out0 = 0.123; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = 1.23e-1; ${OUTPUT} } "" end case float_8 version 300 es values { output float out0 = 1000.0; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = 1e3; ${OUTPUT} } "" end case float_f_suffix_0 version 300 es values { output float out0 = 1.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main () { ${SETUP} float value = 1.0f; out0 = value; ${OUTPUT} } "" end case float_f_suffix_1 version 300 es values { output float out0 = 1.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main () { ${SETUP} float value = 1.0F; out0 = value; ${OUTPUT} } "" end case int_0 version 300 es values { output int out0 = 123; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = 123; ${OUTPUT} } "" end case int_1 version 300 es values { output int out0 = -321; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = -321; ${OUTPUT} } "" end case int_2 version 300 es values { output int out0 = 123; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = 0x7B; ${OUTPUT} } "" end case int_3 version 300 es values { output int out0 = 123; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = 0X7b; ${OUTPUT} } "" end case int_4 version 300 es values { output int out0 = 123; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = 0173; ${OUTPUT} } "" end case bool_0 version 300 es values { output bool out0 = true; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = true; ${OUTPUT} } "" end case bool_1 version 300 es values { output bool out0 = false; } both "" #version 300 es precision highp float; ${DECLARATIONS} void main() { out0 = false; ${OUTPUT} } "" end case const_float_global version 300 es values { output float out0 = 1000.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant = 1000.0; void main() { out0 = theConstant; ${OUTPUT} } "" end case const_float_main version 300 es values { output float out0 = -1000.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main() { const float theConstant = -1000.0; out0 = theConstant; ${OUTPUT} } "" end case const_float_function version 300 es values { output float out0 = -0.012; } both "" #version 300 es precision mediump float; ${DECLARATIONS} float func() { const float theConstant = -0.012; return theConstant; } void main() { out0 = func(); ${OUTPUT} } "" end case const_float_scope version 300 es values { output float out0 = 1.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main() { { const float theConstant = 1.0; out0 = theConstant; } ${OUTPUT} } "" end case const_float_scope_shawdowing_1 version 300 es values { output float out0 = 1.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main() { const float theConstant = 100.0; { const float theConstant = 1.0; out0 = theConstant; } ${OUTPUT} } "" end case const_float_scope_shawdowing_2 version 300 es values { output float out0 = 1.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant = 100.0; void main() { { const float theConstant = 1.0; out0 = theConstant; } ${OUTPUT} } "" end case const_float_scope_shawdowing_3 version 300 es values { output float out0 = 1.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant = 100.0; void main() { const float theConstant = -100.0; { const float theConstant = 1.0; out0 = theConstant; } ${OUTPUT} } "" end case const_float_scope_shawdowing_4 version 300 es values { output float out0 = 2.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant = 100.0; float func() { const float theConstant = 2.0; return theConstant; } void main() { const float theConstant = -100.0; { const float theConstant = 1.0; out0 = func(); } ${OUTPUT} } "" end case const_float_operations_with_const version 300 es values { output float out0 = 21.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theGlobalConstant = 10.0; float func() { const float theConstant = 2.0; return theConstant; } void main() { const float theConstant = -100.0; { const float theConstant = 1.0; out0 = func() * theGlobalConstant + theConstant; } ${OUTPUT} } "" end case const_float_assignment_1 version 300 es values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main() { const float theConstant1 = 10.0; const float theConstant2 = theConstant1; out0 = theConstant2; ${OUTPUT} } "" end case const_float_assignment_2 version 300 es values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main() { const float theConstant1 = 10.0; { const float theConstant2 = theConstant1; out0 = theConstant2; } ${OUTPUT} } "" end case const_float_assignment_3 version 300 es values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant1 = 10.0; void main() { const float theConstant2 = theConstant1; out0 = theConstant2; ${OUTPUT} } "" end case const_float_assignment_4 version 300 es values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant1 = 10.0; float func() { const float theConstant2 = theConstant1; return theConstant2; } void main() { out0 = func(); ${OUTPUT} } "" end case const_float_assign_uniform version 300 es expect compile_fail values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} uniform float theUniform; void main() { const float theConstant = theUniform; out0 = theConstant; ${OUTPUT} } "" end case const_float_assign_varying version 300 es expect compile_fail values { output float out0 = 10.0; } vertex "" #version 300 es ${VERTEX_DECLARATIONS} out float theVarying; void main() { theVarying = 1.0; gl_Position = vec(1.0); } "" fragment "" #version 300 es precision mediump float; ${FRAGMENT_DECLARATIONS} in float theVarying; void main() { const float theConstant = theVarying; out0 = theConstant; ${FRAGMENT_OUTPUT} } "" end case const_float_function_gotcha version 300 es desc "Function constant parameters are not really constants, so using them as constant expressions should fail." expect compile_fail values { output float out0 = 20.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} float func(const float gotcha) { const float theConstant2 = gotcha; return theConstant2*2.0; } void main() { const float theConstant = 10.0; out0 = func(theConstant); ${OUTPUT} } "" end case const_float_from_int version 300 es values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant = float(10); void main() { out0 = theConstant; ${OUTPUT} } "" end case const_float_from_vec2 version 300 es values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant = vec2(1.0, 10.0).y; void main() { out0 = theConstant; ${OUTPUT} } "" end case const_float_from_vec3 version 300 es values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant = vec3(1.0, 10.0, 20.0).y; void main() { out0 = theConstant; ${OUTPUT} } "" end case const_float_from_vec4 version 300 es values { output float out0 = 10.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} const float theConstant = vec4(1.0, 10.0, 20.0, -10.0).y; void main() { out0 = theConstant; ${OUTPUT} } "" end case const_float_assign_variable_1 version 300 es expect compile_fail values { output float out0 = 20.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main() { float theVariable = 20.0; const float theConstant = theVariable; out0 = theConstant; ${OUTPUT} } "" end case const_float_assign_variable_2 version 300 es expect compile_fail values { output float out0 = 50.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} void main() { float theVariable = 20.0; theVariable += 30.0; const float theConstant = theVariable; out0 = theConstant; ${OUTPUT} } "" end case const_float_assign_user_func version 300 es expect compile_fail values { output float out0 = 50.0; } both "" #version 300 es precision mediump float; ${DECLARATIONS} float func() { return 50.0; } void main() { const float theConstant = func(); out0 = theConstant; ${OUTPUT} } "" end case const_mat_multiply version 300 es values { output vec2 out0 = vec2(4.0, 4.0); } both "" #version 300 es precision mediump float; ${DECLARATIONS} const mat4x2 matA = mat4x2(2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0); const mat4x2 matB = mat4x2(1.0/2.0, 1.0/4.0, 1.0/8.0, 1.0/16.0, 1.0/32.0, 1.0/64.0, 1.0/128.0, 1.0/256.0); void main() { mat4x2 result = matrixCompMult(matA, matB); out0 = result * vec4(1.0, 1.0, 1.0, 1.0); ${OUTPUT} } "" end case int_decimal version 300 es values { output int out0 = 7; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} int value = 7; out0 = value; ${OUTPUT} } "" end case int_octal version 300 es values { output int out0 = 15; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} int value = 017; out0 = value; ${OUTPUT} } "" end case int_hexadecimal_0 version 300 es values { output int out0 = 47; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} int value = 0x2f; out0 = value; ${OUTPUT} } "" end case int_hexadecimal_1 version 300 es values { output int out0 = 47; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} int value = 0X2f; out0 = value; ${OUTPUT} } "" end case uint_decimal_0 version 300 es values { output uint out0 = 7; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} uint value = 7u; out0 = value; ${OUTPUT} } "" end case uint_decimal_1 version 300 es values { output uint out0 = 7; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} uint value = 7U; out0 = value; ${OUTPUT} } "" end case uint_decimal_2 version 300 es values { output uint out0 = 0; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} uint value = 0u; out0 = value; ${OUTPUT} } "" end case uint_decimal_3 version 300 es values { output uint out0 = 0; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} uint value = 0U; out0 = value; ${OUTPUT} } "" end case uint_octal_0 version 300 es values { output uint out0 = 15; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} uint value = 017u; out0 = value; ${OUTPUT} } "" end case uint_octal_1 version 300 es values { output uint out0 = 15; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} uint value = 017U; out0 = value; ${OUTPUT} } "" end case uint_hexadecimal_0 version 300 es values { output uint out0 = 47; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} uint value = 0x2fU; out0 = value; ${OUTPUT} } "" end case uint_hexadecimal_1 version 300 es values { output uint out0 = 47; } both "" #version 300 es ${DECLARATIONS} void main () { ${SETUP} uint value = 0X2fu; out0 = value; ${OUTPUT} } "" end case int_from_uint expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { int value = 7u; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case int_from_uint_2 expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { int value = 0u; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case uint_from_int expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { uint value = 7; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case uint_from_int_2 expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { uint value = 0; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case int_from_float expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { int value = 7.0; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case uint_from_float expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { uint value = 7.0; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case bool_from_int expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { bool value = 1; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case bool_from_uint expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { bool value = 1u; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case bool_from_float expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { bool value = 1.0; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case float_int_f_suffix_0 expect compile_fail version 300 es both "" #version 300 es precision mediump float; ${DECLARATIONS} void main () { ${SETUP} float value = 1f; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case float_int_f_suffix_1 expect compile_fail version 300 es both "" #version 300 es precision mediump float; ${DECLARATIONS} void main () { ${SETUP} float value = 1F; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case int_l_suffix expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { int value = 1l; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case uint_ul_suffix expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { uint value = 1ul; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case invalid_octal_0 expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { int value = 018; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case invalid_octal_1 expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { uint value = 09U; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case invalid_hexadecimal_0 expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { int value = 0x2g7; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end case invalid_hexadecimal_1 expect compile_fail version 300 es both "" #version 300 es ${DECLARATIONS} void main () { uint value = 0X1h7u; ${POSITION_FRAG_COLOR} = vec4(0.0); } "" end