[Piglit] [PATCH 1/2] Modify piglit_check_gl_error() to return a boolean.

Paul Berry stereotype441 at gmail.com
Mon Jan 2 14:32:47 PST 2012


Previously piglit_check_gl_error() would terminate the test if an
error occurred.  However, there are many cases when we would prefer to
simply report the error, and continue testing.

Where it was convenient, I've replaced calls of the form

piglit_check_gl_error(..., PIGLIT_FAIL);

with

pass = piglit_check_gl_error(...) && pass;

So that the test can continue executing.

In other cases, I replaced it with

if (piglit_check_gl_error(...))
        piglit_report_result(PIGLIT_FAIL);

Which is equivalent to the old functionality.
---
 tests/general/roundmode-pixelstore.c               |    4 +-
 tests/hiz/hiz-util.c                               |   25 +++--
 .../api/bindfragdataindexed-invalid-parameters.c   |   24 +++--
 tests/spec/arb_blend_func_extended/api/blend-api.c |   27 ++++--
 .../arb_blend_func_extended/api/getfragdataindex.c |   12 ++-
 tests/spec/arb_draw_buffers/state_change.c         |    6 +-
 ...ufferRenderbuffer-GL_DEPTH_STENCIL_ATTACHMENT.c |    4 +-
 ...mebufferTexture2D-GL_DEPTH_STENCIL_ATTACHMENT.c |    4 +-
 .../map_buffer_range_error_check.c                 |   30 ++++--
 tests/spec/arb_shader_objects/clear-with-deleted.c |    8 +-
 tests/spec/arb_shader_objects/delete-repeat.c      |    5 +-
 tests/spec/ext_texture_integer/api-drawpixels.c    |    8 +-
 tests/spec/ext_texture_integer/api-readpixels.c    |    6 +-
 tests/spec/ext_texture_integer/api-teximage.c      |   12 ++-
 tests/spec/ext_transform_feedback/alignment.c      |    9 +-
 tests/spec/ext_transform_feedback/discard-api.c    |    6 +-
 tests/spec/ext_transform_feedback/generatemipmap.c |    3 +-
 tests/spec/ext_transform_feedback/order.c          |   11 ++-
 tests/spec/ext_transform_feedback/tessellation.c   |   11 ++-
 .../gl-3.0/api/bindfragdata-invalid-parameters.c   |   18 +++-
 tests/spec/gl-3.0/api/bindfragdata-link-error.c    |   42 ++++++---
 .../gl-3.0/api/bindfragdata-nonexistent-variable.c |   30 ++++--
 tests/spec/gl-3.0/api/clearbuffer-common.c         |    8 +-
 tests/spec/gl-3.0/api/clearbuffer-depth-stencil.c  |    2 +-
 tests/spec/gl-3.0/api/clearbuffer-depth.c          |    2 +-
 tests/spec/gl-3.0/api/clearbuffer-invalid-buffer.c |   12 ++-
 .../gl-3.0/api/clearbuffer-invalid-drawbuffer.c    |   99 +++++++++++++-------
 tests/spec/gl-3.0/api/clearbuffer-stencil.c        |    2 +-
 tests/spec/gl-3.0/api/getfragdatalocation.c        |   30 ++++--
 tests/spec/glsl-1.30/execution/isinf-and-isnan.c   |    3 +-
 tests/spec/glsl-1.30/texel-offset-limits.c         |    6 +-
 .../nv_conditional_render/begin-while-active.c     |    3 +-
 tests/spec/nv_conditional_render/begin-zero.c      |    3 +-
 .../oes_compressed_etc1_rgb8_texture-basic.c       |   18 ++--
 .../oes_compressed_paletted_texture-api.c          |   21 +++--
 tests/texturing/compressedteximage.c               |    3 +-
 tests/texturing/depth-cube-map.c                   |    2 +-
 tests/texturing/sampler-cube-shadow.c              |    2 +-
 tests/util/piglit-util.c                           |    7 +-
 tests/util/piglit-util.h                           |    7 +-
 40 files changed, 344 insertions(+), 191 deletions(-)

diff --git a/tests/general/roundmode-pixelstore.c b/tests/general/roundmode-pixelstore.c
index 7659d24..6aac785 100644
--- a/tests/general/roundmode-pixelstore.c
+++ b/tests/general/roundmode-pixelstore.c
@@ -85,11 +85,11 @@ piglit_init(int argc, char **argv)
 	pass = test(2.2, 2) && pass;
 	pass = test(2.8, 3) && pass;
 	pass = test(-0.1, 0) && pass;
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 
 	printf("Setting row length -0.9, and expecting error\n");
 	glPixelStoref(GL_UNPACK_ROW_LENGTH, -0.9);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
 
 	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
 }
diff --git a/tests/hiz/hiz-util.c b/tests/hiz/hiz-util.c
index b7d4998..978d4cf 100644
--- a/tests/hiz/hiz-util.c
+++ b/tests/hiz/hiz-util.c
@@ -95,7 +95,8 @@ hiz_make_fbo(const struct hiz_fbo_options *options)
 		                          GL_COLOR_ATTACHMENT0,
 		                          GL_RENDERBUFFER,
 		                          color_rb);
-         	piglit_check_gl_error(0, PIGLIT_FAIL);
+         	if (!piglit_check_gl_error(0))
+			piglit_report_result(PIGLIT_FAIL);
 	}
 
 	/* Bind depth attachment. */
@@ -109,7 +110,8 @@ hiz_make_fbo(const struct hiz_fbo_options *options)
 		                          GL_DEPTH_ATTACHMENT,
 		                          GL_RENDERBUFFER,
 		                          depth_rb);
-         	piglit_check_gl_error(0, PIGLIT_FAIL);
+         	if (!piglit_check_gl_error(0))
+			piglit_report_result(PIGLIT_FAIL);
 	}
 
 	/* Bind stencil attachment. */
@@ -123,7 +125,8 @@ hiz_make_fbo(const struct hiz_fbo_options *options)
 		                          GL_STENCIL_ATTACHMENT,
 		                          GL_RENDERBUFFER,
 		                          stencil_rb);
-         	piglit_check_gl_error(0, PIGLIT_FAIL);
+         	if (!piglit_check_gl_error(0))
+			piglit_report_result(PIGLIT_FAIL);
 	}
 
 	/* Bind depth/stencil attachment. */
@@ -137,7 +140,8 @@ hiz_make_fbo(const struct hiz_fbo_options *options)
 		                          GL_DEPTH_STENCIL_ATTACHMENT,
 		                          GL_RENDERBUFFER,
 		                          depth_stencil_rb);
-         	piglit_check_gl_error(0, PIGLIT_FAIL);
+         	if (!piglit_check_gl_error(0))
+			piglit_report_result(PIGLIT_FAIL);
 	}
 
 	fb_status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
@@ -177,7 +181,8 @@ hiz_delete_fbo(GLuint fbo)
 	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
 	glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
 
- 	piglit_check_gl_error(0, PIGLIT_FAIL);
+ 	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 }
 
 /* ------------------------------------------------------------------------ */
@@ -436,7 +441,8 @@ hiz_run_test_stencil_test_common()
 	piglit_draw_rect(1 * dx, 1 * dy,   /* x, y */
 		         2 * dx, 2 * dy);  /* w, h */
 
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		return false;
 
 	return hiz_probe_color_buffer(expected_colors);
 }
