From: Ian Romanick <[email protected]>

Any minmax test should fail if the query either generates an error or
doesn't write a value to the destination.  To facilitate this, the
storage location is initialized to a value that is unlikely to be
generated by the GL (0xDEADBEEF) instead of 9999.

This caused some additional failures arb_viewport_array-minmax to be
flagged while the extension was being developed.

Signed-off-by: Ian Romanick <[email protected]>
---
 tests/util/minmax-test.c | 66 +++++++++++++++++++++++++++++++++++-------------
 1 file changed, 48 insertions(+), 18 deletions(-)

diff --git a/tests/util/minmax-test.c b/tests/util/minmax-test.c
index 1cb8ab9..ef98a8f 100644
--- a/tests/util/minmax-test.c
+++ b/tests/util/minmax-test.c
@@ -99,30 +99,42 @@ piglit_report_float(const char *name, GLfloat limit, 
GLfloat val, bool pass)
        }
 }
 
+#define SENTINEL  0xDEADBEEF
+
 static void
 piglit_test_int(GLenum token, GLint limit, bool max)
 {
        const char *name = piglit_get_gl_enum_name(token);
-       GLint val = 9999;
+       GLint val = SENTINEL;
+       bool pass;
 
        glGetIntegerv(token, &val);
 
+       pass = piglit_check_gl_error(GL_NO_ERROR);
+
        piglit_report_int(name, limit, val,
-                         (max && val <= limit) ||
-                         (!max && val >= limit));
+                         pass &&
+                         val != SENTINEL &&
+                         ((max && val <= limit) ||
+                          (!max && val >= limit)));
 }
 
 static void
 piglit_test_uint(GLenum token, GLuint limit, bool max)
 {
        const char *name = piglit_get_gl_enum_name(token);
-       GLuint val = 9999;
+       GLuint val = SENTINEL;
+       bool pass;
 
        glGetIntegerv(token, (GLint*) &val);
 
+       pass = piglit_check_gl_error(GL_NO_ERROR);
+
        piglit_report_uint(name, limit, val,
-                          (max && val <= limit) ||
-                          (!max && val >= limit));
+                          pass &&
+                          val != SENTINEL &&
+                          ((max && val <= limit) ||
+                           (!max && val >= limit)));
 }
 
 #if !defined(PIGLIT_USE_OPENGL_ES2)
@@ -130,20 +142,26 @@ static void
 piglit_test_int64(GLenum token, GLint64 limit, bool max)
 {
        const char *name = piglit_get_gl_enum_name(token);
-       GLint64 val = 9999;
+       GLint64 val = SENTINEL;
+       bool pass;
 
        glGetInteger64v(token, &val);
 
+       pass = piglit_check_gl_error(GL_NO_ERROR);
+
        piglit_report_int64(name, limit, val,
-                           (max && val <= limit) ||
-                           (!max && val >= limit));
+                           pass &&
+                           val != SENTINEL &&
+                           ((max && val <= limit) ||
+                            (!max && val >= limit)));
 }
 
 static void
 piglit_test_uint64(GLenum token, GLuint64 limit, bool max)
 {
        const char *name = piglit_get_gl_enum_name(token);
-       GLuint64 val;
+       GLuint64 val = SENTINEL;
+       bool pass;
 
        /* To obtain GLuint64 values, we must use glGetInteger64v.
         * Justification is found in the GL_ARB_sync spec:
@@ -160,9 +178,13 @@ piglit_test_uint64(GLenum token, GLuint64 limit, bool max)
 
        glGetInteger64v(token, (GLint64*) &val);
 
+       pass = piglit_check_gl_error(GL_NO_ERROR);
+
        piglit_report_uint64(name, limit, val,
-                            (max && val <= limit) ||
-                            (!max && val >= limit));
+                            pass &&
+                            val != SENTINEL &&
+                            ((max && val <= limit) ||
+                             (!max && val >= limit)));
 }
 #endif /* !PIGLIT_USE_OPENGL_ES2 */
 
@@ -212,13 +234,18 @@ static void
 piglit_test_float(GLenum token, GLfloat limit, bool max)
 {
        const char *name = piglit_get_gl_enum_name(token);
-       GLfloat val = -9999;
+       GLfloat val = -SENTINEL;
+       bool pass;
 
        glGetFloatv(token, &val);
 
+       pass = piglit_check_gl_error(GL_NO_ERROR);
+
        piglit_report_float(name, limit, val,
-                           (max && val <= limit) ||
-                           (!max && val >= limit));
+                           pass &&
+                           val != SENTINEL &&
+                           ((max && val <= limit) ||
+                            (!max && val >= limit)));
 }
 
 void piglit_test_min_float(GLenum token, GLfloat min)
@@ -236,16 +263,19 @@ void piglit_test_range_float(GLenum token, GLfloat low, 
GLfloat high)
 {
        const char *name = piglit_get_gl_enum_name(token);
        char *temp;
-       GLfloat vals[2] = {9999, 9999};
+       GLfloat vals[2] = {SENTINEL, SENTINEL};
+       bool pass;
 
        glGetFloatv(token, vals);
 
+       pass = piglit_check_gl_error(GL_NO_ERROR);
+
        asprintf(&temp, "%s[0]", name);
-       piglit_report_float(temp, low, vals[0], vals[0] <= low);
+       piglit_report_float(temp, low, vals[0], pass && vals[0] <= low);
        free(temp);
 
        asprintf(&temp, "%s[1]", name);
-       piglit_report_float(temp, high, vals[1], vals[1] >= high);
+       piglit_report_float(temp, high, vals[1], pass && vals[1] >= high);
        free(temp);
 }
 
-- 
1.8.1.4

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

Reply via email to