Instead of fixed BUF_SIZE use the current window size.
Instead of hand-rolled depth buffer probing, use piglit_probe_rect_depth()
---
 tests/fbo/fbo-depth.c |  112 ++++++++++++++++++++++---------------------------
 1 file changed, 50 insertions(+), 62 deletions(-)

diff --git a/tests/fbo/fbo-depth.c b/tests/fbo/fbo-depth.c
index 532c6db..e21715a 100644
--- a/tests/fbo/fbo-depth.c
+++ b/tests/fbo/fbo-depth.c
@@ -30,14 +30,10 @@
 
 #include "piglit-util-gl-common.h"
 
-#define BUF_SIZE 123
-
 PIGLIT_GL_TEST_CONFIG_BEGIN
 
        config.supports_gl_compat_version = 10;
 
-       config.window_width = BUF_SIZE;
-       config.window_height = BUF_SIZE;
        config.window_visual = PIGLIT_GL_VISUAL_DOUBLE;
 
 PIGLIT_GL_TEST_CONFIG_END
@@ -78,7 +74,8 @@ static enum piglit_result test_clear(void)
        /* Add a colorbuffer. */
        glGenRenderbuffersEXT(1, &cb);
        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, cb);
-       glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, BUF_SIZE, 
BUF_SIZE);
+       glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8,
+                                piglit_width, piglit_height);
        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
 
        glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0,
@@ -106,12 +103,14 @@ static enum piglit_result test_clear(void)
 
        glDisable(GL_DEPTH_TEST);
 
-       res = piglit_probe_rect_rgb(0, 0, BUF_SIZE, BUF_SIZE, green) ? 
PIGLIT_PASS : PIGLIT_FAIL;
+       res = piglit_probe_rect_rgb(0, 0, piglit_width, piglit_height, green)
+               ? PIGLIT_PASS : PIGLIT_FAIL;
 
        /* Display the colorbuffer. */
        if (!piglit_automatic) {
                glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 
piglit_winsys_fbo);
-               glBlitFramebufferEXT(0, 0, BUF_SIZE, BUF_SIZE, 0, 0, BUF_SIZE, 
BUF_SIZE,
+               glBlitFramebufferEXT(0, 0, piglit_width, piglit_height,
+                                    0, 0, piglit_width, piglit_height,
                                     GL_COLOR_BUFFER_BIT, GL_NEAREST);
        }
 
@@ -122,51 +121,33 @@ static enum piglit_result test_clear(void)
 
 static enum piglit_result compare()
 {
-       int x, y, failures = 0;
-       GLfloat depth[BUF_SIZE*BUF_SIZE];
-       GLfloat expected_depth;
-
-       /* Read buffers. */
-       glReadPixels(0, 0, BUF_SIZE, BUF_SIZE, GL_DEPTH_COMPONENT,
-                    GL_FLOAT, depth);
-
-       /* Compare results. */
-       for (y = 0; y < BUF_SIZE; y++) {
-               for (x = 0; x < BUF_SIZE; x++) {
-
-                       /* Skip the middle row and column of pixels because
-                        * drawing polygons for the left/right and bottom/top
-                        * quadrants may hit the middle pixels differently
-                        * depending on minor transformation and rasterization
-                        * differences.
-                        */
-                       if (x == BUF_SIZE / 2 || y == BUF_SIZE / 2)
-                               continue;
-
-                       if (y < BUF_SIZE/2) {
-                               expected_depth = x < BUF_SIZE/2 ? 0.25 : 0.375;
-                       } else {
-                               expected_depth = x < BUF_SIZE/2 ? 0.625 : 0.75;
-                       }
-
-                       if (fabs(depth[y*BUF_SIZE+x] - expected_depth) > 0.001) 
{
-                               failures++;
-                               if (failures < 20) {
-                                       printf("Depth at %i,%i   Expected: %f   
Observed: %f\n",
-                                               x, y, expected_depth, 
depth[y*BUF_SIZE+x]);
-                               } else if (failures == 20) {
-                                       printf("...\n");
-                               }
-                       }
-               }
-       }
-       if (failures)
-               printf("Total failures: %i\n", failures);
-
-       return failures == 0 ? PIGLIT_PASS : PIGLIT_FAIL;
+       const int w = piglit_width / 2 - 1;
+       const int h = piglit_height / 2 - 1;
+       bool pass;
+
+       /* Compare results in four quadrants.
+        * Note: we skip the middle row and column of pixels because
+        * drawing polygons for the left/right and bottom/top
+        * quadrants may hit the middle pixels differently
+        * depending on minor transformation and rasterization
+        * differences.
+        */
+       pass = piglit_probe_rect_depth(0, 0, w, h, 0.25);
+
+       pass = piglit_probe_rect_depth(piglit_width / 2 + 1, 0, w, h, 0.375)
+               && pass;
+
+       pass = piglit_probe_rect_depth(0, piglit_height / 2 + 1,
+                                      w, h, 0.625) && pass;
+
+       pass = piglit_probe_rect_depth(piglit_width / 2 + 1,
+                                      piglit_height / 2 + 1,
+                                      w, h, 0.75) && pass;
+
+       return pass ? PIGLIT_PASS : PIGLIT_FAIL;
 }
 