@@ -548,7 +554,8 @@ hiz_run_test_stencil_read_common()
 	piglit_draw_rect(1 * dx, 1 * dy,   /* x, y */
 		         2 * dx, 2 * dy);  /* w, h */
 
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		return false;
 
 	if (!hiz_probe_color_buffer(expected_colors))
 		return false;
@@ -691,9 +698,9 @@ hiz_run_test_depth_stencil_test_fbo(const struct hiz_fbo_options *fbo_options)
 	piglit_draw_rect(1 * dx, 1 * dy,   /* x, y */
 		         2 * dx, 2 * dy);  /* w, h */
 
- 	piglit_check_gl_error(0, PIGLIT_FAIL);
+ 	pass = piglit_check_gl_error(0);
 
-	pass = hiz_probe_color_buffer(expected_colors);
+	pass = hiz_probe_color_buffer(expected_colors) && pass;
 
 	if (!piglit_automatic) {
 		/* Blit the FBO to the window FB so we can see the results. */
diff --git a/tests/spec/arb_blend_func_extended/api/bindfragdataindexed-invalid-parameters.c b/tests/spec/arb_blend_func_extended/api/bindfragdataindexed-invalid-parameters.c
index 400efd1..a7b0ad3 100644
--- a/tests/spec/arb_blend_func_extended/api/bindfragdataindexed-invalid-parameters.c
+++ b/tests/spec/arb_blend_func_extended/api/bindfragdataindexed-invalid-parameters.c
@@ -58,7 +58,8 @@ void piglit_init(int argc, char **argv)
 	 * without a shader at all.  Only a program object is necessary.
 	 */
 	prog = glCreateProgram();
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Page 236 (page 252 of the PDF) of the OpenGL 3.0 spec says:
 	 *
@@ -70,11 +71,13 @@ void piglit_init(int argc, char **argv)
 	 */
 	printf("Trying location = -1...\n");
 	glBindFragDataLocationIndexed(prog, -1, 0, "foo");
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Trying location = GL_MAX_DRAW_BUFFERS...\n");
 	glBindFragDataLocationIndexed(prog, max_draw_buffers, 0, "foo");
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 
 	/* ARB_blend_func_extended says,
@@ -85,11 +88,13 @@ void piglit_init(int argc, char **argv)
 	 */
 	printf("Trying index > 1...\n");
 	glBindFragDataLocationIndexed(prog, 0, 2, "foo");
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Trying location = GL_MAX_DUAL_SOURCE_DRAW_BUFFERS with index 1...\n");
 	glBindFragDataLocationIndexed(prog, max_dual_source, 1, "foo");
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Page 236 (page 252 of the PDF) of the OpenGL 3.0 spec says:
 	 *
@@ -107,15 +112,18 @@ void piglit_init(int argc, char **argv)
 	 */
 	printf("Trying name = `gl_FragColor'...\n");
 	glBindFragDataLocationIndexed(prog, 0, 0, "gl_FragColor");
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Trying name = `gl_FragDepth'...\n");
 	glBindFragDataLocationIndexed(prog, 0, 0, "gl_FragDepth");
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Trying name = `gl_'...\n");
 	glBindFragDataLocationIndexed(prog, 0, 0, "gl_");
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	piglit_report_result(PIGLIT_PASS);
 }
diff --git a/tests/spec/arb_blend_func_extended/api/blend-api.c b/tests/spec/arb_blend_func_extended/api/blend-api.c
index c3c2504..9617f83 100644
--- a/tests/spec/arb_blend_func_extended/api/blend-api.c
+++ b/tests/spec/arb_blend_func_extended/api/blend-api.c
@@ -60,40 +60,49 @@ void piglit_init(int argc, char **argv)
 	printf("Querying blend mode (SRC1_COLOR, 0).\n");
 	/* try all new blending modes */
 	glBlendFunc(GL_SRC1_COLOR, GL_ZERO);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Querying blend mode (SRC1_ALPHA, 0)\n");
 	glBlendFunc(GL_SRC1_ALPHA, GL_ZERO);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Querying blend mode (1-SRC1_COLOR, 0)\n");
 	glBlendFunc(GL_ONE_MINUS_SRC1_COLOR, GL_ZERO);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Querying blend mode (1-SRC1_ALPHA, 0)\n");
 	glBlendFunc(GL_ONE_MINUS_SRC1_ALPHA, GL_ZERO);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Querying blend mode (0, SRC1_COLOR)\n");
 	glBlendFunc(GL_ZERO, GL_SRC1_COLOR);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Querying blend mode (0, SRC1_ALPHA)\n");
 	glBlendFunc(GL_ZERO, GL_SRC1_ALPHA);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Querying blend mode (0, 1-SRC1_COLOR)\n");
 	glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC1_COLOR);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Querying blend mode (0, 1-SRC1_ALPHA)\n");
 	glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC1_ALPHA);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* GL_SRC_ALPHA_SATURATE is now handled as a DST attrib */
 	printf("Querying blend mode (0, SRC_ALPHA_SATURATE)\n");
 	glBlendFunc(GL_ZERO, GL_SRC_ALPHA_SATURATE);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	piglit_report_result(PIGLIT_PASS);
 }
diff --git a/tests/spec/arb_blend_func_extended/api/getfragdataindex.c b/tests/spec/arb_blend_func_extended/api/getfragdataindex.c
index 21a3538..be4e411 100644
--- a/tests/spec/arb_blend_func_extended/api/getfragdataindex.c
+++ b/tests/spec/arb_blend_func_extended/api/getfragdataindex.c
@@ -91,7 +91,8 @@ void piglit_init(int argc, char **argv)
 	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
 	glAttachShader(prog, vs);
 	glAttachShader(prog, fs);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Page 237 (page 253 of the PDF) of the OpenGL 3.0 spec says:
 	 *
@@ -101,7 +102,8 @@ void piglit_init(int argc, char **argv)
 	 */
 	printf("Querying index before linking...\n");
 	idx = glGetFragDataIndex(prog, "v");
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (idx != -1) {
 		fprintf(stderr, "Expected index = -1, got %d\n", idx);
@@ -109,7 +111,8 @@ void piglit_init(int argc, char **argv)
 	}
 
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_link_check_status(prog)) {
 		piglit_report_result(PIGLIT_FAIL);
@@ -117,7 +120,8 @@ void piglit_init(int argc, char **argv)
 
 	printf("Querying index of nonexistent variable...\n");
 	idx = glGetFragDataIndex(prog, "waldo");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (idx != -1) {
 		fprintf(stderr, "Expected index = -1, got %d\n", idx);
diff --git a/tests/spec/arb_draw_buffers/state_change.c b/tests/spec/arb_draw_buffers/state_change.c
index 730a9a4..2366aea 100644
--- a/tests/spec/arb_draw_buffers/state_change.c
+++ b/tests/spec/arb_draw_buffers/state_change.c
@@ -82,7 +82,8 @@ piglit_display(void)
 	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT,
 				  GL_TEXTURE_2D, tex[1], 0);
 	check_fbo_status();
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i) {
 		GLint buffer, expected_buffer;
@@ -115,7 +116,8 @@ piglit_display(void)
 		}
 	}
 
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	return PIGLIT_PASS;
 }
