[Piglit] [PATCH 2/2] glsl-max-varyings: Add a variant that also tests >MAX_VARYING_COMPONENTS.

Brian Paul brianp at vmware.com
Wed Nov 14 06:57:57 PST 2012


On 11/13/2012 04:21 PM, Eric Anholt wrote:
> Given that piglit hasn't been testing this, I don't want to modify the
> existing glsl-max-varyings which has been very useful.  I don't want a
> non-rendering test, though, because gl 2.0 allows an implementation to
> allow shaders with>MAX_VARYING_COMPONENTS, so we should actually test
> the rendering if that does happen.
> ---
>   tests/all.tests                   |    1 +
>   tests/shaders/glsl-max-varyings.c |   47 +++++++++++++++++++++++++++++--------
>   2 files changed, 38 insertions(+), 10 deletions(-)
>
> diff --git a/tests/all.tests b/tests/all.tests
> index a2c7a5d..1d15088 100644
> --- a/tests/all.tests
> +++ b/tests/all.tests
> @@ -278,6 +278,7 @@ shaders['glsl-fs-texture2drect-proj4'] = PlainExecTest(['glsl-fs-texture2drect',
>   add_plain_test(shaders, 'glsl-fs-user-varying-ff')
>   add_plain_test(shaders, 'glsl-mat-attribute')
>   shaders['glsl-max-varyings'] = concurrent_test('glsl-max-varyings')
> +shaders['glsl-max-varyings>MAX_VARYING_COMPONENTS'] = concurrent_test('glsl-max-varyings --exceed-limits')
>   add_plain_test(shaders, 'glsl-orangebook-ch06-bump')
>   add_plain_test(shaders, 'glsl-routing')
>   add_plain_test(shaders, 'glsl-vs-arrays')
> diff --git a/tests/shaders/glsl-max-varyings.c b/tests/shaders/glsl-max-varyings.c
> index bdb4bed..6701b3a 100644
> --- a/tests/shaders/glsl-max-varyings.c
> +++ b/tests/shaders/glsl-max-varyings.c
> @@ -47,6 +47,9 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
>
>   PIGLIT_GL_TEST_CONFIG_END
>
> +static bool exceed_limits = false;
> +static int max_varyings;
> +
>   /* Generate a VS that writes to num_varyings vec4s, and put
>    * interesting data in data_varying with 0.0 everywhere else.
>    */
> @@ -147,7 +150,7 @@ coord_from_index(int index)
>   	return 2 + 12 * index;
>   }
>
> -static void
> +static bool
>   draw(int num_varyings)
>   {
>   	int data_varying;
> @@ -182,8 +185,16 @@ draw(int num_varyings)
>   		glBindAttribLocation(prog, 2, "red");
>
>   		glLinkProgram(prog);
> -		if (!piglit_link_check_status(prog))
> -			piglit_report_result(PIGLIT_FAIL);
> +		if (!piglit_link_check_status_quiet(prog)) {
> +			if (num_varyings>  max_varyings) {
> +				printf("Failed to link with %d/%d "
> +				       "varyings used\n",

Minor nit: replace '/' with 'of'.  If I'd saw "Failed to link with 4/8 
varyings used" I'd wonder what that meant.


> +				       num_varyings, max_varyings);
> +				return false;
> +			} else {
> +				piglit_report_result(PIGLIT_FAIL);
> +			}
> +		}
>
>   		glUseProgram(prog);
>
> @@ -204,14 +215,17 @@ draw(int num_varyings)
>   		glDeleteShader(fs);
>   		glDeleteProgram(prog);
>   	}
> +
> +	return true;
>   }
>
>   enum piglit_result
>   piglit_display(void)
>   {
>   	GLint max_components;
> -	int max_varyings, row, col;
> +	int test_varyings, row, col;
>   	GLboolean pass = GL_TRUE, warned = GL_FALSE;
> +	bool drew[MAX_VARYING];
>
>   	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
>
> @@ -220,22 +234,28 @@ piglit_display(void)
>
>   	printf("GL_MAX_VARYING_FLOATS = %i\n", max_components);
>
> -	if (max_varyings>  MAX_VARYING) {
> +	test_varyings = max_varyings;
> +	if (exceed_limits)
> +		test_varyings++;
> +	if (test_varyings>  MAX_VARYING) {
>   		printf("test not designed to handle>%d varying vec4s.\n"
>   		       "(implementation reports %d components)\n",
> -		       max_components, MAX_VARYING);
> -		max_varyings = MAX_VARYING;
> +		       MAX_VARYING, max_varyings);
> +		test_varyings = MAX_VARYING;
>   		warned = GL_TRUE;
>   	}
>
>   	glClearColor(0.5, 0.5, 0.5, 0.5);
>   	glClear(GL_COLOR_BUFFER_BIT);
>
> -	for (row = 0; row<  max_varyings; row++) {
> -		draw(row + 1);
> +	for (row = 0; row<  test_varyings; row++) {
> +		drew[row] = draw(row + 1);
>   	}
>
> -	for (row = 0; row<  max_varyings; row++) {
> +	for (row = 0; row<  test_varyings; row++) {
> +		if (!drew[row])
> +			continue;
> +
>   		for (col = 0; col<= row; col++) {
>   			GLboolean ok;
>   			float green[3] = {0.0, 1.0, 0.0};
> @@ -266,8 +286,15 @@ piglit_display(void)
>
>   void piglit_init(int argc, char **argv)
>   {
> +	int i;
> +
>   	piglit_require_gl_version(20);
>
> +	for (i = 0; i<  argc; i++) {
> +		if (strcmp(argv[i], "--exceed-limits") == 0)
> +			exceed_limits = true;
> +	}
> +
>   	printf("Vertical axis: Increasing numbers of varyings.\n");
>   	printf("Horizontal axis: Which of the varyings contains the color.\n");
>   }

Reviewed-by: Brian Paul <brianp at vmware.com>



More information about the Piglit mailing list