[Piglit] [PATCH 2/2] linestipple: Report subtest results.

Brian Paul brianp at vmware.com
Thu Apr 25 07:11:45 PDT 2013


On 04/24/2013 08:27 PM, Eric Anholt wrote:
> It's a tricky test to get right, so being able to identify
> improvements in components is useful.
>
> This required removing the "/" from one test's name, since those are
> intepreted as group dividers.
> ---
>   tests/general/linestipple.c |   78 +++++++++++++++++++++----------------------
>   1 file changed, 39 insertions(+), 39 deletions(-)
>
> diff --git a/tests/general/linestipple.c b/tests/general/linestipple.c
> index 2e1b409..21d689c 100644
> --- a/tests/general/linestipple.c
> +++ b/tests/general/linestipple.c
> @@ -38,15 +38,6 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
>
>   PIGLIT_GL_TEST_CONFIG_END
>
> -static void
> -probe_pixel(int x, int y, const float* expected)
> -{
> -	if (!piglit_probe_pixel_rgb(x, y, expected)) {
> -		if (piglit_automatic)
> -			piglit_report_result(PIGLIT_FAIL);
> -	}
> -}
> -
>   struct vertex {
>   	GLuint x;
>   	GLuint y;
> @@ -70,12 +61,11 @@ static float background[3] = { 0, 0, 0 };
>   /**
>    * @note Only horizontal and vertical lines supported right now.
>    */
> -static GLuint
> -probe_line(const struct stipple_line *line,
> -	   const struct vertex *v1,
> -	   const struct vertex *v2,
> -	   GLuint fragment)
> +static bool
> +probe_line(const struct stipple_line *line, int v1i, int v2i, GLuint *fragment)
>   {
> +	const struct vertex *v1 =&line->vertices[v1i];
> +	const struct vertex *v2 =&line->vertices[v2i];
>   	int x = v1->x;
>   	int y = v1->y;
>   	int length, dx = 0, dy = 0;
> @@ -95,22 +85,28 @@ probe_line(const struct stipple_line *line,
>   	}
>
>   	while (length) {
> -		GLuint s = (fragment/line->factor)&  15;
> +		GLuint s = ((*fragment) / line->factor)&  15;
> +		const float *color;
> +
>   		if (line->pattern&  (1<<  s))
> -			probe_pixel(basex + x, basey + y, line->color);
> +			color = line->color;
>   		else
> -			probe_pixel(basex + x, basey + y, background);
> +			color = background;
> +
> +		if (!piglit_probe_pixel_rgb(basex + x, basex + y, color)) {
> +			return false;
> +		}
>
>   		length--;
> -		fragment++;
> +		(*fragment)++;
>   		x += dx;
>   		y += dy;
>   	}
>
> -	return fragment;
> +	return true;
>   }
>
> -static void
> +static bool
>   test_line(const struct stipple_line *line)
>   {
>   	GLuint i;
> @@ -125,20 +121,23 @@ test_line(const struct stipple_line *line)
>   	glReadBuffer(GL_BACK);
>   	if (line->primitive == GL_LINES) {
>   		for (i = 0; i + 1<  line->nvertices; i += 2) {
> -			probe_line(line,&line->vertices[i],
> -				&line->vertices[i+1], 0);
> +			GLuint fragment = 0;
> +			if (!probe_line(line, i, i + 1,&fragment))
> +				return false;
>   		}
>   	} else {
>   		GLuint fragment = 0;
>   		for (i = 0; i + 1<  line->nvertices; ++i) {
> -			fragment = probe_line(line,&line->vertices[i],
> -					&line->vertices[i+1], fragment);
> +			if (!probe_line(line, i, i + 1,&fragment))
> +				return false;
>   		}
>   		if (line->primitive == GL_LINE_LOOP) {
> -			probe_line(line,&line->vertices[i],
> -				&line->vertices[0], fragment);
> +			if (!probe_line(line, i, 0,&fragment))
> +				return false;
>   		}
>   	}
> +
> +	return true;
>   }
>
>   static struct vertex BaselineVertices[] = { { 0, 0 },
> @@ -170,7 +169,7 @@ static struct stipple_line Lines[] = {
>   		BaselineVertices
>   	},
>   	{ /* Restarting lines within a single Begin/End block */
> -		"Restarting lines within a single Begin/End block",
> +		"Restarting lines within a single Begin-End block",
>   		1, 0x00ff, { 1.0, 0.0, 0.0 },
>   		GL_LINES, 4,
>   		RestartVertices
> @@ -201,9 +200,13 @@ static struct stipple_line Lines[] = {
>   	}
>   };
>
> -static void test(void)
> +enum piglit_result
> +piglit_display(void)
>   {
>   	int i;
> +	bool pass = true;
> +
> +	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
>
>   	glClearColor(0.0, 0.0, 0.0, 1.0);
>   	glClear(GL_COLOR_BUFFER_BIT);
> @@ -214,22 +217,19 @@ static void test(void)
>   	glTranslatef(basex, basey, 0.0);
>
>   	for (i = 0; i<  ARRAY_SIZE(Lines); ++i) {
> -		puts(Lines[i].name);
> -		test_line(&Lines[i]);
> +		printf("Testing %s:\n", Lines[i].name);
> +		if (test_line(&Lines[i])) {
> +			piglit_report_subtest_result(PIGLIT_PASS, Lines[i].name);
> +		} else {
> +			piglit_report_subtest_result(PIGLIT_FAIL, Lines[i].name);
> +			pass = false;
> +		}
>   	}
>   	glPopMatrix();
>
>   	piglit_present_results();
> -}
> -
> -
> -enum piglit_result
> -piglit_display(void)
> -{
> -	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
> -	test();
>
> -	return PIGLIT_PASS;
> +	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
>   }
>
>   void

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

It would be nice if we also tested stipple with line width > 1 pixel 
too since that sometimes hits a different path in some drivers.

-Brian


More information about the Piglit mailing list