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 <[email protected]>

> ---
>  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
_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to