[Piglit] [PATCH] gs: Test that gl_MaxGeometryInputComponents can actually be achieved.

Ian Romanick idr at freedesktop.org
Wed Nov 6 14:10:24 PST 2013


On 10/16/2013 07:06 AM, Paul Berry wrote:

I'm glad your mean streak only shows in your tests. :)

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> ---
>  .../geometry/max-input-components.shader_test      | 66 ++++++++++++++++++++++
>  1 file changed, 66 insertions(+)
>  create mode 100644 tests/spec/glsl-1.50/execution/geometry/max-input-components.shader_test
> 
> diff --git a/tests/spec/glsl-1.50/execution/geometry/max-input-components.shader_test b/tests/spec/glsl-1.50/execution/geometry/max-input-components.shader_test
> new file mode 100644
> index 0000000..fcd1e7a
> --- /dev/null
> +++ b/tests/spec/glsl-1.50/execution/geometry/max-input-components.shader_test
> @@ -0,0 +1,66 @@
> +# Verify that gl_MaxGeometryInputComponents (or
> +# gl_MaxVertexOutputComponents, if smaller) floats can be exchanged
> +# between the vertex and geometry shader.  Use a geometry shader input
> +# type of triangles_adjacency so that the total number of inputs
> +# received by the geometry shader is as large as possible.
> +
> +[require]
> +GLSL >= 1.50
> +
> +[vertex shader]
> +out blk {
> +  float f[min(gl_MaxGeometryInputComponents, gl_MaxVertexOutputComponents)];
> +} outs;
> +
> +void main()
> +{
> +  for (int i = 0; i < outs.f.length(); i++)
> +    outs.f[i] = float(gl_VertexID * 1000 + i + 1);
> +}
> +
> +[geometry shader]
> +layout(triangles_adjacency) in;
> +layout(triangle_strip, max_vertices = 4) out;
> +
> +in blk {
> +  float f[min(gl_MaxGeometryInputComponents, gl_MaxVertexOutputComponents)];
> +} ins[];
> +out vec4 color;
> +
> +void main()
> +{
> +  const vec4 vertices[4] = vec4[4](
> +    vec4(-1.0, -1.0, 0.0, 1.0),
> +    vec4(-1.0,  1.0, 0.0, 1.0),
> +    vec4( 1.0, -1.0, 0.0, 1.0),
> +    vec4( 1.0,  1.0, 0.0, 1.0)
> +  );
> +
> +  bool ok = true;
> +  for (int i = 0; i < 6; i++) {
> +    for (int j = 0; j < ins[i].f.length(); j++) {
> +      if (ins[i].f[j] != float(i * 1000 + j + 1))
> +        ok = false;
> +    }
> +  }
> +
> +  for (int i = 0; i < 4; i++) {
> +    gl_Position = vertices[i];
> +    color = ok ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
> +    EmitVertex();
> +  }
> +}
> +
> +[fragment shader]
> +in vec4 color;
> +
> +void main()
> +{
> +  gl_FragColor = color;
> +}
> +
> +[test]
> +clear color 0.0 0.0 0.0 0.0
> +clear
> +draw arrays GL_TRIANGLES_ADJACENCY 0 6
> +probe all rgba 0.0 1.0 0.0 1.0
> 



More information about the Piglit mailing list