[Piglit] [PATCH] fbo-depth-array: Don't create an enormous color render target

Ben Widawsky benjamin.widawsky at intel.com
Thu Oct 29 08:24:40 PDT 2015


On Thu, Oct 29, 2015 at 12:32:24PM +0100, Neil Roberts wrote:
> When the -fbo option is given to the fbo-depth-array test it tries to
> render to a range of different depth/stencil buffer sizes with
> dimensions of up to 8192. It verifies the rendering was correct by
> binding the depth or stencil buffer as a texture source, rendering the
> texture into the Piglit winsys fbo and then probing the result. In
> order to cope with all of the possible buffer sizes it was setting the
> winsys framebuffer size to 8192x8192. Doing glReadPixels on a buffer
> this size causes problems for some platforms and makes the test run
> extremely slowly. The point of the test is just to check rendering to
> depth and stencil array textures of different sizes so the size of the
> renderbuffer isn't really relevant. This patch makes it instead leave
> the winsys buffer at the default size when an FBO is used and then
> render the texture multiple times in slices until it has checked the
> entire texture.

Seems like a reasonable thing to do.

Acked-by: Ben Widawsky <benjamin.widawsky at intel.com>

> ---
>  tests/fbo/fbo-depth-array.c | 53 ++++++++++++++++++++++++++++++---------------
>  1 file changed, 35 insertions(+), 18 deletions(-)
> 
> diff --git a/tests/fbo/fbo-depth-array.c b/tests/fbo/fbo-depth-array.c
> index 1ea6611..b0acd5e 100644
> --- a/tests/fbo/fbo-depth-array.c
> +++ b/tests/fbo/fbo-depth-array.c
> @@ -65,11 +65,7 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
>  	config.supports_gl_compat_version = 33;
>  	config.supports_gl_core_version = 33;
>  
> -	if (piglit_use_fbo && !test_single_size) {
> -		config.window_width = MAX_DIM;
> -		config.window_height = MAX_DIM;
> -	}
> -	else {
> +	if (!piglit_use_fbo || test_single_size) {
>  		config.window_width = (width + 2) * MIN2(layers, 4);
>  		config.window_height = (height + 2) * ((layers + 2) / 3);
>  	}
> @@ -359,7 +355,10 @@ done:
>   * array texture.
>   */
>  static void
> -draw_layer(int x, int y, int depth)
> +draw_layer(int x, int y,
> +	   int tx, int ty,
> +	   int tw, int th,
> +	   int depth)
>  {
>  	GLfloat depth_coord = (GLfloat)depth;
>  	GLuint prog = test_stencil ? program_texstencil : program_texdepth;
> @@ -385,18 +384,41 @@ draw_layer(int x, int y, int depth)
>  
>  	piglit_draw_rect_tex((double)x / piglit_width * 2 - 1,
>  			     (double)y / piglit_height * 2 - 1,
> -			     (double)width / piglit_width * 2,
> -			     (double)height / piglit_height * 2,
> -			     0, 0, 1, 1);
> +			     (double)tw / piglit_width * 2,
> +			     (double)th / piglit_height * 2,
> +			     tx / (float) width, ty / (float) height,
> +			     tw / (float) width, th / (float) height);
>  	glUseProgram(0);
>  	if (!piglit_check_gl_error(GL_NO_ERROR))
>  		piglit_report_result(PIGLIT_FAIL);
>  }
>  
> -static GLboolean test_layer_drawing(int start_x, int start_y, float expected)
> +static GLboolean draw_and_test_layer(int start_x, int start_y,
> +				     int layer)
>  {
> -	return piglit_probe_rect_r_ubyte(start_x, start_y, width, height,
> -					 expected * 255.0);
> +	float expected = (test_stencil ?
> +			  get_stencil_value_float(layer) :
> +			  get_depth_value(layer));
> +	int tx, ty, tw, th;
> +	GLboolean pass = GL_TRUE;
> +
> +	for (ty = 0; ty < height; ty += piglit_height - start_y) {
> +		for (tx = 0; tx < width; tx += piglit_width - start_x) {
> +			tw = MIN2(piglit_width - start_x, width - tx);
> +			th = MIN2(piglit_height - start_y, height - ty);
> +			draw_layer(start_x, start_y,
> +				   tx, ty,
> +				   tw, th,
> +				   layer);
> +
> +			pass = piglit_probe_rect_r_ubyte(start_x, start_y,
> +							 tw, th,
> +							 expected * 255.0) &&
> +				pass;
> +		}
> +	}
> +
> +	return pass;
>  }
>  
>  static bool
> @@ -424,12 +446,7 @@ test_once(void)
>  			x = 1 + (layer % 3) * (width + 1);
>  			y = 1 + (layer / 3) * (height + 1);
>  		}
> -		draw_layer(x, y, layer);
> -
> -		pass &= test_layer_drawing(x, y,
> -					   test_stencil ?
> -					   get_stencil_value_float(layer) :
> -					   get_depth_value(layer));
> +		draw_and_test_layer(x, y, layer);
>  
>  		if (piglit_use_fbo && !test_single_size && layer < layers-1) {
>  			glClearColor(0.2, 0.1, 0.1, 1.0);
> -- 
> 1.9.3
> 

-- 
Ben Widawsky, Intel Open Source Technology Center


More information about the Piglit mailing list