-static enum piglit_result test_readpixels()
+static enum piglit_result test_readpixels(void)
 {
        /* Clear. */
        glClearDepth(0);
@@ -189,14 +170,16 @@ static enum piglit_result test_readpixels()
 static enum piglit_result test_drawpixels()
 {
        int x, y;
-       GLfloat depth[BUF_SIZE*BUF_SIZE];
+       GLfloat *depth;
 
-       for (y = 0; y < BUF_SIZE; y++) {
-               for (x = 0; x < BUF_SIZE; x++) {
-                       if (y < BUF_SIZE/2) {
-                               depth[y*BUF_SIZE+x] = x < BUF_SIZE/2 ? 0.25 : 
0.375;
+       depth = malloc(piglit_width * piglit_height * sizeof(GLfloat));
+
+       for (y = 0; y < piglit_height; y++) {
+               for (x = 0; x < piglit_width; x++) {
+                       if (y < piglit_height/2) {
+                               depth[y*piglit_width+x] = x < piglit_width/2 ? 
0.25 : 0.375;
                        } else {
-                               depth[y*BUF_SIZE+x] = x < BUF_SIZE/2 ? 0.625 : 
0.75;
+                               depth[y*piglit_width+x] = x < piglit_width/2 ? 
0.625 : 0.75;
                        }
                }
        }
@@ -208,9 +191,12 @@ static enum piglit_result test_drawpixels()
        /* Draw pixels. */
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_ALWAYS);
-       glDrawPixels(BUF_SIZE, BUF_SIZE, GL_DEPTH_COMPONENT, GL_FLOAT, depth);
+       glDrawPixels(piglit_width, piglit_height,
+                    GL_DEPTH_COMPONENT, GL_FLOAT, depth);
        glDisable(GL_DEPTH_TEST);
 
+       free(depth);
+
        return compare();
 }
 
@@ -227,11 +213,13 @@ static enum piglit_result test_copy(void)
        /* Set the upper-right corner to 0x3333 and copy the content to the 
lower-left one. */
        piglit_draw_rect_z(-0.5, 0, 0, 1, 1);
        if (test == BLIT)
-               glBlitFramebufferEXT(BUF_SIZE/2+1, BUF_SIZE/2+1, BUF_SIZE, 
BUF_SIZE,
-                                    0, 0, BUF_SIZE/2, BUF_SIZE/2,
+               glBlitFramebufferEXT(piglit_width/2+1, piglit_height/2+1,
+                                    piglit_width, piglit_height,
+                                    0, 0, piglit_width/2, piglit_height/2,
                                     GL_DEPTH_BUFFER_BIT, GL_NEAREST);
        else
-               glCopyPixels(BUF_SIZE/2+1, BUF_SIZE/2+1, BUF_SIZE/2, 
BUF_SIZE/2, GL_DEPTH);
+               glCopyPixels(piglit_width/2+1, piglit_height/2+1,
+                            piglit_width/2, piglit_height/2, GL_DEPTH);
 
        /* Initialize the other corners. */
        piglit_draw_rect_z(-0.25, 0, -1, 1, 1);
@@ -260,14 +248,14 @@ enum piglit_result piglit_display(void)
        /* Create the FBO. */
        glGenRenderbuffersEXT(1, &rb);
        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rb);
-       glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, f.iformat, BUF_SIZE, 
BUF_SIZE);
+       glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, f.iformat, piglit_width, 
piglit_height);
        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
 
        glGenFramebuffersEXT(1, &fb);
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);
        glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT,
                                     GL_RENDERBUFFER_EXT, rb);
-       glViewport(0, 0, BUF_SIZE, BUF_SIZE);
+       glViewport(0, 0, piglit_width, piglit_height);
        glDrawBuffer(GL_NONE);
        glReadBuffer(GL_NONE);
        status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
-- 
1.7.10.4

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to