[Piglit] [PATCH] glsl-es-3.10: dont run gles tests where restrictions apply
Mark Janes
mark.a.janes at intel.com
Wed Jun 17 16:57:46 PDT 2015
Tested-by: Mark Janes <mark.a.janes at intel.com>
Timothy Arceri <t_arceri at yahoo.com.au> writes:
> In GLES vertex shader outputs cant be arrays of structs or structs that
> contain arrays or structs.
>
> The GLSL ES 3.0 spec says:
>
> "Vertex output variables output per-vertex data and are declared
> using the out storage qualifier or the centroid out storage qualifier.
> They can only be float, floating-point vectors, matrices, signed or
> unsigned integers or integer vectors, or arrays or structures of any
> these."
>
> The GLSL ES 3.1 is a bit clearer about this:
>
> It is a compile-time error to declare a vertex shader output with,
> or that contains, any of the following types:
>
> * A boolean type
> * An opaque type
> * An array of arrays
> * An array of structures
> * A structure containing an array
> * A structure containing a structure
>
> CC: Mark Janes <mark.a.janes at intel.com>
> ---
> tests/all.py | 13 +-
> .../execution/varying-struct-arrays.shader_test | 237 ---------------------
> 2 files changed, 9 insertions(+), 241 deletions(-)
> delete mode 100644 tests/spec/glsl-es-3.00/execution/varying-struct-arrays.shader_test
>
> diff --git a/tests/all.py b/tests/all.py
> index 2839059..47fe503 100755
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -3287,10 +3287,15 @@ with profile.group_manager(
>
> for api_suffix, possible_options in [('', [[], ['interface']]),
> ('_gles3', [[]])]:
> - for subtest in ['basic-struct', 'struct-whole-array',
> - 'struct-array-elem', 'array-struct',
> - 'array-struct-whole-array', 'array-struct-array-elem',
> - 'struct-struct', 'array-struct-array-struct']:
> + if api_suffix == '_gles3':
> + subtest_list = ['basic-struct']
> + else:
> + subtest_list = ['basic-struct', 'struct-whole-array',
> + 'struct-array-elem', 'array-struct',
> + 'array-struct-whole-array',
> + 'array-struct-array-elem', 'struct-struct',
> + 'array-struct-array-struct']
> + for subtest in subtest_list:
> for mode in ['error', 'get', 'run', 'run-no-fs']:
> for options in possible_options:
> g(['ext_transform_feedback-structs{0}'.format(api_suffix),
> diff --git a/tests/spec/glsl-es-3.00/execution/varying-struct-arrays.shader_test b/tests/spec/glsl-es-3.00/execution/varying-struct-arrays.shader_test
> deleted file mode 100644
> index 88b7a8d..0000000
> --- a/tests/spec/glsl-es-3.00/execution/varying-struct-arrays.shader_test
> +++ /dev/null
> @@ -1,237 +0,0 @@
> -# Test that varying structs work properly in conjunction with arrays.
> -#
> -# From the GLSL ES 3.00 specification, section 4.3.4 ("Input Variables"):
> -#
> -# Fragment inputs can only be signed and unsigned integers and
> -# integer vectors, float, floating-point vectors, matrices, or
> -# arrays or structures of these.
> -#
> -# And from section 4.3.6 ("Output Variables"):
> -#
> -# Vertex output variables ... can only be float, floating-point
> -# vectors, matrices, signed or unsigned integers or integer
> -# vectors, or arrays or structures of any these.
> -#
> -# This test verifies the proper functioning of varyings whose types
> -# are a struct containing an array, an array of structs, and various
> -# complex combinations of arrays and structs.
> -#
> -# Note: chapter 11 of the GLSL ES 3.00 spec ("Counting of Inputs and
> -# Outputs") specifies a packing algorithm which constitutes a minimum
> -# requirement for when a set of varyings must be supported by a
> -# conformant implementation. Although that chapter has not yet been
> -# updated to reflect varying structs, Khronos's internal bugzilla
> -# indicates that structs should be flattened before applying the
> -# packing algorithm
> -# (https://cvs.khronos.org/bugzilla/show_bug.cgi?id=9828). The
> -# varyings in this test flatten as follows:
> -#
> -# float s1.f; // A
> -# float[3] s1.af[]; // B
> -# float[3] as1[].f; // C
> -# float[9] as1[].af[]; // D
> -# float s2.s1.f; // E
> -# float[3] s2.s1.af[]; // F
> -# float[2] s2.as1[].f; // G
> -# float[6] s2.as1[].af[]; // H
> -# float[2] as2[].s1.f; // I
> -# float[6] as2[].s1.af[]; // J
> -# float[4] as2[].as1[].f; // K
> -# float[12] as2[].as1[].af[]; // L
> -#
> -# And the flattened varyings would in turn be packed like so:
> -# x y z w
> -# 0 L D J G
> -# 1 L D J G
> -# 2 L D J I
> -# 3 L D J I
> -# 4 L D J
> -# 5 L D J
> -# 6 L D B
> -# 7 L D B
> -# 8 L D B
> -# 9 L H C
> -# 10 L H C
> -# 11 L H C
> -# 12 K H F
> -# 13 K H F
> -# 14 K H F
> -# 15 K A E
> -
> -[require]
> -GL ES >= 3.0
> -GLSL ES >= 3.00
> -
> -[vertex shader]
> -#version 300 es
> -
> -uniform float ref;
> -
> -in vec4 vertex;
> -struct S1
> -{
> - float f;
> - float af[3];
> -};
> -struct S2
> -{
> - S1 s1;
> - S1 as1[2];
> -};
> -out S1 s1;
> -out S1 as1[3];
> -out S2 s2;
> -out S2 as2[2];
> -
> -void main()
> -{
> - gl_Position = vertex;
> - float f = ref;
> - s1.f = f++;
> - s1.af[0] = f++;
> - s1.af[1] = f++;
> - s1.af[2] = f++;
> - as1[0].f = f++;
> - as1[0].af[0] = f++;
> - as1[0].af[1] = f++;
> - as1[0].af[2] = f++;
> - as1[1].f = f++;
> - as1[1].af[0] = f++;
> - as1[1].af[1] = f++;
> - as1[1].af[2] = f++;
> - as1[2].f = f++;
> - as1[2].af[0] = f++;
> - as1[2].af[1] = f++;
> - as1[2].af[2] = f++;
> - s2.s1.f = f++;
> - s2.s1.af[0] = f++;
> - s2.s1.af[1] = f++;
> - s2.s1.af[2] = f++;
> - s2.as1[0].f = f++;
> - s2.as1[0].af[0] = f++;
> - s2.as1[0].af[1] = f++;
> - s2.as1[0].af[2] = f++;
> - s2.as1[1].f = f++;
> - s2.as1[1].af[0] = f++;
> - s2.as1[1].af[1] = f++;
> - s2.as1[1].af[2] = f++;
> - as2[0].s1.f = f++;
> - as2[0].s1.af[0] = f++;
> - as2[0].s1.af[1] = f++;
> - as2[0].s1.af[2] = f++;
> - as2[0].as1[0].f = f++;
> - as2[0].as1[0].af[0] = f++;
> - as2[0].as1[0].af[1] = f++;
> - as2[0].as1[0].af[2] = f++;
> - as2[0].as1[1].f = f++;
> - as2[0].as1[1].af[0] = f++;
> - as2[0].as1[1].af[1] = f++;
> - as2[0].as1[1].af[2] = f++;
> - as2[1].s1.f = f++;
> - as2[1].s1.af[0] = f++;
> - as2[1].s1.af[1] = f++;
> - as2[1].s1.af[2] = f++;
> - as2[1].as1[0].f = f++;
> - as2[1].as1[0].af[0] = f++;
> - as2[1].as1[0].af[1] = f++;
> - as2[1].as1[0].af[2] = f++;
> - as2[1].as1[1].f = f++;
> - as2[1].as1[1].af[0] = f++;
> - as2[1].as1[1].af[1] = f++;
> - as2[1].as1[1].af[2] = f++;
> -}
> -
> -[fragment shader]
> -#version 300 es
> -precision highp float;
> -
> -uniform float ref;
> -
> -struct S1
> -{
> - float f;
> - float af[3];
> -};
> -struct S2
> -{
> - S1 s1;
> - S1 as1[2];
> -};
> -in S1 s1;
> -in S1 as1[3];
> -in S2 s2;
> -in S2 as2[2];
> -out vec4 color;
> -
> -#define CHECK(value, expected) \
> - if (distance(value, expected) > 0.00001) \
> - failed = true
> -
> -void main()
> -{
> - bool failed = false;
> - float f = ref;
> -
> - CHECK(s1.f, f++);
> - CHECK(s1.af[0], f++);
> - CHECK(s1.af[1], f++);
> - CHECK(s1.af[2], f++);
> - CHECK(as1[0].f, f++);
> - CHECK(as1[0].af[0], f++);
> - CHECK(as1[0].af[1], f++);
> - CHECK(as1[0].af[2], f++);
> - CHECK(as1[1].f, f++);
> - CHECK(as1[1].af[0], f++);
> - CHECK(as1[1].af[1], f++);
> - CHECK(as1[1].af[2], f++);
> - CHECK(as1[2].f, f++);
> - CHECK(as1[2].af[0], f++);
> - CHECK(as1[2].af[1], f++);
> - CHECK(as1[2].af[2], f++);
> - CHECK(s2.s1.f, f++);
> - CHECK(s2.s1.af[0], f++);
> - CHECK(s2.s1.af[1], f++);
> - CHECK(s2.s1.af[2], f++);
> - CHECK(s2.as1[0].f, f++);
> - CHECK(s2.as1[0].af[0], f++);
> - CHECK(s2.as1[0].af[1], f++);
> - CHECK(s2.as1[0].af[2], f++);
> - CHECK(s2.as1[1].f, f++);
> - CHECK(s2.as1[1].af[0], f++);
> - CHECK(s2.as1[1].af[1], f++);
> - CHECK(s2.as1[1].af[2], f++);
> - CHECK(as2[0].s1.f, f++);
> - CHECK(as2[0].s1.af[0], f++);
> - CHECK(as2[0].s1.af[1], f++);
> - CHECK(as2[0].s1.af[2], f++);
> - CHECK(as2[0].as1[0].f, f++);
> - CHECK(as2[0].as1[0].af[0], f++);
> - CHECK(as2[0].as1[0].af[1], f++);
> - CHECK(as2[0].as1[0].af[2], f++);
> - CHECK(as2[0].as1[1].f, f++);
> - CHECK(as2[0].as1[1].af[0], f++);
> - CHECK(as2[0].as1[1].af[1], f++);
> - CHECK(as2[0].as1[1].af[2], f++);
> - CHECK(as2[1].s1.f, f++);
> - CHECK(as2[1].s1.af[0], f++);
> - CHECK(as2[1].s1.af[1], f++);
> - CHECK(as2[1].s1.af[2], f++);
> - CHECK(as2[1].as1[0].f, f++);
> - CHECK(as2[1].as1[0].af[0], f++);
> - CHECK(as2[1].as1[0].af[1], f++);
> - CHECK(as2[1].as1[0].af[2], f++);
> - CHECK(as2[1].as1[1].f, f++);
> - CHECK(as2[1].as1[1].af[0], f++);
> - CHECK(as2[1].as1[1].af[1], f++);
> - CHECK(as2[1].as1[1].af[2], f++);
> -
> - if (failed)
> - color = vec4(1.0, 0.0, 0.0, 1.0);
> - else
> - color = vec4(0.0, 1.0, 0.0, 1.0);
> -}
> -
> -[test]
> -uniform float ref 137.035999074
> -draw rect -1 -1 2 2
> -probe all rgba 0.0 1.0 0.0 1.0
> --
> 2.1.0
More information about the Piglit
mailing list