diff --git a/tests/spec/arb_framebuffer_object/same-attachment-glFramebufferRenderbuffer-GL_DEPTH_STENCIL_ATTACHMENT.c b/tests/spec/arb_framebuffer_object/same-attachment-glFramebufferRenderbuffer-GL_DEPTH_STENCIL_ATTACHMENT.c
index d45397c..f95a73d 100644
--- a/tests/spec/arb_framebuffer_object/same-attachment-glFramebufferRenderbuffer-GL_DEPTH_STENCIL_ATTACHMENT.c
+++ b/tests/spec/arb_framebuffer_object/same-attachment-glFramebufferRenderbuffer-GL_DEPTH_STENCIL_ATTACHMENT.c
@@ -118,13 +118,13 @@ void piglit_init(int argc, char **argv)
 			         GL_RENDERBUFFER,
 			         rb);
 
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	pass = check_attachment(GL_DEPTH_ATTACHMENT, rb) && pass;
 	pass = check_attachment(GL_STENCIL_ATTACHMENT, rb) && pass;
 	pass = check_attachment(GL_DEPTH_STENCIL_ATTACHMENT, rb) && pass;
 
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
 }
diff --git a/tests/spec/arb_framebuffer_object/same-attachment-glFramebufferTexture2D-GL_DEPTH_STENCIL_ATTACHMENT.c b/tests/spec/arb_framebuffer_object/same-attachment-glFramebufferTexture2D-GL_DEPTH_STENCIL_ATTACHMENT.c
index 0724362..d2d2af8 100644
--- a/tests/spec/arb_framebuffer_object/same-attachment-glFramebufferTexture2D-GL_DEPTH_STENCIL_ATTACHMENT.c
+++ b/tests/spec/arb_framebuffer_object/same-attachment-glFramebufferTexture2D-GL_DEPTH_STENCIL_ATTACHMENT.c
@@ -126,13 +126,13 @@ void piglit_init(int argc, char **argv)
 			       tex,
 			       0); /*level*/
 
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	pass = check_attachment(GL_DEPTH_ATTACHMENT, tex) && pass;
 	pass = check_attachment(GL_STENCIL_ATTACHMENT, tex) && pass;
 	pass = check_attachment(GL_DEPTH_STENCIL_ATTACHMENT, tex) && pass;
 
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
 }
diff --git a/tests/spec/arb_map_buffer_range/map_buffer_range_error_check.c b/tests/spec/arb_map_buffer_range/map_buffer_range_error_check.c
index 9abb3f9..b612eae 100644
--- a/tests/spec/arb_map_buffer_range/map_buffer_range_error_check.c
+++ b/tests/spec/arb_map_buffer_range/map_buffer_range_error_check.c
@@ -63,19 +63,23 @@ piglit_init(int argc, char *argv[])
 
 	/* offset < 0 */
 	glMapBufferRange(target, -1, 1, access);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* length < 0 */
 	glMapBufferRange(target, 0, -1, access);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* offset + lenght > GL_BUFFER_SIZE */
 	glMapBufferRange(target, 1, GL_BUFFER_SIZE, access);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* undefined access bits */
 	glMapBufferRange(target, 0, 10, 0xffffffff);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 
 	/*
@@ -97,30 +101,36 @@ piglit_init(int argc, char *argv[])
 
 	/* (a) map again */
 	glMapBufferRange(target, 0, 10, access);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 	glUnmapBuffer(target);
 
 	/* for (b) case */
 	glMapBufferRange(target, 0, 10, 0);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* for (c) case */
 	glMapBufferRange(target, 0, 10, GL_MAP_READ_BIT |
 					      GL_MAP_INVALIDATE_RANGE_BIT);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glMapBufferRange(target, 0, 10, GL_MAP_READ_BIT |
 					      GL_MAP_INVALIDATE_BUFFER_BIT);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glMapBufferRange(target, 0, 10, GL_MAP_READ_BIT |
 					      GL_MAP_UNSYNCHRONIZED_BIT);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* for (d) case */
 	glMapBufferRange(target, 0, 10, GL_MAP_FLUSH_EXPLICIT_BIT |
 					      GL_MAP_READ_BIT);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 
 	piglit_report_result(PIGLIT_PASS);
diff --git a/tests/spec/arb_shader_objects/clear-with-deleted.c b/tests/spec/arb_shader_objects/clear-with-deleted.c
index 1d8d826..38d0348 100644
--- a/tests/spec/arb_shader_objects/clear-with-deleted.c
+++ b/tests/spec/arb_shader_objects/clear-with-deleted.c
@@ -77,7 +77,8 @@ piglit_display(void)
 	 * deletion but not deleted.
 	 */
 	piglit_GetProgramiv(prog, GL_DELETE_STATUS, &status);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 	if (status != GL_TRUE) {
 		fprintf(stderr,
 			"GL_DELETE_STATUS when deleted reported non-true %d\n",
@@ -102,7 +103,8 @@ piglit_display(void)
 
 	/* The program should still report being deleted. */
 	piglit_GetProgramiv(prog, GL_DELETE_STATUS, &status);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 	if (status != GL_TRUE) {
 		fprintf(stderr,
 			"GL_DELETE_STATUS after a clear reported non-true %d\n",
@@ -114,7 +116,7 @@ piglit_display(void)
 	piglit_UseProgram(0);
 
 	piglit_GetProgramiv(prog, GL_DELETE_STATUS, &status);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
 
 	piglit_present_results();
 
diff --git a/tests/spec/arb_shader_objects/delete-repeat.c b/tests/spec/arb_shader_objects/delete-repeat.c
index e19aa1c..d49c68a 100644
--- a/tests/spec/arb_shader_objects/delete-repeat.c
+++ b/tests/spec/arb_shader_objects/delete-repeat.c
@@ -82,7 +82,8 @@ piglit_display(void)
 
 	/* The program should still report being deleted. */
 	piglit_GetProgramiv(prog, GL_DELETE_STATUS, &status);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 	if (status != GL_TRUE) {
 		fprintf(stderr,
 			"GL_DELETE_STATUS after a clear reported non-true %d\n",
@@ -94,7 +95,7 @@ piglit_display(void)
 	piglit_UseProgram(0);
 
 	piglit_GetProgramiv(prog, GL_DELETE_STATUS, &status);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
 
 	piglit_present_results();
 
diff --git a/tests/spec/ext_texture_integer/api-drawpixels.c b/tests/spec/ext_texture_integer/api-drawpixels.c
index c5ba408..99c7c9d 100644
--- a/tests/spec/ext_texture_integer/api-drawpixels.c
+++ b/tests/spec/ext_texture_integer/api-drawpixels.c
@@ -66,7 +66,7 @@ piglit_display(void)
 {
 	static const int black[4] = {0, 0, 0, 0};
 	static const float green[4] = {0, 1, 0, 0};
-	bool pass;
+	bool pass = GL_TRUE;
 
 	/* We don't have to do an integer FBO for this test, because
 	 * no error is specified in the non-integer FBO case:
@@ -79,7 +79,7 @@ piglit_display(void)
 	glClear(GL_COLOR_BUFFER_BIT);
 
 	glDrawPixels(1, 1, GL_RGBA_INTEGER_EXT, GL_UNSIGNED_INT, black);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass;
 
 	/* The text in GL 3.0 specification banning
 	 * glDrawPixels(integer format) precedes the restriction from
@@ -93,10 +93,10 @@ piglit_display(void)
 	 * Based on this, we test for GL_INVALID_OPERATION even for FLOAT.
 	 */
 	glDrawPixels(1, 1, GL_RGBA_INTEGER_EXT, GL_FLOAT, black);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass;
 
 	/* Make sure that we really didn't render anything. */
-	pass = piglit_probe_rect_rgba(0, 0, piglit_width, piglit_height, green);
+	pass = piglit_probe_rect_rgba(0, 0, piglit_width, piglit_height, green) && pass;
 
 	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
 }
diff --git a/tests/spec/ext_texture_integer/api-readpixels.c b/tests/spec/ext_texture_integer/api-readpixels.c
index 9ea6eb6..9e97e18 100644
--- a/tests/spec/ext_texture_integer/api-readpixels.c
+++ b/tests/spec/ext_texture_integer/api-readpixels.c
@@ -49,11 +49,13 @@ piglit_init(int argc, char **argv)
 
 	/* Is GL_INVALID_ENUM generated by glReadPixels? */
 	glReadPixels(0, 0, 4, 4, GL_RGBA_INTEGER, GL_FLOAT, buf);
-	piglit_check_gl_error(GL_INVALID_ENUM, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_ENUM))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Is GL_INVALID_OPERATION generated by glReadPixels? */
 	glReadPixels(0, 0, 4, 4, GL_RGBA_INTEGER, GL_UNSIGNED_INT, buf);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	piglit_report_result(PIGLIT_PASS);
 }
diff --git a/tests/spec/ext_texture_integer/api-teximage.c b/tests/spec/ext_texture_integer/api-teximage.c
index ef10f5d..92ff58b 100644
--- a/tests/spec/ext_texture_integer/api-teximage.c
+++ b/tests/spec/ext_texture_integer/api-teximage.c
@@ -49,19 +49,22 @@ piglit_display(void)
 	/* Check that GL_FLOAT type is not accepted with integer formats */
 	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16UI_EXT, 1, 1, 0,
 		     GL_RGBA_INTEGER, GL_FLOAT, black);
-	piglit_check_gl_error(GL_INVALID_ENUM, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_ENUM))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Check that GL_INVALID_OPERATION is generated by trying to mix
 	 * integer/float formats/types.
 	 */
 	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0,
 		     GL_RGBA_INTEGER, GL_SHORT, NULL);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glTexSubImage2D(GL_TEXTURE_2D, 0,
 			0, 0, 4, 4,
 			GL_RGBA_INTEGER, GL_FLOAT, NULL);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Check for GL_INVALID_OPERATION when trying to copy framebuffer pixels
 	 * to an integer texture when the framebuffer is not an integer format.
@@ -72,7 +75,8 @@ piglit_display(void)
 
 	glCopyTexSubImage2D(GL_TEXTURE_2D, 0,
 			    0, 0, 0, 0, 4, 4);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glDeleteTextures(1, &tex);
 
diff --git a/tests/spec/ext_transform_feedback/alignment.c b/tests/spec/ext_transform_feedback/alignment.c
index 66b1d56..309082a 100644
--- a/tests/spec/ext_transform_feedback/alignment.c
+++ b/tests/spec/ext_transform_feedback/alignment.c
@@ -136,7 +136,8 @@ void piglit_init(int argc, char **argv)
 	if (!piglit_link_check_status(prog))
 		piglit_report_result(PIGLIT_FAIL);
 	glGenBuffers(1, &xfb_buf);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 }
 
 enum piglit_result piglit_display(void)
