[Piglit] [PATCH 06/16] Unify piglit_probe_image_* functions between GL and GLES

Josh Triplett josh at joshtriplett.org
Thu Jul 3 12:38:03 PDT 2014


Signed-off-by: Josh Triplett <josh at joshtriplett.org>
---
 tests/util/piglit-util-gl-common.c | 210 +++++++++++++++++++++++++++++++++++++
 tests/util/piglit-util-gl.c        | 166 -----------------------------
 tests/util/piglit-util-gles.c      |  44 --------
 3 files changed, 210 insertions(+), 210 deletions(-)

diff --git a/tests/util/piglit-util-gl-common.c b/tests/util/piglit-util-gl-common.c
index 6764d96..9f778c5 100644
--- a/tests/util/piglit-util-gl-common.c
+++ b/tests/util/piglit-util-gl-common.c
@@ -1273,3 +1273,213 @@ piglit_probe_rect_rgba_uint(int x, int y, int w, int h,
 	free(pixels);
 	return 1;
 }
+
+static void
+print_pixel_ubyte(const GLubyte *pixel, unsigned components)
+{
+	int p;
+	for (p = 0; p < components; ++p)
+		printf(" %u", pixel[p]);
+}
+
+static void
+print_pixel_float(const float *pixel, unsigned components)
+{
+	int p;
+	for (p = 0; p < components; ++p)
+		printf(" %f", pixel[p]);
+}
+
+/**
+ * Compute the appropriate tolerance for comparing images of the given
+ * base format.
+ */
+void
+piglit_compute_probe_tolerance(GLenum format, float *tolerance)
+{
+	int num_components, component;
+	switch (format) {
+	case GL_LUMINANCE_ALPHA:
+		tolerance[0] = piglit_tolerance[0];
+		tolerance[1] = piglit_tolerance[3];
+		break;
+	case GL_ALPHA:
+		tolerance[0] = piglit_tolerance[3];
+		break;
+	default:
+		num_components = piglit_num_components(format);
+		for (component = 0; component < num_components; ++component)
+			tolerance[component] = piglit_tolerance[component];
+		break;
+	}
+}
+
+/**
+ * Compare two in-memory floating-point images.
+ */
+int
+piglit_compare_images_color(int x, int y, int w, int h, int num_components,
+			    const float *tolerance,
+			    const float *expected_image,
+			    const float *observed_image)
+{
+	int i, j, p;
+	for (j = 0; j < h; j++) {
+		for (i = 0; i < w; i++) {
+			const float *expected =
+				&expected_image[(j*w+i)*num_components];
+			const float *probe =
+				&observed_image[(j*w+i)*num_components];
+
+			for (p = 0; p < num_components; ++p) {
+				if (fabs(probe[p] - expected[p])
+				    >= tolerance[p]) {
+					printf("Probe at (%i,%i)\n", x+i, y+j);
+					printf("  Expected:");
+					print_pixel_float(expected, num_components);
+					printf("\n  Observed:");
+					print_pixel_float(probe, num_components);
+					printf("\n");
+
+					return 0;
+				}
+			}
+		}
+	}
+
+	return 1;
+}
+
+/**
+ * Compare the contents of the current read framebuffer with the given
+ * in-memory floating-point image.
+ */
+int
+piglit_probe_image_color(int x, int y, int w, int h, GLenum format,
+			 const float *image)
+{
+	int c = piglit_num_components(format);
+	GLfloat *pixels;
+	float tolerance[4];
+	int result;
+
+	piglit_compute_probe_tolerance(format, tolerance);
+
+	if (format == GL_INTENSITY) {
+		/* GL_INTENSITY is not allowed for ReadPixels so
+		 * substitute GL_LUMINANCE.
+		 */
+		format = GL_LUMINANCE;
+	}
+
+	pixels = piglit_read_pixels_float(x, y, w, h, format, NULL);
+
+	result = piglit_compare_images_color(x, y, w, h, c, tolerance, image,
+					     pixels);
+
+	free(pixels);
+	return result;
+}
+
+int
+piglit_probe_image_rgb(int x, int y, int w, int h, const float *image)
+{
+	return piglit_probe_image_color(x, y, w, h, GL_RGB, image);
+}
+
+int
+piglit_probe_image_rgba(int x, int y, int w, int h, const float *image)
+{
+	return piglit_probe_image_color(x, y, w, h, GL_RGBA, image);
+}
+
+/**
+ * Compare two in-memory unsigned-byte images.
+ */
+int
+piglit_compare_images_ubyte(int x, int y, int w, int h,
+			    const GLubyte *expected_image,
+			    const GLubyte *observed_image)
+{
+	int i, j;
+	for (j = 0; j < h; j++) {
+		for (i = 0; i < w; i++) {
+			const GLubyte expected = expected_image[j*w+i];
+			const GLubyte probe = observed_image[j*w+i];
+
+			if (probe != expected) {
+				printf("Probe at (%i,%i)\n", x+i, y+j);
+				printf("  Expected: %d\n", expected);
+				printf("  Observed: %d\n", probe);
+
+				return 0;
+			}
+		}
+	}
+
+	return 1;
+}
+
+/**
+ * Compare the contents of the current read framebuffer's stencil
+ * buffer with the given in-memory byte image.
+ */
+int
+piglit_probe_image_stencil(int x, int y, int w, int h,
+			   const GLubyte *image)
+{
+	GLubyte *pixels = malloc(w*h*sizeof(GLubyte));
+	int result;
+	GLint old_pack_alignment;
+
+	/* Temporarily set pack alignment to 1 so that glReadPixels
+	 * won't put any padding at the end of the row.
+	 */
+	glGetIntegerv(GL_PACK_ALIGNMENT, &old_pack_alignment);
+	glPixelStorei(GL_PACK_ALIGNMENT, 1);
+
+	glReadPixels(x, y, w, h, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, pixels);
+
+	glPixelStorei(GL_PACK_ALIGNMENT, old_pack_alignment);
+
+	result = piglit_compare_images_ubyte(x, y, w, h, image, pixels);
+
+	free(pixels);
+	return result;
+}
+
+int
+piglit_probe_image_ubyte(int x, int y, int w, int h, GLenum format,
+			const GLubyte *image)
+{
+	const int c = piglit_num_components(format);
+	GLubyte *pixels = malloc(w * h * 4 * sizeof(GLubyte));
+	int i, j, p;
+
+	glReadPixels(x, y, w, h, format, GL_UNSIGNED_BYTE, pixels);
+
+	for (j = 0; j < h; j++) {
+		for (i = 0; i < w; i++) {
+			const GLubyte *expected = &image[(j * w + i) * c];
+			const GLubyte *probe = &pixels[(j * w + i) * c];
+
+			for (p = 0; p < c; ++p) {
+				if (probe[p] == expected[p])
+					continue;
+
+				printf("Probe at (%i,%i)\n", x + i, y + j);
+				printf("  Expected:");
+				print_pixel_ubyte(expected, c);
+				printf("\n  Observed:");
+				print_pixel_ubyte(probe, c);
+				printf("\n");
+
+				free(pixels);
+				return 0;
+			}
+		}
+	}
+
+	free(pixels);
+	return 1;
+}
diff --git a/tests/util/piglit-util-gl.c b/tests/util/piglit-util-gl.c
index 4c019da..7c3414c 100644
--- a/tests/util/piglit-util-gl.c
+++ b/tests/util/piglit-util-gl.c
@@ -38,172 +38,6 @@
 
 GLint piglit_ARBfp_pass_through = 0;
 
