| group basic "Basic Tests" |
| |
| case correct_phases |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #define e +1 |
| ${DECLARATIONS} |
| void main() |
| { |
| mediump int n = 1e; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case invalid_identifier |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #define e +1 |
| ${DECLARATIONS} |
| void main() |
| { |
| mediump int 1xyz = 1; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case null_directive |
| version 300 es |
| values { output float out0 = 0.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| |
| # |
| # // comment |
| /*sfd*/ # /* */ |
| |
| void main() |
| { |
| out0 = 0.0; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case invalid_directive |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #defin AAA |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case missing_identifier |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #define |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case empty_object |
| version 300 es |
| values { output float out0 = -1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| |
| # define VALUE |
| |
| void main() |
| { |
| out0 = VALUE - 1.0; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case empty_function |
| version 300 es |
| values { output float out0 = -1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| |
| # define VALUE(a) |
| |
| void main() |
| { |
| out0 = VALUE(2.0) - 1.0; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case empty_directive |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| |
| # |
| |
| void main() |
| { |
| out0 = 1.0; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case identifier_with_double_underscore |
| values { output float out0 = 1.0; } |
| version 300 es |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define __VALUE__ 1 |
| |
| void main() |
| { |
| // __VALUE__ not used since it might be set by an "underlying software layer" |
| out0 = float(1.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| end # basic |
| |
| group definitions "Symbol Definition Tests" |
| |
| case define_value_and_function |
| version 300 es |
| values { output float out0 = 6.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS:single-line} |
| # define VALUE (1.5 + 2.5) |
| # define FUNCTION(__LINE__, b) __LINE__+b |
| |
| void main() |
| { |
| out0 = FUNCTION(VALUE, ((0.2) + 1.8) ); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case undefine_object_invalid_syntax |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define VAL 2.0 |
| #undef VAL sdflkjfds |
| #define VAL 1.0 |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(VAL); |
| } |
| "" |
| end |
| |
| case undefine_invalid_object_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #undef __LINE__ |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(__LINE__); |
| } |
| "" |
| end |
| |
| case undefine_invalid_object_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #undef __FILE__ |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(__FILE__); |
| } |
| "" |
| end |
| |
| case undefine_invalid_object_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #undef __VERSION__ |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(__VERSION__); |
| } |
| "" |
| end |
| |
| case undefine_invalid_object_4 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #undef GL_ES |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(GL_ES); |
| } |
| "" |
| end |
| |
| case undefine_function |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define FUNCTION(a,b) a+b |
| #undef FUNCTION |
| #define FUNCTION(a,b) a-b |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| out0 = FUNCTION(3.0, 2.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # definitions |
| |
| group invalid_definitions "Invalid Definition Tests" |
| |
| case define_non_identifier |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define 123 321 |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case undef_non_identifier_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #undef 123 |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case undef_non_identifier_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #undef foo.bar |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| |
| end # invalid_definitions |
| |
| group object_redefinitions "Object Redefinition Tests" |
| |
| case invalid_object_ident |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA 2.0 |
| # define AAAA 2.1 |
| # define VALUE (AAA - 1.0) |
| # define VALUE (AAAA - 1.0) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(VALUE); |
| } |
| "" |
| end |
| |
| case invalid_object_whitespace |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA 2.0 |
| # define VALUE (AAA - 1.0) |
| # define VALUE (AAA- 1.0) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(VALUE); |
| } |
| "" |
| end |
| |
| case invalid_object_op |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA 2.0 |
| # define VALUE (AAA - 1.0) |
| # define VALUE (AAA + 1.0) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(VALUE); |
| } |
| "" |
| end |
| |
| case invalid_object_floatval_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA 2.0 |
| # define VALUE (AAA - 1.0) |
| # define VALUE (AAA - 1.1) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(VALUE); |
| } |
| "" |
| end |
| |
| case invalid_object_floatval_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA 2.0 |
| # define VALUE (AAA - 1.0) |
| # define VALUE (AAA - 1.0e-1) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(VALUE); |
| } |
| "" |
| end |
| |
| case invalid_object_intval_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA 2 |
| # define VALUE (AAA - 1) |
| # define VALUE (AAA - 2) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(VALUE); |
| } |
| "" |
| end |
| |
| case invalid_object_intval_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA 2 |
| # define VALUE (AAA - 1) |
| # define VALUE (AAA - 0x1) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(VALUE); |
| } |
| "" |
| end |
| |
| case redefine_object_1 |
| version 300 es |
| values { output float out0 = 6.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define VAL1 1.0 |
| #define VAL2 2.0 |
| |
| #define RES2 (RES1 * VAL2) |
| #define RES1 (VAL2 / VAL1) |
| #define RES2 (RES1 * VAL2) |
| #define VALUE (RES2 + RES1) |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case redefine_object_ifdef |
| version 300 es |
| values { output float out0 = 1.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define ADEFINE 1 |
| #define ADEFINE 1 |
| |
| #ifdef ADEFINE |
| #define VALUE 1.0 |
| #else |
| #define VALUE 0.0 |
| #endif |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case redefine_object_undef_ifdef |
| version 300 es |
| values { output float out0 = 1.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define ADEFINE 1 |
| #define ADEFINE 1 |
| #undef ADEFINE |
| |
| #ifdef ADEFINE |
| #define VALUE 0.0 |
| #else |
| #define VALUE 1.0 |
| #endif |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case redefine_object_ifndef |
| version 300 es |
| values { output float out0 = 1.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define ADEFINE 1 |
| #define ADEFINE 1 |
| |
| #ifndef ADEFINE |
| #define VALUE 0.0 |
| #else |
| #define VALUE 1.0 |
| #endif |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case redefine_object_defined_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define ADEFINE 1 |
| #define ADEFINE 1 |
| |
| #if defined(ADEFINE) |
| #define VALUE 1.0 |
| #else |
| #define VALUE 0.0 |
| #endif |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case redefine_object_defined_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define ADEFINE 1 |
| #define ADEFINE 1 |
| |
| #if defined ADEFINE |
| #define VALUE 1.0 |
| #else |
| #define VALUE 0.0 |
| #endif |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case redefine_object_comment |
| version 300 es |
| values { output float out0 = 6.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define VAL1 1.0 |
| #define VAL2 2.0 |
| |
| #define RES2 /* fdsjklfdsjkl dsfjkhfdsjkh fdsjklhfdsjkh */ (RES1 * VAL2) |
| #define RES1 (VAL2 / VAL1) |
| #define RES2 /* ewrlkjhsadf */ (RES1 * VAL2) |
| #define VALUE (RES2 + RES1) |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case redefine_object_multiline_comment |
| version 300 es |
| values { output float out0 = 6.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define VAL1 1.0 |
| #define VAL2 2.0 |
| |
| #define RES2 /* fdsjklfdsjkl |
| dsfjkhfdsjkh |
| fdsjklhfdsjkh */ (RES1 * VAL2) |
| #define RES1 (VAL2 / VAL1) |
| #define RES2 /* ewrlkjhsadf */ (RES1 * VAL2) |
| #define VALUE (RES2 + RES1) |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # object_redefinitions |
| |
| group invalid_redefinitions "Invalid Redefinitions Tests" |
| |
| case invalid_identifier_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define GL_VALUE 1.0 |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(GL_VALUE); |
| } |
| "" |
| end |
| |
| end # invalid_redefinitions |
| |
| group comments "Comment Tests" |
| |
| case multiline_comment_define |
| version 300 es |
| values { output float out0 = 4.2; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define VALUE /* current |
| value */ 4.2 |
| |
| void main() |
| { |
| out0 = VALUE; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case nested_comment |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = 0.0; |
| /* /* */ |
| out0 = 1.0; |
| // */ |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case comment_trick_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| /*/ |
| out0 = 0.0; |
| /*/ |
| out0 = 1.0; |
| /**/ |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case comment_trick_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| /**/ |
| out0 = 1.0; |
| /*/ |
| out0 = 0.0; |
| /**/ |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case invalid_comment |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| /* /* */ */ |
| ${POSITION_FRAG_COLOR} = 1.0; |
| } |
| "" |
| end |
| |
| case unterminated_comment_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| /* |
| } |
| "" |
| end |
| |
| case unterminated_comment_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| /* |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| } |
| "" |
| end |
| |
| case backslash_in_a_comment_1 |
| version 300 es |
| expect build_successful |
| both "" |
| #version 300 es |
| // \\note these are some declarations |
| precision mediump float; |
| ${DECLARATIONS} |
| // \\note this is the main function |
| void main() |
| { |
| // \\note this is a function body |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case backslash_in_a_comment_2 |
| version 300 es |
| expect build_successful |
| both "" |
| #version 300 es |
| /* \\note these are some declarations */ |
| precision mediump float; |
| ${DECLARATIONS} |
| /* \\note this is the main function */ |
| void main() |
| { |
| /* \\note this is a function body */ |
| ${OUTPUT} |
| } |
| "" |
| end |
| end # comments |
| |
| group line_continuation "Line Continuation Tests" |
| |
| case comment |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| |
| void main () |
| { |
| out0 = 1.0; |
| // comment \\ |
| out0 = -1.0; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case define |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define A(X) \\ |
| (-1.0*(X)) |
| |
| void main () |
| { |
| out0 = A(-1.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case preprocessing_token |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #def\\ |
| ine A(X) (-1.0*(X)) |
| |
| void main () |
| { |
| out0 = A(-1.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case token |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| |
| void main () |
| { |
| float f\\ |
| oo = 1.0; |
| out0 = foo; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case middle_of_line |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define A a \\ b |
| #define B 1.0 |
| |
| void main () |
| { |
| out0 = B; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # line_continuation |
| |
| group function_definitions "Function Definitions Tests" |
| |
| case same_object_and_function_param |
| version 300 es |
| values { output float out0 = 1.0; } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define VALUE 1.0 |
| #define FUNCTION(VALUE, B) (VALUE-B) |
| |
| void main() |
| { |
| out0 = FUNCTION(3.0, 2.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case complex_func |
| version 300 es |
| values { output float out0 = 518.5; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define AAA(a,b) a*(BBB(a,b)) |
| #define BBB(a,b) a-b |
| |
| void main() |
| { |
| out0 = BBB(AAA(8.0/4.0, 2.0)*BBB(2.0*2.0,0.75*2.0), AAA(40.0,10.0*BBB(5.0,3.0))); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case function_definition_with_comments |
| version 300 es |
| values { output float out0 = 3.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| /* sdfljk */ #/* sdfljk */define /* sdfljk */ FUNC( /* jklsfd*/a /*sfdjklh*/, /*sdfklj */b /*sdfklj*/) a+b |
| |
| void main() |
| { |
| out0 = FUNC(1.0, 2.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # function_definitions |
| |
| group recursion "Recursions Tests" |
| |
| case recursion_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA AAA |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(AAA); |
| } |
| "" |
| end |
| |
| case recursion_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA BBB |
| #define BBB AAA |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(AAA); |
| } |
| "" |
| end |
| |
| case recursion_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA (1.0+BBB) |
| #define BBB (2.0+AAA) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(AAA); |
| } |
| "" |
| end |
| |
| case recursion_4 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA(a) AAA(a) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(AAA(1.0)); |
| } |
| "" |
| end |
| |
| case recursion_5 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| # define AAA(a, b) AAA(b, a) |
| |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(AAA(1.0, 2.0)); |
| } |
| "" |
| end |
| |
| end # recursion |
| |
| group function_redefinitions "Function Redefinition Tests" |
| |
| case function_redefinition_1 |
| version 300 es |
| values { output float out0 = 3.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| # define FUNC( a, b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = FUNC(1.0, 2.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case function_redefinition_2 |
| version 300 es |
| values { output float out0 = 3.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) (a +b) |
| # define FUNC( a, b )(a +b) |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = FUNC(1.0, 2.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case function_redefinition_3 |
| version 300 es |
| values { output float out0 = 3.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) (a +b) |
| # define FUNC(a,b)(a /* comment |
| */ +b) |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = FUNC(1.0, 2.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case invalid_function_redefinition_param_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| # define FUNC(A,b) A+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0)); |
| } |
| "" |
| end |
| |
| case invalid_function_redefinition_param_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| # define FUNC(a,b,c) a+b+c |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0, 3.0)); |
| } |
| "" |
| end |
| |
| case invalid_function_redefinition_param_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| # define FUNC(a,b) b+a |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0)); |
| } |
| "" |
| end |
| |
| end # functions_redefinitions |
| |
| group invalid_function_definitions "Invalid Function Definition Tests" |
| |
| case arguments_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC); |
| } |
| "" |
| end |
| |
| case arguments_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC()); |
| } |
| "" |
| end |
| |
| case arguments_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(((); |
| } |
| "" |
| end |
| |
| case arguments_4 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC)); |
| } |
| "" |
| end |
| |
| case arguments_5 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0)); |
| } |
| "" |
| end |
| |
| case arguments_6 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0); |
| } |
| "" |
| end |
| |
| case arguments_7 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,)); |
| } |
| "" |
| end |
| |
| case arguments_8 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0, 3.0)); |
| } |
| "" |
| end |
| |
| case unique_param_name |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a,a) a+a |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0)); |
| } |
| "" |
| end |
| |
| case argument_list_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0)); |
| } |
| "" |
| end |
| |
| case argument_list_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(a + b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0)); |
| } |
| "" |
| end |
| |
| case argument_list_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(,a,b) a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0)); |
| } |
| "" |
| end |
| |
| case no_closing_parenthesis_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC( |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0)); |
| } |
| "" |
| end |
| |
| case no_closing_parenthesis_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(A a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0)); |
| } |
| "" |
| end |
| |
| case no_closing_parenthesis_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC(A,B,C a+b |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0)); |
| } |
| "" |
| end |
| |
| case no_closing_parenthesis_4 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| # define FUNC( |
| "" |
| end |
| |
| end # invalid_function_definitions |
| |
| group semantic "Semantic Tests" |
| |
| case ops_as_arguments |
| version 300 es |
| values { output float out0 = 20.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define FOO(a, b) (1 a 9) b 2 |
| |
| void main() |
| { |
| out0 = float(FOO(+, *)); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case correct_order |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define FUNC(A) A |
| #define A 2.0 |
| |
| void main() |
| { |
| out0 = FUNC(A - 1.0); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # semantic |
| |
| group predefined_macros "Predefined Macros Tests" |
| |
| case version |
| version 300 es |
| values { output float out0 = 300.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define AAA __VERSION__ |
| out0 = float(AAA); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case gl_es_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| |
| void main() |
| { |
| out0 = float(GL_ES); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case gl_es_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define AAA(A) A |
| |
| void main() |
| { |
| out0 = float(AAA(GL_ES)); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case line_1 |
| version 300 es |
| values { output float out0 = 2.0; } |
| both "" |
| #version 300 es |
| const mediump int line = __LINE__; |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = float(line); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case line_2 |
| version 300 es |
| # Note: Arguments are macro replaced in the first stage. |
| # Macro replacement list is expanded in the last stage. |
| values { output vec4 out0 = vec4(12.0, 12.0, 10.0, 11.0); } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS:single-line} |
| #define BBB __LINE__, /* |
| */ __LINE__ |
| #define AAA(a,b) BBB, a, b |
| |
| void main() |
| { |
| out0 = vec4(AAA(__LINE__, |
| __LINE__ |
| )); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case file |
| version 300 es |
| values { output float out0 = 0.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = float(__FILE__); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case if_gl_es |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if GL_ES |
| out0 = 1.0; |
| #else |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case if_version |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if __VERSION__ == 300 |
| out0 = 1.0; |
| #else |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # predefined_macros |
| |
| group conditional_inclusion "Conditional Inclusion Tests" |
| |
| case basic_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define AAA asdf |
| |
| #if defined AAA && !defined(BBB) |
| out0 = 1.0; |
| #else |
| out0 = 0.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case basic_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define AAA defined(BBB) |
| |
| #if !AAA |
| out0 = 1.0; |
| #else |
| out0 = 0.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case defined_macro_defined_test |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define AAA defined |
| |
| #if AAA AAA |
| out0 = 1.0; |
| #else |
| out0 = 0.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case defined_macro_undef |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define BBB 1 |
| #define AAA defined(BBB) |
| #undef BBB |
| |
| #if !AAA |
| out0 = 1.0; |
| #else |
| out0 = 0.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case define_defined |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define CCC 1 |
| #define defined BBB |
| #define AAA defined |
| |
| #if AAA CCC |
| out0 = 1.0; |
| #else |
| out0 = 0.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case define_defined_outside_if |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define CCC - 0.5 |
| #define defined 0.5 |
| #define AAA defined |
| out0 = 1.0 - (AAA CCC); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case defined_invalid_before_all_macros_replaced |
| version 300 es |
| expect compile_fail |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define FOO 1 |
| #define OPEN defined( |
| #define CLOSE FOO) |
| |
| #if OPEN CLOSE |
| out0 = 1.0; |
| #else |
| out0 = 0.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case basic_3 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 |
| out0 = -1.0; |
| #elif 0 |
| out0 = -2.0; |
| #elif 1 |
| out0 = 1.0; |
| #else |
| out0 = -3.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case basic_4 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 |
| out0 = -1.0; |
| #elif 0 |
| out0 = -2.0; |
| #else |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case basic_5 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 |
| out0 = 1.0; |
| #elif 0 |
| out0 = -2.0; |
| #else |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case unary_ops_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if !((~2 >> 1) & 1) |
| out0 = 1.0; |
| #else |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case unary_ops_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if !((~(- - - - - 1 + + + + + +1) >> 1) & 1) |
| out0 = -1.0; |
| #else |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # conditional_inclusion |
| |
| group invalid_ops "Invalid Operations Tests" |
| |
| case invalid_op_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if !((~(+ ++1 - - - -1) >> 1) & 1) |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case invalid_op_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if !((~(+ + +1 - -- -1) >> 1) & 1) |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case invalid_defined_expected_identifier_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define AAA 1 |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| #if defined |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case invalid_defined_expected_identifier_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define AAA 1 |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| #if defined() |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case invalid_defined_expected_identifier_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define AAA 1 |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| #if defined( |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case invalid_defined_expected_identifier_4 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define AAA 1 |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| #if defined) |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case invalid_defined_expected_identifier_5 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define AAA 1 |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| #if defined((AAA)) |
| ${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0); |
| #endif |
| } |
| "" |
| end |
| |
| case invalid_defined_expected_rparen |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| #define AAA 1 |
| |
| ${DECLARATIONS} |
| void main() |
| { |
| #if defined(AAA |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case defined_define |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define define 1 |
| #define AAA 1.0 |
| |
| void main() |
| { |
| out0 = AAA; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # invalid_ops |
| |
| group undefined_identifiers "Undefined Identifiers Tests" |
| |
| case valid_undefined_identifier_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 || AAA |
| out0 = 1.0; |
| #else |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case valid_undefined_identifier_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 && AAA |
| out0 = -1.0; |
| #else |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case undefined_identifier_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 - CCC + (-AAA || BBB) |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if !A |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if -A |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_4 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if ~A |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_5 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if A && B |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_6 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define A 1 |
| #if A && B |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_7 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define B 1 |
| #if A && B |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_8 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define B 1 |
| #define A 2 |
| #undef A |
| #if A && B |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_9 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if A || B |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_10 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define A 0 |
| #if A || B |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_11 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define A 0 |
| #define B 2 |
| #undef B |
| #if A || B |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case undefined_identifier_12 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define B 1 |
| #if A || B |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| end # undefined_identifiers |
| |
| group invalid_conditionals "Invalid Conditionals Tests" |
| |
| case empty_if |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case empty_ifdef |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifdef |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case empty_ifndef |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifndef |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case invalid_ifdef |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifdef 1 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case invalid_ifndef |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifndef 1 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case empty_if_defined |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if defined |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_if_1 |
| 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 unterminated_if_2 |
| 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 unterminated_ifdef |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifdef FOOBAR |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_ifndef |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifndef GL_ES |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_else_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_else_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_elif_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 |
| #elif 1 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_elif_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 |
| #elif 0 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_elif_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 |
| #elif 0 |
| ${POSITION_FRAG_COLOR} = vec4(2.0); |
| } |
| "" |
| end |
| |
| case elif_after_else |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #elif 1 |
| ${POSITION_FRAG_COLOR} = vec4(0.0); |
| #endif |
| } |
| "" |
| end |
| |
| case else_without_if |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case elif_without_if |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #elif 1 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case endif_without_if |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case else_after_else |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if !GL_ES |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #else |
| ${POSITION_FRAG_COLOR} = vec4(-1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case nested_elif_without_if |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| # elif |
| ${POSITION_FRAG_COLOR} = vec4(0.0); |
| # endif |
| #endif |
| } |
| "" |
| end |
| |
| case if_float |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1.231 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| # elif |
| ${POSITION_FRAG_COLOR} = vec4(0.0); |
| # endif |
| #endif |
| } |
| "" |
| end |
| |
| case tokens_after_if |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 foobar |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case tokens_after_elif |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 |
| #elif foobar |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| #endif |
| } |
| "" |
| end |
| |
| case tokens_after_else |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 |
| #else foobar 1.231 |
| #endif |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case tokens_after_endif |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 |
| #else |
| #endif foobar |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case tokens_after_ifdef |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifdef FOOBAR foobar |
| #else |
| #endif |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case tokens_after_ifndef |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifndef FOOBAR ,, +- << barbar |
| #else |
| #endif |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_nested_blocks |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 |
| # if 1 |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| end # invalid_conditionals |
| |
| group conditionals "Conditionals Tests" |
| |
| case ifdef_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| #define AAA |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifdef AAA |
| out0 = 1.0; |
| #else |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case ifdef_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| #define AAA |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if defined ( AAA) |
| out0 = 1.0; |
| #else |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case ifdef_3 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifdef AAA |
| out0 = -1.0; |
| #else |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case ifndef_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifndef AAA |
| out0 = 1.0; |
| #else |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case ifndef_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| #define AAA |
| void main() |
| { |
| #ifndef AAA |
| out0 = -1.0; |
| #else |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case mixed_conditional_inclusion |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #ifndef AAA |
| out0 = 1.0; |
| #elif 1 |
| out0 = -1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case nested_if_1 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if GL_ES |
| # if __VERSION__ != 300 |
| out0 = -1.0; |
| # else |
| out0 = 1.0; |
| # endif |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case nested_if_2 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 1 |
| # if 0 |
| out0 = -1.0; |
| # else |
| # if 0 |
| out0 = -1.0; |
| # elif 1 |
| out0 = 1.0; |
| # else |
| out0 = -1.0; |
| # endif |
| # endif |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case nested_if_3 |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #if 0 |
| # if 1 |
| out0 = -1.0; |
| # endif |
| #else |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # conditionals |
| |
| group directive "Directive Tests" |
| |
| case version_is_less |
| expect compile_fail |
| version 300 es |
| both "" |
| #version 299 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case version_is_more |
| expect compile_fail |
| version 300 es |
| both "" |
| #version 301 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case version_missing_es |
| expect compile_fail |
| version 300 es |
| both "" |
| #version 300 |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case version_missing |
| expect compile_fail |
| version 300 es |
| both "" |
| #version |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case version_not_first_statement_1 |
| expect compile_fail |
| version 300 es |
| both "" |
| precision mediump float; |
| #version 300 es |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case version_not_first_statement_2 |
| expect compile_fail |
| version 300 es |
| both "" |
| #define FOO BAR |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case version_invalid_token_1 |
| expect compile_fail |
| version 300 es |
| both "" |
| #version 300 es.0 |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case version_invalid_token_2 |
| expect compile_fail |
| version 300 es |
| both "" |
| #version foobar |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case invalid_version |
| expect compile_fail |
| version 300 es |
| both "" |
| #version AAA |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case additional_tokens |
| expect compile_fail |
| version 300 es |
| both "" |
| #version 300 es foobar |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case error_with_no_tokens |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #error |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case error |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #define AAA asdf |
| #error 1 * AAA /* comment */ |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| end # directive |
| |
| group builtin "Built-in Symbol Tests" |
| |
| case line |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #line 1 |
| out0 = float(__LINE__); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case line_and_file |
| version 300 es |
| values { output vec4 out0 = vec4(234.0, 234.0, 10.0, 10.0); } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #line 234 10 |
| out0 = vec4(__LINE__, __LINE__, __FILE__, __FILE__); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case line_defined_1 |
| version 300 es |
| values { output float out0 = 4.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define A 4 |
| #line A |
| out0 = float(__LINE__); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case line_defined_2 |
| version 300 es |
| values { output vec4 out0 = vec4(234.0, 234.0, 10.0, 10.0); } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define A 10 |
| #line 234 A |
| out0 = vec4(__LINE__, __LINE__, __FILE__, __FILE__); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case empty_line |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #line |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case invalid_line_file_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #line 22 1.234 |
| ${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__); |
| } |
| "" |
| end |
| |
| case invalid_line_file_3 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #line 233 10 2 |
| ${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__); |
| } |
| "" |
| end |
| |
| case invalid_line_file_4 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #line foobar |
| ${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__); |
| } |
| "" |
| end |
| |
| end # builtin |
| |
| group pragmas "Pragma Tests" |
| |
| case pragma_vertex |
| version 300 es |
| values { output float out0 = 1.0; } |
| vertex "" |
| #version 300 es |
| #pragma |
| #pragma STDGL invariant(all) |
| #pragma debug(off) |
| #pragma optimize(off) |
| |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 300 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| void main() |
| { |
| out0 = 1.0; |
| ${FRAGMENT_OUTPUT} |
| } |
| "" |
| end |
| |
| case pragma_fragment |
| version 300 es |
| values { output float out0 = 1.0; } |
| vertex "" |
| #version 300 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 300 es |
| #pragma |
| #pragma debug(off) |
| #pragma optimize(off) |
| |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| void main() |
| { |
| out0 = 1.0; |
| ${FRAGMENT_OUTPUT} |
| } |
| "" |
| end |
| |
| case pragma_macro_exp |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| #define off INVALID |
| /* pragma line not macro expanded */ |
| #pragma debug(off) |
| |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = 1.0; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case pragma_unrecognized_debug |
| version 300 es |
| expect build_successful |
| both "" |
| #version 300 es |
| #pragma debug(1.23) |
| |
| // unrecognized preprocessor token |
| |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case pragma_unrecognized_token |
| version 300 es |
| expect build_successful |
| both "" |
| #version 300 es |
| #pragma ¤¤½ |
| |
| // trailing bytes form a valid but unrecognized preprocessor token |
| |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| end # pragmas |
| |
| group extensions "Extension Tests" |
| |
| case basic |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| #extension all : warn |
| |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = 1.0; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case macro_exp |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| #define warn enable |
| |
| #extension all : warn |
| |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| out0 = 1.0; |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case missing_extension_name |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case invalid_extension_name |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension 2 : all |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case missing_colon |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case expected_colon |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all ; |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case missing_behavior |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all : |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case invalid_behavior_1 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all : WARN |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case invalid_behavior_2 |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all : require |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case invalid_char_in_name |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all¤ : warn |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case invalid_char_in_behavior |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all : war¤n |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case unterminated_comment |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all : warn /*asd |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| case after_non_preprocessing_tokens |
| version 300 es |
| expect compile_fail |
| both "" |
| #version 300 es |
| #extension all : warn |
| |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #extension all : disable |
| ${POSITION_FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| end # extensions |
| |
| group expressions "Expression Tests" |
| |
| case shift_left |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define VAL 4 |
| out0 = 0.0; |
| #if (VAL << 2) == 16 |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case shift_right |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define VAL 5 |
| out0 = 0.0; |
| #if (VAL >> 1) == 2 |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case cmp_less_than |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define VAL 5 |
| out0 = 0.0; |
| #if (VAL < 6) && (-VAL < -4) |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case less_or_equal |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define VAL 6 |
| out0 = 0.0; |
| #if (VAL <= 6) && (-VAL <= -6) |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case or |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define VAL 6 |
| out0 = 0.0; |
| #if (VAL | 5) == 7 |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case and |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define VAL 6 |
| out0 = 0.0; |
| #if (VAL & 5) == 4 |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case xor |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| void main() |
| { |
| #define VAL 6 |
| out0 = 0.0; |
| #if (VAL ^ 5) == 3 |
| out0 = 1.0; |
| #endif |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case mod |
| version 300 es |
| values { output float out0 = 1.0; } |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| |