@@ -154,7 +155,7 @@ enum piglit_result piglit_display(void)
 	glVertexAttribIPointer(input_index, 1, GL_UNSIGNED_INT,
 			       sizeof(GLuint), &verts);
 	glEnableVertexAttribArray(input_index);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, xfb_buf);
 	memset(buffer, 0xffffffff, sizeof(buffer));
@@ -166,10 +167,10 @@ enum piglit_result piglit_display(void)
 	piglit_BeginTransformFeedback(GL_POINTS);
 	glDrawArrays(GL_POINTS, 0, 4);
 	piglit_EndTransformFeedback();
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	readback = glMapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, GL_READ_ONLY);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	/* Figure out expected output */
 	memset(expected, 0xffffffff, sizeof(expected));
diff --git a/tests/spec/ext_transform_feedback/discard-api.c b/tests/spec/ext_transform_feedback/discard-api.c
index 849f5fb..fe6a2c9 100644
--- a/tests/spec/ext_transform_feedback/discard-api.c
+++ b/tests/spec/ext_transform_feedback/discard-api.c
@@ -61,7 +61,8 @@ piglit_init(int argc, char **argv)
 	glGetIntegerv(GL_RASTERIZER_DISCARD, &enabled);
 	if (!enabled)
 		piglit_report_result(PIGLIT_FAIL);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glDisable(GL_RASTERIZER_DISCARD);
 	if (glIsEnabled(GL_RASTERIZER_DISCARD))
@@ -69,7 +70,8 @@ piglit_init(int argc, char **argv)
 	glGetIntegerv(GL_RASTERIZER_DISCARD, &enabled);
 	if (enabled)
 		piglit_report_result(PIGLIT_FAIL);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	piglit_report_result(PIGLIT_PASS);
 }
diff --git a/tests/spec/ext_transform_feedback/generatemipmap.c b/tests/spec/ext_transform_feedback/generatemipmap.c
index 4af035d..ec1808d 100644
--- a/tests/spec/ext_transform_feedback/generatemipmap.c
+++ b/tests/spec/ext_transform_feedback/generatemipmap.c
@@ -162,7 +162,8 @@ create_fbo(void)
 	}
 
 	glGenerateMipmapEXT(GL_TEXTURE_2D);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (discard) {
 		if (!glIsEnabled(GL_RASTERIZER_DISCARD)) {
diff --git a/tests/spec/ext_transform_feedback/order.c b/tests/spec/ext_transform_feedback/order.c
index 3a3fab8..5443619 100644
--- a/tests/spec/ext_transform_feedback/order.c
+++ b/tests/spec/ext_transform_feedback/order.c
@@ -152,7 +152,8 @@ initialize_shader_and_xfb()
 		     3*NUM_POINTS*sizeof(unsigned), NULL, GL_STREAM_READ);
 	piglit_BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, xfb_buf);
 	piglit_UseProgram(prog);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 }
 
 static void
@@ -176,7 +177,8 @@ initialize_vertex_shader_inputs()
 	glVertexAttribIPointer(starting_x_index, 1, GL_UNSIGNED_INT, sizeof(unsigned),
 			       verts);
 	glEnableVertexAttribArray(starting_x_index);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 }
 
 /**
@@ -227,7 +229,8 @@ draw()
 		glDrawArrays(draw_mode, 0, NUM_POINTS);
 	}
 	piglit_EndTransformFeedback();
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 }
 
 static void
@@ -238,7 +241,7 @@ check_results_and_exit()
 	GLboolean pass = GL_TRUE;
 
 	readback = glMapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, GL_READ_ONLY);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	for (i = 0; i < NUM_POINTS; ++i) {
 		unsigned expected_starting_x =
diff --git a/tests/spec/ext_transform_feedback/tessellation.c b/tests/spec/ext_transform_feedback/tessellation.c
index ee63741..71311f9 100644
--- a/tests/spec/ext_transform_feedback/tessellation.c
+++ b/tests/spec/ext_transform_feedback/tessellation.c
@@ -317,7 +317,8 @@ initialize_shader_and_xfb()
 	glGenBuffers(1, &xfb_buf);
 	glGenQueries(1, &xfb_query);
 	glFrontFace(GL_CW);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 }
 
 static void
@@ -336,7 +337,8 @@ setup_vertex_shader_inputs(GLuint prog)
 	glEnableVertexAttribArray(vertex_index);
 	glEnableVertexAttribArray(smooth_color_index);
 	glEnableVertexAttribArray(flat_color_index);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 }
 
 static void
@@ -438,7 +440,8 @@ draw(GLuint prog, bool use_xfb, float y_offset, GLenum mode,
 		piglit_EndTransformFeedback();
 		glEndQuery(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
 	}
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 }
 
 static void
@@ -608,7 +611,7 @@ enum piglit_result piglit_display(void)
 	pass = match_strips(0, 1) && pass;
 
 	readback = glMapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, GL_READ_ONLY);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(0) && pass;
 
 	num_output_vertices = count_output_vertices(readback);
 	if (num_output_vertices != expected_num_output_vertices) {
diff --git a/tests/spec/gl-3.0/api/bindfragdata-invalid-parameters.c b/tests/spec/gl-3.0/api/bindfragdata-invalid-parameters.c
index db54124..ce5fec8 100644
--- a/tests/spec/gl-3.0/api/bindfragdata-invalid-parameters.c
+++ b/tests/spec/gl-3.0/api/bindfragdata-invalid-parameters.c
@@ -56,7 +56,8 @@ void piglit_init(int argc, char **argv)
 	 * without a shader at all.  Only a program object is necessary.
 	 */
 	prog = glCreateProgram();
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Page 236 (page 252 of the PDF) of the OpenGL 3.0 spec says:
 	 *