-static void
-print_pixel(const float *pixel, unsigned components)
-{
-	int p;
-	for (p = 0; p < components; ++p)
-		printf(" %f", pixel[p]);
-}
-
-/**
- * Compute the appropriate tolerance for comparing images of the given
- * base format.
- */
-void
-piglit_compute_probe_tolerance(GLenum format, float *tolerance)
-{
-	int num_components, component;
-	switch (format) {
-	case GL_LUMINANCE_ALPHA:
-		tolerance[0] = piglit_tolerance[0];
-		tolerance[1] = piglit_tolerance[3];
-		break;
-	case GL_ALPHA:
-		tolerance[0] = piglit_tolerance[3];
-		break;
-	default:
-		num_components = piglit_num_components(format);
-		for (component = 0; component < num_components; ++component)
-			tolerance[component] = piglit_tolerance[component];
-		break;
-	}
-}
-
-/**
- * Compare two in-memory floating-point images.
- */
-int
-piglit_compare_images_color(int x, int y, int w, int h, int num_components,
-			    const float *tolerance,
-			    const float *expected_image,
-			    const float *observed_image)
-{
-	int i, j, p;
-	for (j = 0; j < h; j++) {
-		for (i = 0; i < w; i++) {
-			const float *expected =
-				&expected_image[(j*w+i)*num_components];
-			const float *probe =
-				&observed_image[(j*w+i)*num_components];
-
-			for (p = 0; p < num_components; ++p) {
-				if (fabs(probe[p] - expected[p])
-				    >= tolerance[p]) {
-					printf("Probe at (%i,%i)\n", x+i, y+j);
-					printf("  Expected:");
-					print_pixel(expected, num_components);
-					printf("\n  Observed:");
-					print_pixel(probe, num_components);
-					printf("\n");
-
-					return 0;
-				}
-			}
-		}
-	}
-
-	return 1;
-}
-
-/**
- * Compare two in-memory unsigned-byte images.
- */
-int
-piglit_compare_images_ubyte(int x, int y, int w, int h,
-			    const GLubyte *expected_image,
-			    const GLubyte *observed_image)
-{
-	int i, j;
-	for (j = 0; j < h; j++) {
-		for (i = 0; i < w; i++) {
-			const GLubyte expected = expected_image[j*w+i];
-			const GLubyte probe = observed_image[j*w+i];
-
-			if (probe != expected) {
-				printf("Probe at (%i,%i)\n", x+i, y+j);
-				printf("  Expected: %d\n", expected);
-				printf("  Observed: %d\n", probe);
-
-				return 0;
-			}
-		}
-	}
-
-	return 1;
-}
-
-/**
- * Compare the contents of the current read framebuffer with the given
- * in-memory floating-point image.
- */
-int
-piglit_probe_image_color(int x, int y, int w, int h, GLenum format,
-			 const float *image)
-{
-	int c = piglit_num_components(format);
-	GLfloat *pixels = malloc(w*h*c*sizeof(float));
-	float tolerance[4];
-	int result;
-
-	piglit_compute_probe_tolerance(format, tolerance);
-
-	if (format == GL_INTENSITY) {
-		/* GL_INTENSITY is not allowed for ReadPixels so
-		 * substitute GL_LUMINANCE.
-		 */
-		format = GL_LUMINANCE;
-	}
-
-	glReadPixels(x, y, w, h, format, GL_FLOAT, pixels);
-
-	result = piglit_compare_images_color(x, y, w, h, c, tolerance, image,
-					     pixels);
-
-	free(pixels);
-	return result;
-}
-
-/**
- * Compare the contents of the current read framebuffer's stencil
- * buffer with the given in-memory byte image.
- */
-int
-piglit_probe_image_stencil(int x, int y, int w, int h,
-			   const GLubyte *image)
-{
-	GLubyte *pixels = malloc(w*h*sizeof(GLubyte));
-	int result;
-	GLint old_pack_alignment;
-
-	/* Temporarily set pack alignment to 1 so that glReadPixels
-	 * won't put any padding at the end of the row.
-	 */
-	glGetIntegerv(GL_PACK_ALIGNMENT, &old_pack_alignment);
-	glPixelStorei(GL_PACK_ALIGNMENT, 1);
-
-	glReadPixels(x, y, w, h, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, pixels);
-
-	glPixelStorei(GL_PACK_ALIGNMENT, old_pack_alignment);
-
-	result = piglit_compare_images_ubyte(x, y, w, h, image, pixels);
-
-	free(pixels);
-	return result;
-}
-
-int
-piglit_probe_image_rgb(int x, int y, int w, int h, const float *image)
-{
-	return piglit_probe_image_color(x, y, w, h, GL_RGB, image);
-}
-
-int
-piglit_probe_image_rgba(int x, int y, int w, int h, const float *image)
-{
-	return piglit_probe_image_color(x, y, w, h, GL_RGBA, image);
-}
-
 /**
  * Read a pixel from the given location and compare its depth value to the
  * given expected value.
diff --git a/tests/util/piglit-util-gles.c b/tests/util/piglit-util-gles.c
index e1cdae5..7eef8e2 100644
--- a/tests/util/piglit-util-gles.c
+++ b/tests/util/piglit-util-gles.c
@@ -35,50 +35,6 @@
 
 #include "piglit-util-gl-common.h"
 
-static void
-print_pixel(const GLubyte *pixel, unsigned components)
-{
-	int p;
-	for (p = 0; p < components; ++p)
-		printf(" %u", pixel[p]);
-}
-
-int
-piglit_probe_image_ubyte(int x, int y, int w, int h, GLenum format,
-			const GLubyte *image)
-{
-	const int c = piglit_num_components(format);
-	GLubyte *pixels = malloc(w * h * 4 * sizeof(GLubyte));
-	int i, j, p;
-
-	glReadPixels(x, y, w, h, format, GL_UNSIGNED_BYTE, pixels);
-
-	for (j = 0; j < h; j++) {
-		for (i = 0; i < w; i++) {
-			const GLubyte *expected = &image[(j * w + i) * c];
-			const GLubyte *probe = &pixels[(j * w + i) * c];
-
-			for (p = 0; p < c; ++p) {
-				if (probe[p] == expected[p])
-					continue;
-
-				printf("Probe at (%i,%i)\n", x + i, y + j);
-				printf("  Expected:");
-				print_pixel(expected, c);
-				printf("\n  Observed:");
-				print_pixel(probe, c);
-				printf("\n");
-
-				free(pixels);
-				return 0;
-			}
-		}
-	}
-
-	free(pixels);
-	return 1;
-}
-
 void
 piglit_escape_exit_key(unsigned char key, int x, int y)
 {
-- 
2.0.1



More information about the Piglit mailing list