diff options
Diffstat (limited to 'dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.test')
-rw-r--r-- | dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.test | 823 |
1 files changed, 823 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.test b/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.test new file mode 100644 index 000000000..a387631af --- /dev/null +++ b/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.test @@ -0,0 +1,823 @@ +group valid "Valid scoping and name redeclaration cases" + + case local_variable_hides_global_variable + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + int a = -1; + + void main() + { + ${SETUP} + int a = in0; + + out0 = a; + ${OUTPUT} + } + "" + end + + case block_variable_hides_local_variable + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + void main() + { + ${SETUP} + int a = in0; + { + int a = -1; + } + out0 = a; + ${OUTPUT} + } + "" + end + + case block_variable_hides_global_variable + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + int a = -1; + + void main() + { + ${SETUP} + { + int a = in0; + + out0 = a; + } + ${OUTPUT} + } + "" + end + + case for_init_statement_variable_hides_local_variable + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + void main() + { + ${SETUP} + int a = in0; + for (int a = 0; a < 10; a++) + { + } + out0 = a; + ${OUTPUT} + } + "" + end + + case for_init_statement_variable_hides_global_variable + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + int a = 5; + + void main() + { + ${SETUP} + for (int a = 0; a < 10; a++) + { + } + out0 = in0 + a - 5; + ${OUTPUT} + } + "" + end + + case variable_in_if_hides_global_variable + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + int a = 1; + + void main() + { + ${SETUP} + if (true) + int a = 42; + out0 = a*in0; + ${OUTPUT} + } + "" + end + + case variable_from_outer_scope_visible_in_initializer + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + void main() + { + ${SETUP} + int a = in0; + { + int a = a+5, b = a-5; + out0 = b; + a = 42; + } + out0 = out0 + a - in0; + ${OUTPUT} + } + "" + end + + case local_int_variable_hides_struct_type + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + struct S { int val; }; + + void main() + { + ${SETUP} + int S = S(in0).val; + out0 = S; + ${OUTPUT} + } + "" + end + + case local_struct_variable_hides_struct_type + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + struct S { int val; }; + + void main() + { + ${SETUP} + S S = S(in0); + out0 = S.val; + ${OUTPUT} + } + "" + end + + case local_variable_hides_function + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + int foo (int x) { return x; } + + void main() + { + ${SETUP} + int foo = in0; + out0 = foo; + ${OUTPUT} + } + "" + end + + case function_parameter_hides_global_variable + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + int a = -1; + + int func (int a) { return a; } + + void main() + { + ${SETUP} + out0 = func(in0); + ${OUTPUT} + } + "" + end + + case function_parameter_hides_struct_type + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + struct S { int x; }; + + int func (int S) { return S; } + + void main() + { + ${SETUP} + out0 = func(in0); + ${OUTPUT} + } + "" + end + + case function_parameter_hides_function + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + int func (int func) { return func; } + + void main() + { + ${SETUP} + out0 = func(in0); + ${OUTPUT} + } + "" + end + + case local_variable_in_inner_scope_hides_function_parameter + version 100 es + values + { + input int in0 = [ 1 | 2 | 3 ]; + output int out0 = [ 1 | 2 | 3 ]; + } + + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + int func (int inp, int x) { { int x = 5; return inp + x - 5; } } + + void main() + { + ${SETUP} + out0 = func(in0, 42); + ${OUTPUT} + } + "" + end + +end + +group invalid "Invalid scoping behavior" + + case redeclare_global_variable + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + int a; + float a; + + void main() + { + a = 1.0; + ${POSITION_FRAG_COLOR} = vec4(a); + } + "" + end + + case redeclare_local_variable + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + int a; + float a; + a = 1.0; + ${POSITION_FRAG_COLOR} = vec4(a); + } + "" + end + + case redeclare_for_init_statement_variable + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + for (int i = 0; i < 10; i++) + { + int i = 11; + } + ${POSITION_FRAG_COLOR} = vec4(0.0); + } + "" + end + + case redeclare_for_condition_variable + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + for (int i = 0; int a = (i < 10); i++) + { + int a = 0; + } + ${POSITION_FRAG_COLOR} = vec4(0.0); + } + "" + end + + case redeclare_for_init_statement_variable_in_for_condition + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + float a; + for (int i = 0; int i = (i < 10); i++) + { + a = sin(i); + } + ${POSITION_FRAG_COLOR} = vec4(a); + } + "" + end + + case redeclare_while_condition_variable + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + int a = 0; + while (int i = (a < 5)) + { + int i = 11; + a += i; + } + ${POSITION_FRAG_COLOR} = vec4(0.0); + } + "" + end + + case redeclare_function + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + float func(float x); + float func(float x); + + float func(float x) { return x + 1.0; } + + void main() + { + ${POSITION_FRAG_COLOR} = vec4(func(1.0)); + } + "" + end + + case redefine_function + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + float func(float x); + + float func(float x) { return x + 1.0; } + float func(float x) { return x + 2.0; } + + void main() + { + ${POSITION_FRAG_COLOR} = vec4(func(1.0)); + } + "" + end + + case redeclare_builtin + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + float sin(float x); + + void main() + { + ${POSITION_FRAG_COLOR} = vec4(sin(1.0)); + } + "" + end + + case redefine_builtin + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + float sin(float x) { return x + 1.0; } + + void main() + { + ${POSITION_FRAG_COLOR} = vec4(sin(1.0)); + } + "" + end + + case conflict_function_struct + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void f(int x); + struct f { int x; }; + + void main() + { + ${POSITION_FRAG_COLOR} = vec4(1); + } + "" + end + + case conflict_function_variable + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void f(int x); + float f; + + void main() + { + f = 1.0; + ${POSITION_FRAG_COLOR} = vec4(f); + } + "" + end + + case use_global_variable_before_declaration + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void func() + { + a = 2.0; + } + + float a; + + void main() + { + func(); + ${POSITION_FRAG_COLOR} = vec4(a); + } + "" + end + + case use_local_variable_before_declaration + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + float a = 1.0; + a = b; + float b = 2.0; + + ${POSITION_FRAG_COLOR} = vec4(a); + } + "" + end + + case use_struct_type_before_declaration + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + float func (float x) { return S(x).val; } + struct S { float val; }; + + void main() + { + ${POSITION_FRAG_COLOR} = vec4(func(1.0)); + } + "" + end + + case use_function_before_declaration + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + float func (float x) { return bar(x); } + float bar (float x) { return x; } + + void main() + { + ${POSITION_FRAG_COLOR} = vec4(func(1.0)); + } + "" + end + + case use_variable_from_block_in_outer_scope + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + { + float a = 1.0; + } + ${POSITION_FRAG_COLOR} = vec4(a); + } + "" + end + + case use_variable_from_if_in_outer_scope + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + if (true) + float a = 1.0; + ${POSITION_FRAG_COLOR} = vec4(a); + } + "" + end + + case use_variable_from_else_in_outer_scope + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + if (false) + float a = 1.0; + else + float b = 2.0; + ${POSITION_FRAG_COLOR} = vec4(b); + } + "" + end + + case use_variable_from_if_in_else + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + float a = 1.0; + if (true) + { + float b = 2.0; + } + else + { + a = b; + } + ${POSITION_FRAG_COLOR} = vec4(a); + } + "" + end + + case use_variable_from_for_init_statement_in_outer_scope + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + float x = 0.0; + for (int i = 0; i < 10; i++) + { + x += sin(i); + } + ${POSITION_FRAG_COLOR} = vec4(float(i)); + } + "" + end + + case use_variable_from_while_condition_in_outer_scope + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + int a = 1; + while (bool b = (a == 1)) + { + a++; + } + ${POSITION_FRAG_COLOR} = vec4(float(b)); + } + "" + end + + case use_parameter_names_from_function_declaration + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + float func(float a, float b); + + float func(float x, float y) { return a+b; } + + void main() + { + ${POSITION_FRAG_COLOR} = vec4(func(1.0, 2.0)); + } + "" + end + + case variable_not_visible_in_own_initializer + version 100 es + expect compile_fail + both "" + #version 100 + precision mediump float; + ${DECLARATIONS} + + void main() + { + float x = x; + ${POSITION_FRAG_COLOR} = vec4(x); + } + "" + end + +end # invalid |