@@ -68,11 +69,13 @@ void piglit_init(int argc, char **argv)
 	 */
 	printf("Trying location = -1...\n");
 	glBindFragDataLocation(prog, -1, "foo");
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Trying location = GL_MAX_DRAW_BUFFERS...\n");
 	glBindFragDataLocation(prog, max_draw_buffers, "foo");
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Page 236 (page 252 of the PDF) of the OpenGL 3.0 spec says:
 	 *
@@ -90,15 +93,18 @@ void piglit_init(int argc, char **argv)
 	 */
 	printf("Trying name = `gl_FragColor'...\n");
 	glBindFragDataLocation(prog, 0, "gl_FragColor");
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Trying name = `gl_FragDepth'...\n");
 	glBindFragDataLocation(prog, 0, "gl_FragDepth");
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	printf("Trying name = `gl_'...\n");
 	glBindFragDataLocation(prog, 0, "gl_");
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	piglit_report_result(PIGLIT_PASS);
 }
diff --git a/tests/spec/gl-3.0/api/bindfragdata-link-error.c b/tests/spec/gl-3.0/api/bindfragdata-link-error.c
index 20b764a..976f7eb 100644
--- a/tests/spec/gl-3.0/api/bindfragdata-link-error.c
+++ b/tests/spec/gl-3.0/api/bindfragdata-link-error.c
@@ -78,7 +78,8 @@ void piglit_init(int argc, char **argv)
 	prog = glCreateProgram();
 	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
 	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* First, verify that the program will link without making any
 	 * location assignments through the API.
@@ -88,7 +89,8 @@ void piglit_init(int argc, char **argv)
 	glAttachShader(prog, vs);
 	glAttachShader(prog, fs);
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_link_check_status(prog)) {
 		piglit_report_result(PIGLIT_FAIL);
@@ -111,12 +113,15 @@ void piglit_init(int argc, char **argv)
 	printf("Assigning `a' to GL_MAX_DRAW_BUFFERS - 1...\n");
 
 	glBindFragDataLocation(prog, 0, "v");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 	glBindFragDataLocation(prog, max_draw_buffers - 1, "a");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (piglit_link_check_status(prog)) {
 		fprintf(stderr,
@@ -139,12 +144,15 @@ void piglit_init(int argc, char **argv)
 	printf("Assigning `a[0]' and `v' to the same slot...\n");
 
 	glBindFragDataLocation(prog, 0, "v");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 	glBindFragDataLocation(prog, 0, "a");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (piglit_link_check_status(prog)) {
 		fprintf(stderr,
@@ -155,12 +163,15 @@ void piglit_init(int argc, char **argv)
 	printf("Assigning `a[1]' to `v' to the same slot...\n");
 
 	glBindFragDataLocation(prog, 1, "v");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 	glBindFragDataLocation(prog, 0, "a");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (piglit_link_check_status(prog)) {
 		fprintf(stderr,
@@ -171,12 +182,15 @@ void piglit_init(int argc, char **argv)
 	printf("Assigning `a' to `v' to non-overlapping slots...\n");
 
 	glBindFragDataLocation(prog, 0, "v");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 	glBindFragDataLocation(prog, 2, "a");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_link_check_status(prog)) {
 		fprintf(stderr,
diff --git a/tests/spec/gl-3.0/api/bindfragdata-nonexistent-variable.c b/tests/spec/gl-3.0/api/bindfragdata-nonexistent-variable.c
index 8b87ce8..3637860 100644
--- a/tests/spec/gl-3.0/api/bindfragdata-nonexistent-variable.c
+++ b/tests/spec/gl-3.0/api/bindfragdata-nonexistent-variable.c
@@ -77,7 +77,8 @@ void piglit_init(int argc, char **argv)
 	prog = glCreateProgram();
 	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
 	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* First, verify that the program will link without making any
 	 * location assignments through the API.
@@ -87,7 +88,8 @@ void piglit_init(int argc, char **argv)
 	glAttachShader(prog, vs);
 	glAttachShader(prog, fs);
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_link_check_status(prog)) {
 		piglit_report_result(PIGLIT_FAIL);
@@ -101,12 +103,15 @@ void piglit_init(int argc, char **argv)
 	printf("Binding `unicorn' to a non-conflicting location...\n");
 
 	glBindFragDataLocation(prog, 0, "v");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 	glBindFragDataLocation(prog, 1, "unicorn");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_link_check_status(prog)) {
 		fprintf(stderr,
@@ -116,7 +121,8 @@ void piglit_init(int argc, char **argv)
 	}
 
 	loc = glGetFragDataLocation(prog, "unicorn");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (loc != -1) {
 		fprintf(stderr, "Expected location = -1, got %d\n", loc);
@@ -126,12 +132,15 @@ void piglit_init(int argc, char **argv)
 	printf("Binding `unicorn' to a conflicting location...\n");
 
 	glBindFragDataLocation(prog, 0, "v");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 	glBindFragDataLocation(prog, 0, "unicorn");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_link_check_status(prog)) {
 		fprintf(stderr,
@@ -141,7 +150,8 @@ void piglit_init(int argc, char **argv)
 	}
 
 	loc = glGetFragDataLocation(prog, "unicorn");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (loc != -1) {
 		fprintf(stderr, "Expected location = -1, got %d\n", loc);
diff --git a/tests/spec/gl-3.0/api/clearbuffer-common.c b/tests/spec/gl-3.0/api/clearbuffer-common.c
index 73b5d30..f675f1f 100644
--- a/tests/spec/gl-3.0/api/clearbuffer-common.c
+++ b/tests/spec/gl-3.0/api/clearbuffer-common.c
@@ -93,7 +93,8 @@ generate_simple_fbo(bool color, bool stencil, bool depth, bool packed)
 					  rb[2]);
 	}
 
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* All of the possible combinations that we can generate are required
 	 * to be supported by all OpenGL 3.0 implementations, with one
@@ -130,7 +131,8 @@ generate_simple_fbo(bool color, bool stencil, bool depth, bool packed)
 		| GL_STENCIL_BUFFER_BIT);
 	glFinish();
 
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	return fb;
 }
@@ -169,7 +171,7 @@ simple_probe(bool color, const float *color_value,
 		}
 	}
 
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 	return pass;
 }
 
diff --git a/tests/spec/gl-3.0/api/clearbuffer-depth-stencil.c b/tests/spec/gl-3.0/api/clearbuffer-depth-stencil.c
index 88063a9..87fc6c4 100644
--- a/tests/spec/gl-3.0/api/clearbuffer-depth-stencil.c
+++ b/tests/spec/gl-3.0/api/clearbuffer-depth-stencil.c
@@ -155,7 +155,7 @@ void piglit_init(int argc, char **argv)
 			&& pass;
 
 		glDeleteFramebuffers(1, &fb);
-		piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+		pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 	}
 
 	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
diff --git a/tests/spec/gl-3.0/api/clearbuffer-depth.c b/tests/spec/gl-3.0/api/clearbuffer-depth.c
index 02357a9..08d9e35 100644
--- a/tests/spec/gl-3.0/api/clearbuffer-depth.c
+++ b/tests/spec/gl-3.0/api/clearbuffer-depth.c
@@ -151,7 +151,7 @@ void piglit_init(int argc, char **argv)
 			&& pass;
 
 		glDeleteFramebuffers(1, &fb);
-		piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+		pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 	}
 
 	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
diff --git a/tests/spec/gl-3.0/api/clearbuffer-invalid-buffer.c b/tests/spec/gl-3.0/api/clearbuffer-invalid-buffer.c
index b9410c1..6149893 100644
--- a/tests/spec/gl-3.0/api/clearbuffer-invalid-buffer.c
+++ b/tests/spec/gl-3.0/api/clearbuffer-invalid-buffer.c
@@ -115,13 +115,16 @@ void piglit_init(int argc, char **argv)
 			       test_vectors[i].name);
 
 		glClearBufferfv(test_vectors[i].value, 0, zero_f);
-		piglit_check_gl_error(GL_INVALID_ENUM, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_ENUM))
+			piglit_report_result(PIGLIT_FAIL);
 
 		glClearBufferiv(test_vectors[i].value, 0, zero_i);
