3871 lines
82 KiB
Plaintext
3871 lines
82 KiB
Plaintext
|
|
# Varying tests
|
|
group varying "Varying linkage"
|
|
|
|
# Linking rules
|
|
group rules "Varying linking rules"
|
|
# not declared in vertex shader, declared in fragment shader
|
|
case fragment_declare
|
|
version 300 es
|
|
desc "varying declared in fragment shader, no reference in vertex shader"
|
|
values { output float out0 = 1.0; }
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
in mediump float var;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = 1.0;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
# declared in vertex shader, no reference in frag shader
|
|
case vertex_declare
|
|
version 300 es
|
|
desc "varying declared in vertex shader, no reference in fragment shader"
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
# declared in vertex shader, declared in frag shader
|
|
case both_declare
|
|
version 300 es
|
|
desc "varying declared in both vertex and fragment shader, but not used"
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
in mediump float var;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
# declared in vertex shader, static use in frag shader
|
|
case vertex_declare_fragment_use
|
|
version 300 es
|
|
desc "varying declared in both shaders, statically used in fragment shader"
|
|
values { uniform bool u_false = false; }
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
in mediump float var;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
if (u_false)
|
|
${FRAG_COLOR} = vec4(var);
|
|
else
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
# static use in vertex shader, no reference in fragment shader
|
|
case vertex_use_fragment_declare
|
|
version 300 es
|
|
desc "varying declared and statically used in vertex shader, no reference in fragment shader"
|
|
values { uniform bool u_false = false; }
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
if (u_false)
|
|
var = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
# static use in vertex shader, declared in fragment shader
|
|
case vertex_use_declare_fragment
|
|
version 300 es
|
|
desc "varying declared and statically used in vertex shader, only declared in fragment shader"
|
|
values { uniform bool u_false = false; }
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
if (u_false)
|
|
var = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
in mediump float var;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
# static use in vertex shader, used in fragment shader
|
|
case vertex_use_fragment_use
|
|
version 300 es
|
|
desc "varying statically used in both vertex and fragment shader"
|
|
values { uniform bool u_false = false; }
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
if (u_false)
|
|
var = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float var;
|
|
void main()
|
|
{
|
|
if (u_false)
|
|
${FRAG_COLOR} = vec4(var);
|
|
else
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
# differing precision tests
|
|
case differing_precision_1
|
|
version 300 es
|
|
desc "varying declared as highp in vertex shader, but mediump in fragment shader"
|
|
values
|
|
{
|
|
input float in0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
output float out0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
}
|
|
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out highp float var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
# differing precision tests
|
|
case differing_precision_2
|
|
version 300 es
|
|
desc "varying declared as highp in vertex shader, but lowp in fragment shader"
|
|
values
|
|
{
|
|
input float in0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
output float out0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
}
|
|
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out highp vec2 var;
|
|
void main()
|
|
{
|
|
var = vec2(in0, 2.0*in0);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in lowp vec2 var;
|
|
void main()
|
|
{
|
|
out0 = var.y - var.x;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
# differing precision tests
|
|
case differing_precision_3
|
|
version 300 es
|
|
desc "varying declared as lowp in vertex shader, but mediump in fragment shader"
|
|
values
|
|
{
|
|
input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
}
|
|
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out lowp vec4 var;
|
|
void main()
|
|
{
|
|
var = vec4(in0, 2.0*in0, -in0, -in0);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump vec4 var;
|
|
void main()
|
|
{
|
|
out0 = var.x + var.y + var.z + var.w;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
# mismatched type, static use but no runtime use in the fragment shader
|
|
case type_mismatch_1
|
|
version 300 es
|
|
desc "varying type mismatch (float vs. vec2), static use but no runtime use in the fragment shader"
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
var = 2.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump vec2 var;
|
|
void main()
|
|
{
|
|
if (false)
|
|
{
|
|
${FRAG_COLOR} = vec4(var.y);
|
|
}
|
|
else
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
}
|
|
""
|
|
end
|
|
|
|
# mismatched type, varyings used
|
|
case type_mismatch_2
|
|
version 300 es
|
|
desc "varying type mismatch (float vs. vec2)"
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
var = 2.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump vec2 var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = var.xyyx;
|
|
}
|
|
""
|
|
end
|
|
|
|
# mismatched type, varyings used
|
|
case type_mismatch_3
|
|
version 300 es
|
|
desc "varying type mismatch (int vs. uint)"
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump int var;
|
|
void main()
|
|
{
|
|
var = 2;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in mediump uint var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(var);
|
|
}
|
|
""
|
|
end
|
|
|
|
# mismatched type, varyings used
|
|
case struct_type_mismatch_1
|
|
version 300 es
|
|
desc "struct member mismatch"
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { highp float a; highp vec2 b; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = 2.0;
|
|
var.b = vec2(1.0, 0.0);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { highp float a; highp vec3 b; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(var.a, var.b);
|
|
}
|
|
""
|
|
end
|
|
|
|
# mismatched type, varyings unused in fragment shader (runtime)
|
|
case struct_type_mismatch_2
|
|
version 300 es
|
|
desc "struct member mismatch"
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { highp float a; highp vec2 b; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = 2.0;
|
|
var.b = vec2(1.0, 0.0);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { highp float a; highp vec3 b; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(var.a);
|
|
if (false)
|
|
${FRAG_COLOR}.yzw = var.b;
|
|
}
|
|
""
|
|
end
|
|
|
|
# mismatched type, varyings unused in both (runtime)
|
|
case struct_type_mismatch_3
|
|
version 300 es
|
|
desc "struct member mismatch"
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { highp float a; highp vec2 b; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = 2.0;
|
|
if (false)
|
|
var.b = vec2(1.0, 0.0);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { highp float a; highp vec3 b; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(var.a);
|
|
if (false)
|
|
${FRAG_COLOR}.yzw = var.b;
|
|
}
|
|
""
|
|
end
|
|
|
|
# interpolation_mismatch
|
|
case interpolation_mismatch_1
|
|
version 300 es
|
|
desc "varying interpolation different (flat vs. smooth)"
|
|
expect link_fail
|
|
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
in highp float in0;
|
|
flat out mediump float var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(var);
|
|
}
|
|
""
|
|
end
|
|
|
|
# different interpolation
|
|
case differing_interpolation_2
|
|
version 300 es
|
|
desc "varying interpolation different (smooth vs. centroid)"
|
|
values
|
|
{
|
|
input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
}
|
|
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
smooth out mediump float var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
centroid in mediump float var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
# no declaration in vertex shader, but static use in fragment
|
|
case illegal_usage_1
|
|
version 300 es
|
|
desc "varying not declared in vertex shader, but statically used in fragment shader"
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(var);
|
|
}
|
|
""
|
|
end
|
|
|
|
# non-flat integer varyings not allowed
|
|
case invalid_type_int
|
|
version 300 es
|
|
desc "integer varying used"
|
|
expect compile_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump int var;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump int var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
# non-flat integer varyings not allowed
|
|
case invalid_type_uint
|
|
version 300 es
|
|
desc "integer varying used"
|
|
expect compile_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump uint var;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump uint var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
# bool varyings not allowed
|
|
case invalid_type_bool
|
|
version 300 es
|
|
desc "boolean varying used"
|
|
expect compile_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out bool var;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in bool var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_type_struct_array
|
|
version 300 es
|
|
desc "float array inside struct"
|
|
expect compile_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump float a[3]; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a[0] = 1.0;
|
|
var.a[1] = 1.0;
|
|
var.a[2] = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump float a[3]; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_type_struct_struct
|
|
version 300 es
|
|
desc "struct inside struct"
|
|
expect compile_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump float a; };
|
|
struct T { S s; };
|
|
out T var;
|
|
void main()
|
|
{
|
|
var.s.a = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump float a; };
|
|
struct T { S s; };
|
|
in T var;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_type_array_struct
|
|
version 300 es
|
|
desc "array of structs"
|
|
expect compile_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump int a; };
|
|
flat out S var[2];
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var[0].a = 1;
|
|
var[1].a = 1;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump int a; };
|
|
flat in S var[2];
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_type_array_array
|
|
version 300 es
|
|
desc "array of arrays"
|
|
expect compile_fail
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var[2][2];
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var[0][0] = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float var[2][2];
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
group basic_types "Basic varying types"
|
|
case float
|
|
version 300 es
|
|
desc "varying of type float"
|
|
values
|
|
{
|
|
input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in float var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec2
|
|
version 300 es
|
|
desc "varying of type vec2"
|
|
values
|
|
{
|
|
input vec2 in0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
|
|
output vec2 out0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump vec2 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in vec2 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec3
|
|
version 300 es
|
|
desc "varying of type vec3"
|
|
values
|
|
{
|
|
input vec3 in0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
|
|
output vec3 out0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump vec3 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in vec3 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec4
|
|
version 300 es
|
|
desc "varying of type vec4"
|
|
values
|
|
{
|
|
input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump vec4 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in vec4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat2
|
|
version 300 es
|
|
desc "varying of type mat2"
|
|
values
|
|
{
|
|
input mat2 in0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
|
|
output mat2 out0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat2 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat2 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat2x3
|
|
version 300 es
|
|
desc "varying of type mat2x3"
|
|
values
|
|
{
|
|
input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
|
|
output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat2x3 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat2x3 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat2x4
|
|
version 300 es
|
|
desc "varying of type mat2x4"
|
|
values
|
|
{
|
|
input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
|
|
output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat2x4 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat2x4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat3x2
|
|
version 300 es
|
|
desc "varying of type mat3x2"
|
|
values
|
|
{
|
|
input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
|
|
output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat3x2 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat3x2 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat3
|
|
version 300 es
|
|
desc "varying of type mat3"
|
|
values
|
|
{
|
|
input mat3 in0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
|
|
output mat3 out0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat3 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat3 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat3x4
|
|
version 300 es
|
|
desc "varying of type mat3x4"
|
|
values
|
|
{
|
|
input mat3x4 in0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
|
|
output mat3x4 out0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat3x4 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat3x4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat4x2
|
|
version 300 es
|
|
desc "varying of type mat4x2"
|
|
values
|
|
{
|
|
input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
|
|
output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat4x2 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat4x2 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat4x3
|
|
version 300 es
|
|
desc "varying of type mat4x3"
|
|
values
|
|
{
|
|
input mat4x3 in0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
|
|
output mat4x3 out0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat4x3 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat4x3 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat4
|
|
version 300 es
|
|
desc "varying of type mat4"
|
|
values
|
|
{
|
|
input mat4 in0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
|
|
output mat4 out0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump mat4 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mat4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case int
|
|
version 300 es
|
|
desc "varying of type int"
|
|
values
|
|
{
|
|
input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
|
|
output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump int var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in int var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ivec2
|
|
version 300 es
|
|
desc "varying of type ivec2"
|
|
values
|
|
{
|
|
input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
|
|
output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump ivec2 var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in ivec2 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ivec3
|
|
version 300 es
|
|
desc "varying of type ivec3"
|
|
values
|
|
{
|
|
input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
|
|
output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump ivec3 var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in ivec3 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ivec4
|
|
version 300 es
|
|
desc "varying of type ivec4"
|
|
values
|
|
{
|
|
input ivec4 in0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
|
|
output ivec4 out0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump ivec4 var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in ivec4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case uint
|
|
version 300 es
|
|
desc "varying of type int"
|
|
values
|
|
{
|
|
input uint in0 = [ 1 | 2 | 3 | 16 ];
|
|
output uint out0 = [ 1 | 2 | 3 | 16 ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump uint var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in uint var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case uvec2
|
|
version 300 es
|
|
desc "varying of type uvec2"
|
|
values
|
|
{
|
|
input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
|
|
output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump uvec2 var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in uvec2 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case uvec3
|
|
version 300 es
|
|
desc "varying of type uvec3"
|
|
values
|
|
{
|
|
input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
|
|
output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump uvec3 var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in uvec3 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case uvec4
|
|
version 300 es
|
|
desc "varying of type uvec4"
|
|
values
|
|
{
|
|
input uvec4 in0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
|
|
output uvec4 out0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump uvec4 var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in uvec4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
group struct "Structure varyings"
|
|
case float
|
|
version 300 es
|
|
desc "varying of type float inside struct"
|
|
values
|
|
{
|
|
input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump float a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump float a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec2
|
|
version 300 es
|
|
desc "varying of type vec2 inside struct"
|
|
values
|
|
{
|
|
input vec2 in0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
|
|
output vec2 out0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump vec2 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump vec2 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec3
|
|
version 300 es
|
|
desc "varying of type vec3 inside struct"
|
|
values
|
|
{
|
|
input vec3 in0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
|
|
output vec3 out0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump vec3 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump vec3 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec4
|
|
version 300 es
|
|
desc "varying of type vec4 inside struct"
|
|
values
|
|
{
|
|
input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump vec4 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump vec4 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat2
|
|
version 300 es
|
|
desc "varying of type mat2 inside struct"
|
|
values
|
|
{
|
|
input mat2 in0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
|
|
output mat2 out0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat2 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat2 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat2x3
|
|
version 300 es
|
|
desc "varying of type mat2x3 inside struct"
|
|
values
|
|
{
|
|
input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
|
|
output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat2x3 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat2x3 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat2x4
|
|
version 300 es
|
|
desc "varying of type mat2x4 inside struct"
|
|
values
|
|
{
|
|
input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
|
|
output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat2x4 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat2x4 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat3x2
|
|
version 300 es
|
|
desc "varying of type mat3x2 inside struct"
|
|
values
|
|
{
|
|
input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
|
|
output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat3x2 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat3x2 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat3
|
|
version 300 es
|
|
desc "varying of type mat3 inside struct"
|
|
values
|
|
{
|
|
input mat3 in0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
|
|
output mat3 out0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat3 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat3 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat3x4
|
|
version 300 es
|
|
desc "varying of type mat3x4 inside struct"
|
|
values
|
|
{
|
|
input mat3x4 in0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
|
|
output mat3x4 out0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat3x4 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat3x4 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat4x2
|
|
version 300 es
|
|
desc "varying of type mat4x2 inside struct"
|
|
values
|
|
{
|
|
input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
|
|
output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat4x2 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat4x2 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat4x3
|
|
version 300 es
|
|
desc "varying of type mat4x3 inside struct"
|
|
values
|
|
{
|
|
input mat4x3 in0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
|
|
output mat4x3 out0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat4x3 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat4x3 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mat4
|
|
version 300 es
|
|
desc "varying of type mat4 inside struct"
|
|
values
|
|
{
|
|
input mat4 in0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
|
|
output mat4 out0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump mat4 a; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump mat4 a; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case int
|
|
version 300 es
|
|
desc "varying of type int inside struct"
|
|
values
|
|
{
|
|
input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
|
|
output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump int a; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump int a; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ivec2
|
|
version 300 es
|
|
desc "varying of type ivec2 inside struct"
|
|
values
|
|
{
|
|
input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
|
|
output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump ivec2 a; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump ivec2 a; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ivec3
|
|
version 300 es
|
|
desc "varying of type ivec3 inside struct"
|
|
values
|
|
{
|
|
input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
|
|
output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump ivec3 a; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump ivec3 a; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ivec4
|
|
version 300 es
|
|
desc "varying of type ivec4 inside struct"
|
|
values
|
|
{
|
|
input ivec4 in0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
|
|
output ivec4 out0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump ivec4 a; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump ivec4 a; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case uint
|
|
version 300 es
|
|
desc "varying of type uint in struct"
|
|
values
|
|
{
|
|
input uint in0 = [ 1 | 2 | 3 | 16 ];
|
|
output uint out0 = [ 1 | 2 | 3 | 16 ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump uint a; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump uint a; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case uvec2
|
|
version 300 es
|
|
desc "varying of type uvec2 inside struct"
|
|
values
|
|
{
|
|
input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
|
|
output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump uvec2 a; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump uvec2 a; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case uvec3
|
|
version 300 es
|
|
desc "varying of type uvec3 inside struct"
|
|
values
|
|
{
|
|
input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
|
|
output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump uvec3 a; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump uvec3 a; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case uvec4
|
|
version 300 es
|
|
desc "varying of type uvec4 inside struct"
|
|
values
|
|
{
|
|
input uvec4 in0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
|
|
output uvec4 out0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump uvec4 a; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump uvec4 a; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case float_vec3
|
|
version 300 es
|
|
desc "varyings of type float and vec3 inside struct"
|
|
values
|
|
{
|
|
input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
input vec3 in1 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
|
|
output vec3 out1 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump float a; highp vec3 b; };
|
|
out S var;
|
|
void main()
|
|
{
|
|
var.a = in0;
|
|
var.b = in1;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump float a; highp vec3 b; };
|
|
in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
out1 = var.b;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case float_uvec2_vec3
|
|
version 300 es
|
|
desc "varyings of type float and vec3 inside struct"
|
|
values
|
|
{
|
|
input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
|
|
input uvec2 in1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
|
|
output uvec2 out1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
|
|
input vec3 in2 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
|
|
output vec3 out2 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct S { mediump float a; highp uvec2 b; highp vec3 c; };
|
|
flat out S var;
|
|
void main()
|
|
{
|
|
${VERTEX_SETUP}
|
|
var.a = in0;
|
|
var.b = in1;
|
|
var.c = in2;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
struct S { mediump float a; highp uvec2 b; highp vec3 c; };
|
|
flat in S var;
|
|
void main()
|
|
{
|
|
out0 = var.a;
|
|
out1 = var.b;
|
|
out2 = var.c;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
group interpolation "Varying interpolation modes"
|
|
case smooth
|
|
version 300 es
|
|
desc "varying of type vec4"
|
|
values
|
|
{
|
|
input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
smooth out mediump vec4 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
smooth in vec4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case centroid
|
|
version 300 es
|
|
desc "varying of type vec4"
|
|
values
|
|
{
|
|
input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
centroid out mediump vec4 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
centroid in vec4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case flat
|
|
version 300 es
|
|
desc "varying of type vec4"
|
|
values
|
|
{
|
|
input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
flat out mediump vec4 var;
|
|
void main()
|
|
{
|
|
var = in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
flat in vec4 var;
|
|
void main()
|
|
{
|
|
out0 = var;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
group usage "Varying usage in shaders"
|
|
case readback_1
|
|
version 300 es
|
|
desc "read back (an already written) varying in the vertex shader"
|
|
values
|
|
{
|
|
input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ];
|
|
output float out0 = [ 3.0 | 0.0 | -6.0 | 30.0 ];
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${VERTEX_DECLARATIONS}
|
|
out float var1;
|
|
out float var2;
|
|
|
|
void main()
|
|
{
|
|
var1 = in0;
|
|
var2 = var1 + in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in float var1;
|
|
in float var2;
|
|
|
|
void main()
|
|
{
|
|
out0 = var1 + var2;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case writeback_1
|
|
version 300 es
|
|
desc "write back a varying in the fragment shader"
|
|
values
|
|
{
|
|
input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ];
|
|
}
|
|
expect compile_fail
|
|
vertex ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${VERTEX_DECLARATIONS}
|
|
out float var1;
|
|
out float var2;
|
|
|
|
void main()
|
|
{
|
|
var1 = in0;
|
|
var2 = var1 + in0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in float var1;
|
|
in float var2;
|
|
|
|
void main()
|
|
{
|
|
var2 = var1;
|
|
out0 = var1;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
end
|
|
end
|
|
|
|
group uniform "Uniform linkage"
|
|
group basic "Default block uniforms of scalar and vector types"
|
|
case precision_conflict_1
|
|
version 300 es
|
|
desc "Vertex side uniform has highp, fragment side uniform mediump."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
uniform highp float u_val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = u_val;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
uniform float u_val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
out0 = u_val + res;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
case precision_conflict_2
|
|
version 300 es
|
|
desc "Vertex side uniform has highp, fragment side uniform mediump."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
uniform highp float u_val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = u_val;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision highp float;
|
|
uniform mediump float u_val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
out0 = u_val + res;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
case precision_conflict_3
|
|
version 300 es
|
|
desc "Vertex side uniform has lowp, fragment side uniform highp."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
uniform lowp int u_val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = float(u_val);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision highp float;
|
|
uniform highp int u_val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
out0 = float(u_val) + res;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
case precision_conflict_4
|
|
version 300 es
|
|
desc "Vertex side uniform has lowp, fragment side uniform mediump."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
uniform lowp vec3 u_val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = u_val.y;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision highp float;
|
|
uniform mediump vec3 u_val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
out0 = u_val.z + res;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
group struct "Uniform structs"
|
|
# Struct linkage handling
|
|
case basic
|
|
version 300 es
|
|
desc "Same uniform struct in both shaders"
|
|
values {
|
|
uniform float val.a = 1.0;
|
|
uniform float val.b = 2.0;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
out mediump float dummy;
|
|
void main()
|
|
{
|
|
dummy = val.a + val.b;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
in mediump float dummy;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = val.b + val.a;
|
|
out0 = out0 + dummy;
|
|
out0 = out0 - dummy;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vertex_only
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used only in vertex."
|
|
values {
|
|
uniform float val.a = 1.0;
|
|
uniform float val.b = 2.0;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a + val.b;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
in mediump float res;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = res;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case fragment_only
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used only in fragment."
|
|
values {
|
|
uniform float val.a = 1.0;
|
|
uniform float val.b = 2.0;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = val.a + val.b;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both."
|
|
values {
|
|
uniform float val.a = 1.0;
|
|
uniform float val.b = 2.0;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
out0 = res + val.b;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec4
|
|
version 300 es
|
|
desc "Same uniform struct in both shaders. Datatype vec4"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump vec4 b;};
|
|
uniform Struct val;
|
|
out mediump float dummy;
|
|
void main()
|
|
{
|
|
dummy = val.a.x + val.b.y;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump vec4 b;};
|
|
uniform Struct val;
|
|
in mediump float dummy;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = val.b.y + val.a.x;
|
|
out0 = out0 + dummy;
|
|
out0 = out0 - dummy;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vertex_only_vec4
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used only in vertex. Datatype vec4 "
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump vec4 b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x + val.b.y;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump vec4 b;};
|
|
uniform Struct val;
|
|
in mediump float res;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{ out0 = res;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case fragment_only_vec4
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used only in fragment. Datatype vec4"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump vec4 b;};
|
|
uniform Struct val;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump vec4 b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{ out0 = val.a.x + val.b.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_vec4
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype vec4"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump vec4 b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump vec4 b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.b.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec4_vec3
|
|
version 300 es
|
|
desc "Same uniform struct in both shaders. Datatype vec4 and vec3"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
out mediump float dummy;
|
|
void main()
|
|
{
|
|
dummy = val.a.x + val.b.y;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
in mediump float dummy;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{ out0 = val.b.y + val.a.x;
|
|
out0 = out0 + dummy;
|
|
out0 = out0 - dummy;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vertex_only_vec4_vec3
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x + val.b.y;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
in mediump float res;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{ out0 = res;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case fragment_only_vec4_vec3
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{ out0 = val.a.x + val.b.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_vec4_vec3
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.b.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vec4_float
|
|
version 300 es
|
|
desc "Same uniform struct in both shaders. Datatype vec4 and float"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform float val.b = 2.0;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump float b;};
|
|
uniform Struct val;
|
|
out mediump float dummy;
|
|
void main()
|
|
{
|
|
dummy = val.a.x + val.b;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump float b;};
|
|
uniform Struct val;
|
|
in mediump float dummy;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{ out0 = val.b + val.a.x;
|
|
out0 = out0 + dummy;
|
|
out0 = out0 - dummy;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case vertex_only_vec4_float
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform float val.b = 2.0;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump float b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x + val.b;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump float b;};
|
|
uniform Struct val;
|
|
in mediump float res;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{ out0 = res;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case fragment_only_vec4_float
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform float val.b = 2.0;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump float b;};
|
|
uniform Struct val;
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump float b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{ out0 = val.a.x + val.b;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_vec4_float
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform float val.b = 2.0;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec4 a; mediump float b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a; mediump float b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.b;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_vec4_struct
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Inner {mediump vec4 c;};
|
|
struct Struct {mediump vec4 a; Inner b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Inner {mediump vec4 c;};
|
|
struct Struct {mediump vec4 a; Inner b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.b.c.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_vec4_vec3_struct
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3"
|
|
values {
|
|
uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
|
|
uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Inner {mediump vec3 c;};
|
|
struct Struct {mediump vec4 a; Inner b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Inner {mediump vec3 c;};
|
|
struct Struct {mediump vec4 a; Inner b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.b.c.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_vec2_vec3
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3"
|
|
values {
|
|
uniform vec2 val.a = vec2(1.0, 2.0);
|
|
uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec2 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec2 a; mediump vec3 b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.b.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_vec2_int
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int"
|
|
values {
|
|
uniform vec2 val.a = vec2(1.0, 2.0);
|
|
uniform int val.b = 2;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec2 a; mediump int b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec2 a; mediump int b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + float(val.b);
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_int_float
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype int and float"
|
|
values {
|
|
uniform float val.a = 1.0;
|
|
uniform int val.b = 2;
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump float a; mediump int b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a; mediump int b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + float(val.b);
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_bvec2_vec2
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2"
|
|
values {
|
|
uniform bvec2 val.a = bvec2(true, true);
|
|
uniform vec2 val.b = vec2(1.0, 2.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {bvec2 a; mediump vec2 b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = float(val.a.x);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {bvec2 a; mediump vec2 b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.b.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_ivec2_vec2
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2"
|
|
values {
|
|
uniform ivec2 val.a = ivec2(1, 2);
|
|
uniform vec2 val.b = vec2(1.0, 2.0);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump ivec2 a; mediump vec2 b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = vec2(val.a).x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump ivec2 a; mediump vec2 b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.b.y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case partial_ivec2_ivec2
|
|
version 300 es
|
|
desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2"
|
|
values {
|
|
uniform ivec2 val.a = ivec2(1, 2);
|
|
uniform ivec2 val.b = ivec2(1, 2);
|
|
output float out0 = 3.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump ivec2 a; mediump ivec2 b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = vec2(val.a).x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump ivec2 a; mediump ivec2 b;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + vec2(val.b).y;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case type_conflict_1
|
|
version 300 es
|
|
desc "Fragment struct has one less member than fragment version"
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump float a; mediump float b;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = res + val.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case type_conflict_2
|
|
version 300 es
|
|
desc "Vertex struct has int, fragment struct has float."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump int a;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = float(val.a);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = val.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case type_conflict_3
|
|
version 300 es
|
|
desc "Vertex struct has vec3, fragment struct has vec4."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump vec3 a;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = float(val.a.x);
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump vec4 a;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = val.a.x;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case precision_conflict_1
|
|
version 300 es
|
|
desc "Vertex side struct has highp, fragment side struct mediump."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {highp float a;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = val.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case precision_conflict_2
|
|
version 300 es
|
|
desc "Vertex side struct has mediump, fragment side struct lowp."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {mediump float a;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {lowp float a;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = val.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case precision_conflict_3
|
|
version 300 es
|
|
desc "Vertex side struct has lowp, fragment side struct mediump."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {lowp float a;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {mediump float a;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = val.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case precision_conflict_4
|
|
version 300 es
|
|
desc "Vertex side struct has lowp, fragment side struct implicit mediump."
|
|
expect link_fail
|
|
values {output float out0 = 3.0;}
|
|
vertex ""
|
|
#version 300 es
|
|
${VERTEX_DECLARATIONS}
|
|
struct Struct {lowp float a;};
|
|
uniform Struct val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.a;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Struct {float a;};
|
|
uniform Struct val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{ out0 = val.a;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case light_struct_highp
|
|
version 300 es
|
|
desc "Complex Light struct from use case tests."
|
|
values {
|
|
uniform float val.constantAttenuation = 1.0;
|
|
uniform float val.quadraticAttenuation = 1.0;
|
|
output float out0 = 2.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
struct Light
|
|
{
|
|
mediump vec3 color;
|
|
highp vec4 position;
|
|
highp vec3 direction;
|
|
mediump float constantAttenuation;
|
|
mediump float linearAttenuation;
|
|
mediump float quadraticAttenuation;
|
|
};
|
|
${VERTEX_DECLARATIONS}
|
|
uniform Light val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.constantAttenuation;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Light
|
|
{
|
|
mediump vec3 color;
|
|
highp vec4 position;
|
|
highp vec3 direction;
|
|
mediump float constantAttenuation;
|
|
mediump float linearAttenuation;
|
|
mediump float quadraticAttenuation;
|
|
};
|
|
struct Struct {float a;};
|
|
uniform Light val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
out0 = res + val.quadraticAttenuation;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case light_struct_mediump
|
|
version 300 es
|
|
desc "Complex Light struct from use case tests, without highp usage"
|
|
values {
|
|
uniform float val.constantAttenuation = 1.0;
|
|
uniform float val.quadraticAttenuation = 1.0;
|
|
output float out0 = 2.0;
|
|
}
|
|
vertex ""
|
|
#version 300 es
|
|
struct Light
|
|
{
|
|
mediump vec3 color;
|
|
mediump vec4 position;
|
|
mediump vec3 direction;
|
|
mediump float constantAttenuation;
|
|
mediump float linearAttenuation;
|
|
mediump float quadraticAttenuation;
|
|
};
|
|
${VERTEX_DECLARATIONS}
|
|
uniform Light val;
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.constantAttenuation;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
precision mediump float;
|
|
struct Light
|
|
{
|
|
mediump vec3 color;
|
|
mediump vec4 position;
|
|
mediump vec3 direction;
|
|
mediump float constantAttenuation;
|
|
mediump float linearAttenuation;
|
|
mediump float quadraticAttenuation;
|
|
};
|
|
struct Struct {float a;};
|
|
uniform Light val;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
out0 = res + val.quadraticAttenuation;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
group block "Uniform blocks"
|
|
case type_mismatch
|
|
version 300 es
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
|
|
uniform Block
|
|
{
|
|
highp vec4 val;
|
|
};
|
|
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
|
|
uniform Block
|
|
{
|
|
highp vec3 val;
|
|
};
|
|
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
dEQP_FragColor = vec4(val, 1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case members_mismatch
|
|
version 300 es
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
|
|
uniform Block
|
|
{
|
|
highp vec4 val;
|
|
};
|
|
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
|
|
uniform Block
|
|
{
|
|
highp vec4 val;
|
|
lowp uint u;
|
|
};
|
|
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
dEQP_FragColor = vec4(val);
|
|
}
|
|
""
|
|
end
|
|
|
|
case layout_qualifier_mismatch_1
|
|
version 300 es
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
|
|
layout(std140) uniform Block
|
|
{
|
|
highp vec4 val;
|
|
};
|
|
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
|
|
uniform Block
|
|
{
|
|
highp vec4 val;
|
|
};
|
|
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
dEQP_FragColor = vec4(val);
|
|
}
|
|
""
|
|
end
|
|
|
|
case layout_qualifier_mismatch_2
|
|
version 300 es
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
|
|
layout(shared) uniform Block
|
|
{
|
|
highp vec4 val;
|
|
};
|
|
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
|
|
layout(packed) uniform Block
|
|
{
|
|
highp vec4 val;
|
|
};
|
|
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
dEQP_FragColor = vec4(val);
|
|
}
|
|
""
|
|
end
|
|
|
|
case layout_qualifier_mismatch_3
|
|
version 300 es
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
|
|
layout(row_major) uniform Block
|
|
{
|
|
highp vec4 val;
|
|
};
|
|
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val.x;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
|
|
layout(column_major) uniform Block
|
|
{
|
|
highp vec4 val;
|
|
};
|
|
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
dEQP_FragColor = vec4(val);
|
|
}
|
|
""
|
|
end
|
|
|
|
case layout_qualifier_mismatch_4
|
|
version 300 es
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
|
|
layout(row_major) uniform Block
|
|
{
|
|
highp mat3 val;
|
|
};
|
|
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val[0][1];
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
|
|
layout(column_major) uniform Block
|
|
{
|
|
highp mat3 val;
|
|
};
|
|
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
dEQP_FragColor = vec4(val[2], 1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case layout_qualifier_mismatch_5
|
|
version 300 es
|
|
expect link_fail
|
|
vertex ""
|
|
#version 300 es
|
|
|
|
uniform Block
|
|
{
|
|
layout(row_major) uniform highp mat3 val;
|
|
};
|
|
|
|
${VERTEX_DECLARATIONS}
|
|
out mediump float res;
|
|
void main()
|
|
{
|
|
res = val[0][1];
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#version 300 es
|
|
|
|
uniform Block
|
|
{
|
|
layout(column_major) uniform highp mat3 val;
|
|
};
|
|
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float res;
|
|
void main()
|
|
{
|
|
dEQP_FragColor = vec4(val[2], 1.0);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
end
|