[Piglit] [PATCH] Add functions to probe int, uint rgba buffer data

Anuj Phogat anuj.phogat at gmail.com
Mon Dec 19 11:50:38 PST 2011


Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
---
 tests/spec/gl-3.0/api/clearbuffer-common.c |   28 ++++++++++++
 tests/spec/gl-3.0/api/clearbuffer-common.h |    4 ++
 tests/util/piglit-util-gl.c                |   64 ++++++++++++++++++++++++++++
 tests/util/piglit-util.h                   |    2 +
 4 files changed, 98 insertions(+), 0 deletions(-)

diff --git a/tests/spec/gl-3.0/api/clearbuffer-common.c b/tests/spec/gl-3.0/api/clearbuffer-common.c
index 0c1fc06..ad983ce 100644
--- a/tests/spec/gl-3.0/api/clearbuffer-common.c
+++ b/tests/spec/gl-3.0/api/clearbuffer-common.c
@@ -173,6 +173,34 @@ simple_probe(bool color, const float *color_value,
 	return pass;
 }

+/* Read pixel color values from multiple format color buffers */
+bool
+probe_rect_color(int x, int y, int w, int h,
+		 GLenum format, GLenum type,
+		 GLvoid *refcolor)
+{
+	if (type == GL_FLOAT) {
+		if (!piglit_probe_rect_rgba(0, 0,
+					    piglit_width, piglit_height,
+					    (GLfloat*)refcolor))
+			return false;
+	}
+	else if (type == GL_UNSIGNED_INT) {
+		if (!piglit_probe_rect_rgba_uint(0, 0,
+					    piglit_width, piglit_height,
+					    (GLuint*)refcolor))
+			return false;
+	}
+	else if (type == GL_INT) {
+		if (!piglit_probe_rect_rgba_int(0, 0,
+					    piglit_width, piglit_height,
+					    (GLint*)refcolor))
+			return false;
+
+	}
+	return true;
+}
+
 enum piglit_result
 piglit_display(void)
 {
diff --git a/tests/spec/gl-3.0/api/clearbuffer-common.h b/tests/spec/gl-3.0/api/clearbuffer-common.h
index e5afc51..1cfd972 100644
--- a/tests/spec/gl-3.0/api/clearbuffer-common.h
+++ b/tests/spec/gl-3.0/api/clearbuffer-common.h
@@ -31,3 +31,7 @@ extern bool
 simple_probe(bool color, const float *color_value,
 	     bool stencil, int stencil_value,
 	     bool depth, float depth_value);
+
+extern bool
+probe_rect_color(int x, int y, int width, int height,
+		 GLenum format, GLenum type, GLvoid *refcolor);
diff --git a/tests/util/piglit-util-gl.c b/tests/util/piglit-util-gl.c
index 2a88ef5..f066500 100644
--- a/tests/util/piglit-util-gl.c
+++ b/tests/util/piglit-util-gl.c
@@ -142,6 +142,70 @@ piglit_probe_rect_rgba(int x, int y, int w, int h, const float *expected)
 }

 int
+piglit_probe_rect_rgba_int(int x, int y, int w, int h, const int *expected)
+{
+	int i, j, p;
+	GLint *probe;
+	GLint *pixels = malloc(w*h*4*sizeof(int));
+
+	glReadPixels(x, y, w, h, GL_RGBA_INTEGER, GL_INT, pixels);
+
+	for (j = 0; j < h; j++) {
+		for (i = 0; i < w; i++) {
+			probe = &pixels[(j*w+i)*4];
+
+			for (p = 0; p < 4; ++p) {
+				if (fabs(probe[p] - expected[p]) >= piglit_tolerance[p]) {
+					printf("Probe at (%d,%d)\n", x+i, y+j);
+					printf("  Expected: %d %d %d %d\n",
+					       expected[0], expected[1], expected[2], expected[3]);
+					printf("  Observed: %d %d %d %d\n",
+					       probe[0], probe[1], probe[2], probe[3]);
+
+					free(pixels);
+					return 0;
+				}
+			}
+		}
+	}
+
+	free(pixels);
+	return 1;
+}
+
+int
+piglit_probe_rect_rgba_uint(int x, int y, int w, int h, const unsigned int *expected)
+{
+	int i, j, p;
+	GLuint *probe;
+	GLuint *pixels = malloc(w*h*4*sizeof(unsigned int));
+
+	glReadPixels(x, y, w, h, GL_RGBA_INTEGER, GL_UNSIGNED_INT, pixels);
+
+	for (j = 0; j < h; j++) {
+		for (i = 0; i < w; i++) {
+			probe = &pixels[(j*w+i)*4];
+
+			for (p = 0; p < 4; ++p) {
+				if (fabs(probe[p] - expected[p]) >= piglit_tolerance[p]) {
+					printf("Probe at (%d,%d)\n", x+i, y+j);
+					printf("  Expected: %d %d %d %d\n",
+					       expected[0], expected[1], expected[2], expected[3]);
+					printf("  Observed: %d %d %d %d\n",
+					       probe[0], probe[1], probe[2], probe[3]);
+
+					free(pixels);
+					return 0;
+				}
+			}
+		}
+	}
+
+	free(pixels);
+	return 1;
+}
+
+int
 piglit_probe_image_rgb(int x, int y, int w, int h, const float *image)
 {
 	int i, j, p;
diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h
index 15eb42a..964b0f8 100755
--- a/tests/util/piglit-util.h
+++ b/tests/util/piglit-util.h
@@ -193,6 +193,8 @@ int piglit_probe_pixel_rgb(int x, int y, const float* expected);
 int piglit_probe_pixel_rgba(int x, int y, const float* expected);
 int piglit_probe_rect_rgb(int x, int y, int w, int h, const float* expected);
 int piglit_probe_rect_rgba(int x, int y, int w, int h, const float* expected);
+int piglit_probe_rect_rgba_int(int x, int y, int w, int h, const int* expected);
+int piglit_probe_rect_rgba_uint(int x, int y, int w, int h, const unsigned int* expected);
 int piglit_probe_image_rgb(int x, int y, int w, int h, const float *image);
 int piglit_probe_image_rgba(int x, int y, int w, int h, const float *image);
 int piglit_probe_texel_rect_rgb(int target, int level, int x, int y,
-- 
1.7.7.4



More information about the Piglit mailing list