-		piglit_check_gl_error(GL_INVALID_ENUM, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_ENUM))
+			piglit_report_result(PIGLIT_FAIL);
 
 		glClearBufferuiv(test_vectors[i].value, 0, (GLuint *) zero_i);
-		piglit_check_gl_error(GL_INVALID_ENUM, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_ENUM))
+			piglit_report_result(PIGLIT_FAIL);
 	}
 
 	for (i = 0; i < ARRAY_SIZE(fi_test_vectors); i++) {
@@ -130,7 +133,8 @@ void piglit_init(int argc, char **argv)
 			       fi_test_vectors[i].name);
 
 		glClearBufferfi(fi_test_vectors[i].value, 0, 0.0, 0);
-		piglit_check_gl_error(GL_INVALID_ENUM, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_ENUM))
+			piglit_report_result(PIGLIT_FAIL);
 	}
 
 	piglit_report_result(PIGLIT_PASS);
diff --git a/tests/spec/gl-3.0/api/clearbuffer-invalid-drawbuffer.c b/tests/spec/gl-3.0/api/clearbuffer-invalid-drawbuffer.c
index dddab91..d4c9ac8 100644
--- a/tests/spec/gl-3.0/api/clearbuffer-invalid-drawbuffer.c
+++ b/tests/spec/gl-3.0/api/clearbuffer-invalid-drawbuffer.c
@@ -66,43 +66,55 @@ void piglit_init(int argc, char **argv)
 		printf("Trying invalid drawbuffer with GL_DEPTH...\n");
 
 	glClearBufferfv(GL_DEPTH, 1, zero_f);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferfv(GL_DEPTH, -1, zero_f);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferiv(GL_DEPTH, 1, zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferiv(GL_DEPTH, -1, zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferuiv(GL_DEPTH, 1, (GLuint *) zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferuiv(GL_DEPTH, -1, (GLuint *) zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_automatic)
 		printf("Trying invalid drawbuffer with GL_STENCIL...\n");
 
 	glClearBufferfv(GL_STENCIL, 1, zero_f);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferfv(GL_STENCIL, -1, zero_f);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferiv(GL_STENCIL, 1, zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferiv(GL_STENCIL, -1, zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferuiv(GL_STENCIL, 1, (GLuint *) zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferuiv(GL_STENCIL, -1, (GLuint *) zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Page 263 (page 279 of the PDF) of the OpenGL 3.0 spec says:
 	 *
@@ -119,31 +131,39 @@ void piglit_init(int argc, char **argv)
 		printf("Trying invalid drawbuffer with GL_DEPTH_STENCIL...\n");
 
 	glClearBufferfi(GL_DEPTH_STENCIL, 1, 0.0f, 0);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferfi(GL_DEPTH_STENCIL, -1, 0.0f, 0);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_automatic)
 		printf("Trying invalid drawbuffer with GL_COLOR...\n");
 
 	glClearBufferfv(GL_COLOR, -1, zero_f);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferfv(GL_COLOR, max_draw_buffers, zero_f);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferiv(GL_COLOR, -1, zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferiv(GL_COLOR, max_draw_buffers, zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferuiv(GL_COLOR, -1, (GLuint *) zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferuiv(GL_COLOR, max_draw_buffers, (GLuint *) zero_i);
-	piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_VALUE))
+		piglit_report_result(PIGLIT_FAIL);
 
 	for (i = 0; i < max_draw_buffers; i++) {
 		/* It seems reasonable that someone might accidentally use
@@ -151,14 +171,17 @@ void piglit_init(int argc, char **argv)
 		 * generates the expected error.
 		 */
 		glClearBufferfv(GL_COLOR, GL_DRAW_BUFFER0 + i, zero_f);
-		piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_VALUE))
+			piglit_report_result(PIGLIT_FAIL);
 
 		glClearBufferiv(GL_COLOR, GL_DRAW_BUFFER0 + i, zero_i);
-		piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_VALUE))
+			piglit_report_result(PIGLIT_FAIL);
 
 		glClearBufferuiv(GL_COLOR, GL_DRAW_BUFFER0 + i,
 				 (GLuint *) zero_i);
-		piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_VALUE))
+			piglit_report_result(PIGLIT_FAIL);
 	}
 
 	/* Now try the valid cases and assert no error.
@@ -168,35 +191,45 @@ void piglit_init(int argc, char **argv)
 
 	for (i = 0; i < max_draw_buffers; i++) {
 		glClearBufferfv(GL_COLOR, i, zero_f);
-		piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_NO_ERROR))
+			piglit_report_result(PIGLIT_FAIL);
 
 		glClearBufferiv(GL_COLOR, i, zero_i);
-		piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_NO_ERROR))
+			piglit_report_result(PIGLIT_FAIL);
 
 		glClearBufferuiv(GL_COLOR, i, (GLuint *) zero_i);
-		piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_NO_ERROR))
+			piglit_report_result(PIGLIT_FAIL);
 	}
 
 	glClearBufferfv(GL_DEPTH, 0, zero_f);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferiv(GL_DEPTH, 0, zero_i);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferuiv(GL_DEPTH, 0, (GLuint *) zero_i);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferfv(GL_STENCIL, 0, zero_f);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferiv(GL_STENCIL, 0, zero_i);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferuiv(GL_STENCIL, 0, (GLuint *) zero_i);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	glClearBufferfi(GL_DEPTH_STENCIL, 0, 0.0f, 0);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	piglit_report_result(PIGLIT_PASS);
 }
diff --git a/tests/spec/gl-3.0/api/clearbuffer-stencil.c b/tests/spec/gl-3.0/api/clearbuffer-stencil.c
index 35cb0e4..e0420e7 100644
--- a/tests/spec/gl-3.0/api/clearbuffer-stencil.c
+++ b/tests/spec/gl-3.0/api/clearbuffer-stencil.c
@@ -151,7 +151,7 @@ void piglit_init(int argc, char **argv)
 			&& pass;
 
 		glDeleteFramebuffers(1, &fb);
-		piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+		pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 	}
 
 	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
diff --git a/tests/spec/gl-3.0/api/getfragdatalocation.c b/tests/spec/gl-3.0/api/getfragdatalocation.c
index b091238..5bb2d4b 100644
--- a/tests/spec/gl-3.0/api/getfragdatalocation.c
+++ b/tests/spec/gl-3.0/api/getfragdatalocation.c
@@ -81,7 +81,8 @@ void piglit_init(int argc, char **argv)
 	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
 	glAttachShader(prog, vs);
 	glAttachShader(prog, fs);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	/* Page 237 (page 253 of the PDF) of the OpenGL 3.0 spec says:
 	 *
@@ -91,7 +92,8 @@ void piglit_init(int argc, char **argv)
 	 */
 	printf("Querying location before linking...\n");
 	loc = glGetFragDataLocation(prog, "v");
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (loc != -1) {
 		fprintf(stderr, "Expected location = -1, got %d\n", loc);
@@ -99,7 +101,8 @@ void piglit_init(int argc, char **argv)
 	}
 
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_link_check_status(prog)) {
 		piglit_report_result(PIGLIT_FAIL);
@@ -107,7 +110,8 @@ void piglit_init(int argc, char **argv)
 
 	printf("Querying location of nonexistent variable...\n");
 	loc = glGetFragDataLocation(prog, "waldo");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (loc != -1) {
 		fprintf(stderr, "Expected location = -1, got %d\n", loc);
@@ -124,7 +128,8 @@ void piglit_init(int argc, char **argv)
 	glBindFragDataLocation(prog, 0, "v");
 	glBindFragDataLocation(prog, 1, "a");
 	glLinkProgram(prog);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (!piglit_link_check_status(prog)) {
 		piglit_report_result(PIGLIT_FAIL);
@@ -132,7 +137,8 @@ void piglit_init(int argc, char **argv)
 
 	printf("Querying locations after binding and linking...\n");
 	loc = glGetFragDataLocation(prog, "v");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (loc != 0) {
 		fprintf(stderr, "Expected location = 0, got %d\n", loc);
@@ -140,7 +146,8 @@ void piglit_init(int argc, char **argv)
 	}
 
 	loc = glGetFragDataLocation(prog, "a");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (loc != 1) {
 		fprintf(stderr, "Expected location = 1, got %d\n", loc);
@@ -150,10 +157,12 @@ void piglit_init(int argc, char **argv)
 	printf("Querying locations after just binding...\n");
 	glBindFragDataLocation(prog, 2, "v");
 	glBindFragDataLocation(prog, 0, "a");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	loc = glGetFragDataLocation(prog, "v");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (loc != 0) {
 		fprintf(stderr, "Expected location = 0, got %d\n", loc);
@@ -161,7 +170,8 @@ void piglit_init(int argc, char **argv)
 	}
 
 	loc = glGetFragDataLocation(prog, "a");
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 
 	if (loc != 1) {
 		fprintf(stderr, "Expected location = 1, got %d\n", loc);
diff --git a/tests/spec/glsl-1.30/execution/isinf-and-isnan.c b/tests/spec/glsl-1.30/execution/isinf-and-isnan.c
index dd4dbe6..fedc298 100644
--- a/tests/spec/glsl-1.30/execution/isinf-and-isnan.c
+++ b/tests/spec/glsl-1.30/execution/isinf-and-isnan.c
@@ -235,7 +235,8 @@ setup_fbo()
 			      piglit_width, piglit_height);
 	glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
 				  GL_RENDERBUFFER, color_rb);
-	piglit_check_gl_error(0, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(0))
+		piglit_report_result(PIGLIT_FAIL);
 
 	fb_status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
 	if (fb_status != GL_FRAMEBUFFER_COMPLETE) {
diff --git a/tests/spec/glsl-1.30/texel-offset-limits.c b/tests/spec/glsl-1.30/texel-offset-limits.c
index b562d0d..1b76065 100644
--- a/tests/spec/glsl-1.30/texel-offset-limits.c
+++ b/tests/spec/glsl-1.30/texel-offset-limits.c
@@ -49,7 +49,8 @@ piglit_init(int argc, char **argv)
 	piglit_require_GLSL_version(130);
 
 	glGetIntegerv(GL_MIN_PROGRAM_TEXEL_OFFSET, &val);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 	if (val > -8) {
 		fprintf(stderr,
 			"query of GL_MIN_PROGRAM_TEXEL_OFFSET "
@@ -59,7 +60,8 @@ piglit_init(int argc, char **argv)
 	}
 
 	glGetIntegerv(GL_MAX_PROGRAM_TEXEL_OFFSET, &val);
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
 	if (val < 7) {
 		fprintf(stderr,
 			"query of GL_MAX_PROGRAM_TEXEL_OFFSET "
diff --git a/tests/spec/nv_conditional_render/begin-while-active.c b/tests/spec/nv_conditional_render/begin-while-active.c
index 9da03c8..689aecb 100644
--- a/tests/spec/nv_conditional_render/begin-while-active.c
+++ b/tests/spec/nv_conditional_render/begin-while-active.c
@@ -65,7 +65,8 @@ piglit_init(int argc, char **argv)
 	glGenQueries(1, &q);
 	glBeginQuery(GL_SAMPLES_PASSED, q);
 	glBeginConditionalRenderNV(q, GL_QUERY_WAIT_NV);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 	glEndQuery(GL_SAMPLES_PASSED);
 	glDeleteQueries(1, &q);
 
diff --git a/tests/spec/nv_conditional_render/begin-zero.c b/tests/spec/nv_conditional_render/begin-zero.c
index 255887f..8218a1d 100644
--- a/tests/spec/nv_conditional_render/begin-zero.c
+++ b/tests/spec/nv_conditional_render/begin-zero.c
@@ -61,7 +61,8 @@ piglit_init(int argc, char **argv)
 	piglit_require_extension("GL_NV_conditional_render");
 
 	glBeginConditionalRenderNV(0, GL_QUERY_WAIT_NV);
-	piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+		piglit_report_result(PIGLIT_FAIL);
 
 	piglit_report_result(PIGLIT_PASS);
 }
diff --git a/tests/spec/oes_compressed_etc1_rgb8_texture/oes_compressed_etc1_rgb8_texture-basic.c b/tests/spec/oes_compressed_etc1_rgb8_texture/oes_compressed_etc1_rgb8_texture-basic.c
index 010082a..fb0d3de 100644
--- a/tests/spec/oes_compressed_etc1_rgb8_texture/oes_compressed_etc1_rgb8_texture-basic.c
+++ b/tests/spec/oes_compressed_etc1_rgb8_texture/oes_compressed_etc1_rgb8_texture-basic.c
@@ -142,11 +142,11 @@ test_etc1_rgb8_texture_8x8(const struct etc1_rgb8_texture_8x8 *tex)
     const GLenum format = GL_ETC1_RGB8_OES;
     const GLsizei width = 8, height = 8;
     unsigned x, y;
-    int pass;
+    int pass = GL_TRUE;
 
     glCompressedTexImage2D(GL_TEXTURE_2D, 0,
             format, width, height, 0, sizeof(tex->data), tex->data);
-    piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+    pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 
     glEnable(GL_TEXTURE_2D);
 
@@ -177,7 +177,7 @@ piglit_display(void)
     const GLsizei width = 8, height = 8;
     struct etc1_rgb8_texture_8x8 tex;
     GLuint t;
-    int pass;
+    int pass = GL_TRUE;
 
     glGenTextures(1, &t);
     glBindTexture(GL_TEXTURE_2D, t);
@@ -191,24 +191,24 @@ piglit_display(void)
     /* no compression support */
     glTexImage2D(GL_TEXTURE_2D, 0, format,
             width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, tex.rgb);
-    piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+    pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
 
     glCopyTexImage2D(GL_TEXTURE_2D, 0, format, 0, 0, width, height, 0);
-    piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+    pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
 
     /* test the texture */
-    pass = test_etc1_rgb8_texture_8x8(&tex);
+    pass = test_etc1_rgb8_texture_8x8(&tex) && pass;
 
     /* no subimage support */
     glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,
             width, height, GL_RGB, GL_UNSIGNED_BYTE, tex.rgb);
-    piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+    pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass;
 
     glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, width, height);
-    piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+    pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass;
 
     glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, format, sizeof(tex.data), tex.data);
-    piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+    pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass;
 
     glDeleteTextures(1, &t);
 
diff --git a/tests/spec/oes_compressed_paletted_texture/oes_compressed_paletted_texture-api.c b/tests/spec/oes_compressed_paletted_texture/oes_compressed_paletted_texture-api.c
index 396da81..054c592 100644
--- a/tests/spec/oes_compressed_paletted_texture/oes_compressed_paletted_texture-api.c
+++ b/tests/spec/oes_compressed_paletted_texture/oes_compressed_paletted_texture-api.c
@@ -94,9 +94,11 @@ piglit_init(int argc, char **argv)
 			     16, 16, 0,
 			     t[i].internal_format, t[i].type, buffer);
 #if defined(USE_OPENGL_ES1) || defined(USE_OPENGL_ES2)
-		piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_VALUE))
+			piglit_report_result(PIGLIT_FAIL);
 #else
-		piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+			piglit_report_result(PIGLIT_FAIL);
 #endif
 	}
 
@@ -114,12 +116,14 @@ piglit_init(int argc, char **argv)
 		glCompressedTexImage2D(GL_TEXTURE_2D, 0, t[i].internal_format,
 					  16, 16, 0,
 					  size + t[i].palette_size - 1, buffer);
-		piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_VALUE))
+			piglit_report_result(PIGLIT_FAIL);
 
 		glCompressedTexImage2D(GL_TEXTURE_2D, 0, t[i].internal_format,
 					  16, 16, 0,
 					  size + t[i].palette_size, buffer);
-		piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_NO_ERROR))
+			piglit_report_result(PIGLIT_FAIL);
 
 		/* The OES_compressed_paletted_texture spec says:
 		 *
@@ -136,7 +140,8 @@ piglit_init(int argc, char **argv)
 		glCompressedTexImage2D(GL_TEXTURE_2D, 1, t[i].internal_format,
 				       8, 8, 0,
 				       size + t[i].palette_size, buffer);
-		piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_VALUE))
+			piglit_report_result(PIGLIT_FAIL);
 
 		/* The OES_compressed_paletted_texture spec says:
 		 *
@@ -165,9 +170,11 @@ piglit_init(int argc, char **argv)
 				       16, 16, 1,
 				       size + t[i].palette_size, buffer);
 #if defined(USE_OPENGL_ES1) || defined(USE_OPENGL_ES2)
-		piglit_check_gl_error(GL_INVALID_VALUE, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_VALUE))
+			piglit_report_result(PIGLIT_FAIL);
 #else
-		piglit_check_gl_error(GL_INVALID_OPERATION, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+			piglit_report_result(PIGLIT_FAIL);
 #endif
 	}
 
diff --git a/tests/texturing/compressedteximage.c b/tests/texturing/compressedteximage.c
index ab421b2..c49f203 100644
--- a/tests/texturing/compressedteximage.c
+++ b/tests/texturing/compressedteximage.c
@@ -218,7 +218,8 @@ piglit_display(void)
 		glBindTexture(GL_TEXTURE_2D, tex);
 		glCompressedTexImage2D(GL_TEXTURE_2D, level, format->token,
 				       w, h, 0, size, compressed);
-		piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+		if (!piglit_check_gl_error(GL_NO_ERROR))
+			piglit_report_result(PIGLIT_FAIL);
 
 		free(compressed);
 	}
diff --git a/tests/texturing/depth-cube-map.c b/tests/texturing/depth-cube-map.c
index 39d69c9..b5ea216 100644
--- a/tests/texturing/depth-cube-map.c
+++ b/tests/texturing/depth-cube-map.c
@@ -229,7 +229,7 @@ piglit_display(void)
 	pass = pass && piglit_probe_pixel_rgb(185, 210, ColorPosZ);
 	pass = pass && piglit_probe_pixel_rgb(260, 210, ColorNegZ);
 
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 	piglit_present_results();
 	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
 	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
diff --git a/tests/texturing/sampler-cube-shadow.c b/tests/texturing/sampler-cube-shadow.c
index 9f3754b..1e123d8 100644
--- a/tests/texturing/sampler-cube-shadow.c
+++ b/tests/texturing/sampler-cube-shadow.c
@@ -281,7 +281,7 @@ piglit_display(void)
 	pass = pass && piglit_probe_rect_rgba(175, 200, 50, 50, black);
 	pass = pass && piglit_probe_rect_rgba(250, 200, 50, 50, white);
 
-	piglit_check_gl_error(GL_NO_ERROR, PIGLIT_FAIL);
+	pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
 	piglit_present_results();
 	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
diff --git a/tests/util/piglit-util.c b/tests/util/piglit-util.c
index 6b1a344..9c4f0a5 100644
--- a/tests/util/piglit-util.c
+++ b/tests/util/piglit-util.c
@@ -228,13 +228,14 @@ const char* piglit_get_gl_error_name(GLenum error)
 #undef CASE
 }
 
-void piglit_check_gl_error(GLenum expected_error, enum piglit_result result)
+GLboolean
+piglit_check_gl_error(GLenum expected_error)
 {
 	GLenum actual_error;
 
 	actual_error = glGetError();
 	if (actual_error == expected_error) {
-		return;
+		return GL_TRUE;
 	}
 
 	/*
@@ -252,7 +253,7 @@ void piglit_check_gl_error(GLenum expected_error, enum piglit_result result)
 		piglit_get_gl_error_name(expected_error), expected_error);
         }
 
-	piglit_report_result(result);
+	return GL_FALSE;
 }
 
 void piglit_reset_gl_error(void)
diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h
index 964b0f8..1c8c740 100755
--- a/tests/util/piglit-util.h
+++ b/tests/util/piglit-util.h
@@ -168,12 +168,13 @@ bool piglit_is_extension_supported(const char *name);
 const char* piglit_get_gl_error_name(GLenum error);
 
 /**
- * \brief Check for unexpected GL errors and possibly terminate the test.
+ * \brief Check for unexpected GL errors.
  *
  * If glGetError() returns an error other than \c expected_error, then
- * print a diagnostic and terminate the test with the given \c result.
+ * print a diagnostic and return GL_FALSE.  Otherwise return GL_TRUE.
  */
-void piglit_check_gl_error(GLenum expected_error, enum piglit_result result);
+GLboolean
+piglit_check_gl_error(GLenum expected_error);
 
 /**
  * \brief Drain all GL errors.
-- 
1.7.6.4



More information about the Piglit mailing list