[Piglit] [PATCH 05/16] Unify piglit_probe_pixel_* and piglit_probe_rect_* between GL and GLES
Josh Triplett
josh at joshtriplett.org
Thu Jul 3 12:38:02 PDT 2014
Introduce a new internal helper, piglit_read_pixels_float, that always
returns floats. On GL it just calls glReadPixels with GL_FLOAT; on GLES
it uses GL_UNSIGNED_BYTE and converts.
Signed-off-by: Josh Triplett <josh at joshtriplett.org>
---
tests/util/piglit-util-gl-common.c | 280 +++++++++++++++++++++++++++++++++++++
tests/util/piglit-util-gl.c | 258 ----------------------------------
tests/util/piglit-util-gles.c | 127 -----------------
3 files changed, 280 insertions(+), 385 deletions(-)
diff --git a/tests/util/piglit-util-gl-common.c b/tests/util/piglit-util-gl-common.c
index 32bddf8..6764d96 100644
--- a/tests/util/piglit-util-gl-common.c
+++ b/tests/util/piglit-util-gl-common.c
@@ -993,3 +993,283 @@ piglit_get_luminance_intensity_bits(GLenum internalformat, int *bits)
}
return false;
}
+
+/* Wrapper around glReadPixels that always returns floats; reads and converts
+ * GL_UNSIGNED_BYTE on GLES. If pixels == NULL, malloc a float array of the
+ * appropriate size, otherwise use the one provided. */
+static GLfloat *
+piglit_read_pixels_float(GLint x, GLint y, GLsizei width, GLsizei height,
+ GLenum format, GLfloat *pixels)
+{
+ GLubyte *pixels_b;
+ unsigned i, ncomponents;
+
+ ncomponents = width * height * piglit_num_components(format);
+ if (!pixels)
+ pixels = malloc(ncomponents * sizeof(GLfloat));
+
+ if (!piglit_is_gles()) {
+ glReadPixels(x, y, width, height, format, GL_FLOAT, pixels);
+ return pixels;
+ }
+
+ pixels_b = malloc(ncomponents * sizeof(GLubyte));
+ glReadPixels(x, y, width, height, format, GL_UNSIGNED_BYTE, pixels_b);
+ for (i = 0; i < ncomponents; i++)
+ pixels[i] = pixels_b[i] / 255.0;
+ free(pixels_b);
+ return pixels;
+}
+
+int
+piglit_probe_pixel_rgb_silent(int x, int y, const float* expected, float *out_probe)
+{
+ GLfloat probe[3];
+ int i;
+ GLboolean pass = GL_TRUE;
+
+ piglit_read_pixels_float(x, y, 1, 1, GL_RGB, probe);
+
+ for(i = 0; i < 3; ++i)
+ if (fabs(probe[i] - expected[i]) > piglit_tolerance[i])
+ pass = GL_FALSE;
+
+ if (out_probe)
+ memcpy(out_probe, probe, sizeof(probe));
+
+ return pass;
+}
+
+int
+piglit_probe_pixel_rgba_silent(int x, int y, const float* expected, float *out_probe)
+{
+ GLfloat probe[4];
+ int i;
+ GLboolean pass = GL_TRUE;
+
+ piglit_read_pixels_float(x, y, 1, 1, GL_RGBA, probe);
+
+ for(i = 0; i < 4; ++i)
+ if (fabs(probe[i] - expected[i]) > piglit_tolerance[i])
+ pass = GL_FALSE;
+
+ if (out_probe)
+ memcpy(out_probe, probe, sizeof(probe));
+
+ return pass;
+}
+
+/**
+ * Read a pixel from the given location and compare its RGB value to the
+ * given expected values.
+ *
+ * Print a log message if the color value deviates from the expected value.
+ * \return true if the color values match, false otherwise
+ */
+int
+piglit_probe_pixel_rgb(int x, int y, const float* expected)
+{
+ GLfloat probe[3];
+ int i;
+ GLboolean pass = GL_TRUE;
+
+ piglit_read_pixels_float(x, y, 1, 1, GL_RGB, probe);
+
+ for(i = 0; i < 3; ++i)
+ if (fabs(probe[i] - expected[i]) > piglit_tolerance[i])
+ pass = GL_FALSE;
+
+ if (pass)
+ return 1;
+
+ printf("Probe color at (%i,%i)\n", x, y);
+ printf(" Expected: %f %f %f\n", expected[0], expected[1], expected[2]);
+ printf(" Observed: %f %f %f\n", probe[0], probe[1], probe[2]);
+
+ return 0;
+}
+
+/**
+ * Read a pixel from the given location and compare its RGBA value to the
+ * given expected values.
+ *
+ * Print a log message if the color value deviates from the expected value.
+ * \return true if the color values match, false otherwise
+ */
+int
+piglit_probe_pixel_rgba(int x, int y, const float* expected)
+{
+ GLfloat probe[4];
+ int i;
+ GLboolean pass = GL_TRUE;
+
+ piglit_read_pixels_float(x, y, 1, 1, GL_RGBA, probe);
+
+ for(i = 0; i < 4; ++i)
+ if (fabs(probe[i] - expected[i]) > piglit_tolerance[i])
+ pass = GL_FALSE;
+
+ if (pass)
+ return 1;
+
+ printf("Probe color at (%i,%i)\n", x, y);
+ printf(" Expected: %f %f %f %f\n", expected[0], expected[1], expected[2], expected[3]);
+ printf(" Observed: %f %f %f %f\n", probe[0], probe[1], probe[2], probe[3]);
+
+ return 0;
+}
+
+int
+piglit_probe_rect_rgb_silent(int x, int y, int w, int h, const float *expected)
+{
+ int i, j, p;
+ GLfloat *probe;
+ GLfloat *pixels;
+
+ pixels = piglit_read_pixels_float(x, y, w, h, GL_RGB, NULL);
+
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
+ probe = &pixels[(j*w+i)*3];
+
+ for (p = 0; p < 3; ++p) {
+ if (fabs(probe[p] - expected[p]) >= piglit_tolerance[p]) {
+ free(pixels);
+ return 0;
+ }
+ }
+ }
+ }
+
+ free(pixels);
+ return 1;
+}
+
+int
+piglit_probe_rect_rgb(int x, int y, int w, int h, const float *expected)
+{
+ int i, j, p;
+ GLfloat *probe;
+ GLfloat *pixels;
+
+ pixels = piglit_read_pixels_float(x, y, w, h, GL_RGB, NULL);
+
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
+ probe = &pixels[(j*w+i)*3];
+
+ for (p = 0; p < 3; ++p) {
+ if (fabs(probe[p] - expected[p]) >= piglit_tolerance[p]) {
+ printf("Probe color at (%i,%i)\n", x+i, y+j);
+ printf(" Expected: %f %f %f\n",
+ expected[0], expected[1], expected[2]);
+ printf(" Observed: %f %f %f\n",
+ probe[0], probe[1], probe[2]);
+
+ free(pixels);
+ return 0;
+ }
+ }
+ }
+ }
+
+ free(pixels);
+ return 1;
+}
+
+int
+piglit_probe_rect_rgba(int x, int y, int w, int h, const float *expected)
+{
+ int i, j, p;
+ GLfloat *probe;
+ GLfloat *pixels;
+
+ pixels = piglit_read_pixels_float(x, y, w, h, GL_RGBA, NULL);
+
+ 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 color at (%i,%i)\n", x+i, y+j);
+ printf(" Expected: %f %f %f %f\n",
+ expected[0], expected[1], expected[2], expected[3]);
+ printf(" Observed: %f %f %f %f\n",
+ probe[0], probe[1], probe[2], probe[3]);
+
+ free(pixels);
+ return 0;
+ }
+ }
+ }
+ }
+
+ free(pixels);
+ return 1;
+}
+
+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 color 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 color at (%d,%d)\n", x+i, y+j);
+ printf(" Expected: %u %u %u %u\n",
+ expected[0], expected[1], expected[2], expected[3]);
+ printf(" Observed: %u %u %u %u\n",
+ probe[0], probe[1], probe[2], probe[3]);
+
+ 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 91f3dc0..4c019da 100644
--- a/tests/util/piglit-util-gl.c
+++ b/tests/util/piglit-util-gl.c
@@ -38,174 +38,6 @@
GLint piglit_ARBfp_pass_through = 0;
-/**
- * Read a pixel from the given location and compare its RGBA value to the
- * given expected values.
- *
- * Print a log message if the color value deviates from the expected value.
- * \return true if the color values match, false otherwise
- */
-int piglit_probe_pixel_rgba(int x, int y, const float* expected)
-{
- GLfloat probe[4];
- int i;
- GLboolean pass = GL_TRUE;
-
- glReadPixels(x, y, 1, 1, GL_RGBA, GL_FLOAT, probe);
-
- for(i = 0; i < 4; ++i) {
- if (fabs(probe[i] - expected[i]) > piglit_tolerance[i]) {
- pass = GL_FALSE;
- }
- }
-
- if (pass)
- return 1;
-
- printf("Probe color at (%i,%i)\n", x, y);
- printf(" Expected: %f %f %f %f\n", expected[0], expected[1], expected[2], expected[3]);
- printf(" Observed: %f %f %f %f\n", probe[0], probe[1], probe[2], probe[3]);
-
- return 0;
-}
-
-int piglit_probe_pixel_rgb_silent(int x, int y, const float* expected, float *out_probe)
-{
- GLfloat probe[3];
- int i;
- GLboolean pass = GL_TRUE;
-
- glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, probe);
-
- for(i = 0; i < 3; ++i) {
- if (fabs(probe[i] - expected[i]) > piglit_tolerance[i]) {
- pass = GL_FALSE;
- }
- }
-
- if (out_probe)
- memcpy(out_probe, probe, sizeof(probe));
-
- return pass;
-}
-
-int piglit_probe_pixel_rgba_silent(int x, int y, const float* expected, float *out_probe)
-{
- GLfloat probe[4];
- int i;
- GLboolean pass = GL_TRUE;
-
- glReadPixels(x, y, 1, 1, GL_RGBA, GL_FLOAT, probe);
-
- for(i = 0; i < 4; ++i) {
- if (fabs(probe[i] - expected[i]) > piglit_tolerance[i]) {
- pass = GL_FALSE;
- }
- }
-
- if (out_probe)
- memcpy(out_probe, probe, sizeof(probe));
-
- return pass;
-}
-
-int
-piglit_probe_rect_rgba(int x, int y, int w, int h, const float *expected)
-{
- int i, j, p;
- GLfloat *probe;
- GLfloat *pixels = malloc(w*h*4*sizeof(float));
-
- glReadPixels(x, y, w, h, GL_RGBA, GL_FLOAT, 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 color at (%i,%i)\n", x+i, y+j);
- printf(" Expected: %f %f %f %f\n",
- expected[0], expected[1], expected[2], expected[3]);
- printf(" Observed: %f %f %f %f\n",
- probe[0], probe[1], probe[2], probe[3]);
-
- free(pixels);
- return 0;
- }
- }
- }
- }
-
- free(pixels);
- return 1;
-}
-
-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 color 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 color at (%d,%d)\n", x+i, y+j);
- printf(" Expected: %u %u %u %u\n",
- expected[0], expected[1], expected[2], expected[3]);
- printf(" Observed: %u %u %u %u\n",
- probe[0], probe[1], probe[2], probe[3]);
-
- free(pixels);
- return 0;
- }
- }
- }
- }
-
- free(pixels);
- return 1;
-}
-
static void
print_pixel(const float *pixel, unsigned components)
{
@@ -373,96 +205,6 @@ piglit_probe_image_rgba(int x, int y, int w, int h, const float *image)
}
/**
- * Read a pixel from the given location and compare its RGB value to the
- * given expected values.
- *
- * Print a log message if the color value deviates from the expected value.
- * \return true if the color values match, false otherwise
- */
-int piglit_probe_pixel_rgb(int x, int y, const float* expected)
-{
- GLfloat probe[3];
- int i;
- GLboolean pass = GL_TRUE;
-
- glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, probe);
-
-
- for(i = 0; i < 3; ++i) {
- if (fabs(probe[i] - expected[i]) > piglit_tolerance[i]) {
- pass = GL_FALSE;
- }
- }
-
- if (pass)
- return 1;
-
- printf("Probe color at (%i,%i)\n", x, y);
- printf(" Expected: %f %f %f\n", expected[0], expected[1], expected[2]);
- printf(" Observed: %f %f %f\n", probe[0], probe[1], probe[2]);
-
- return 0;
-}
-
-int
-piglit_probe_rect_rgb(int x, int y, int w, int h, const float *expected)
-{
- int i, j, p;
- GLfloat *probe;
- GLfloat *pixels = malloc(w*h*3*sizeof(float));
-
- glReadPixels(x, y, w, h, GL_RGB, GL_FLOAT, pixels);
-
- for (j = 0; j < h; j++) {
- for (i = 0; i < w; i++) {
- probe = &pixels[(j*w+i)*3];
-
- for (p = 0; p < 3; ++p) {
- if (fabs(probe[p] - expected[p]) >= piglit_tolerance[p]) {
- printf("Probe color at (%i,%i)\n", x+i, y+j);
- printf(" Expected: %f %f %f\n",
- expected[0], expected[1], expected[2]);
- printf(" Observed: %f %f %f\n",
- probe[0], probe[1], probe[2]);
-
- free(pixels);
- return 0;
- }
- }
- }
- }
-
- free(pixels);
- return 1;
-}
-
-int
-piglit_probe_rect_rgb_silent(int x, int y, int w, int h, const float *expected)
-{
- int i, j, p;
- GLfloat *probe;
- GLfloat *pixels = malloc(w*h*3*sizeof(float));
-
- glReadPixels(x, y, w, h, GL_RGB, GL_FLOAT, pixels);
-
- for (j = 0; j < h; j++) {
- for (i = 0; i < w; i++) {
- probe = &pixels[(j*w+i)*3];
-
- for (p = 0; p < 3; ++p) {
- if (fabs(probe[p] - expected[p]) >= piglit_tolerance[p]) {
- free(pixels);
- return 0;
- }
- }
- }
- }
-
- free(pixels);
- return 1;
-}
-
-/**
* 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 26c3fa3..e1cdae5 100644
--- a/tests/util/piglit-util-gles.c
+++ b/tests/util/piglit-util-gles.c
@@ -35,133 +35,6 @@
#include "piglit-util-gl-common.h"
-/**
- * Read a pixel from the given location and compare its RGBA value to the
- * given expected values.
- *
- * Print a log message if the color value deviates from the expected value.
- * \return true if the color values match, false otherwise
- */
-int piglit_probe_pixel_rgba(int x, int y, const float* expected)
-{
- GLubyte probe[4];
- int i;
- GLboolean pass = GL_TRUE;
-
- glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, probe);
-
- for(i = 0; i < 4; ++i) {
- if (fabs(probe[i]/255.0 - expected[i]) > piglit_tolerance[i]) {
- pass = GL_FALSE;
- }
- }
-
- if (pass)
- return 1;
-
- printf("Probe color at (%i,%i)\n", x, y);
- printf(" Expected: %f %f %f %f\n", expected[0], expected[1], expected[2], expected[3]);
- printf(" Observed: %f %f %f %f\n", probe[0]/255.0, probe[1]/255.0, probe[2]/255.0, probe[3]/255.0);
-
- return 0;
-}
-
-int
-piglit_probe_rect_rgba(int x, int y, int w, int h, const float *expected)
-{
- int i, j, p;
- GLubyte *probe;
- GLubyte *pixels = malloc(w*h*4*sizeof(GLubyte));
-
- glReadPixels(x, y, w, h, GL_RGBA, GL_UNSIGNED_BYTE, 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]/255.0 - expected[p]) >= piglit_tolerance[p]) {
- printf("Probe color at (%i,%i)\n", x+i, y+j);
- printf(" Expected: %f %f %f %f\n",
- expected[0], expected[1], expected[2], expected[3]);
- printf(" Observed: %f %f %f %f\n",
- probe[0]/255.0, probe[1]/255.0, probe[2]/255.0, probe[3]/255.0);
-
- free(pixels);
- return 0;
- }
- }
- }
- }
-
- free(pixels);
- return 1;
-}
-
-/**
- * Read a pixel from the given location and compare its RGB value to the
- * given expected values.
- *
- * Print a log message if the color value deviates from the expected value.
- * \return true if the color values match, false otherwise
- */
-int piglit_probe_pixel_rgb(int x, int y, const float* expected)
-{
- GLubyte probe[3];
- int i;
- GLboolean pass = GL_TRUE;
-
- glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, probe);
-
-
- for(i = 0; i < 3; ++i) {
- if (fabs(probe[i]/255.0 - expected[i]) > piglit_tolerance[i]) {
- pass = GL_FALSE;
- }
- }
-
- if (pass)
- return 1;
-
- printf("Probe color at (%i,%i)\n", x, y);
- printf(" Expected: %f %f %f\n", expected[0], expected[1], expected[2]);
- printf(" Observed: %f %f %f\n", probe[0]/255.0, probe[1]/255.0, probe[2]/255.0);
-
- return 0;
-}
-
-int
-piglit_probe_rect_rgb(int x, int y, int w, int h, const float *expected)
-{
- int i, j, p;
- GLubyte *probe;
- GLubyte *pixels = malloc(w*h*3*sizeof(GLubyte));
-
- glReadPixels(x, y, w, h, GL_RGB, GL_UNSIGNED_BYTE, pixels);
-
- for (j = 0; j < h; j++) {
- for (i = 0; i < w; i++) {
- probe = &pixels[(j*w+i)*3];
-
- for (p = 0; p < 3; ++p) {
- if (fabs(probe[p]/255.0 - expected[p]) >= piglit_tolerance[p]) {
- printf("Probe color at (%i,%i)\n", x+i, y+j);
- printf(" Expected: %f %f %f\n",
- expected[0], expected[1], expected[2]);
- printf(" Observed: %f %f %f\n",
- probe[0]/255.0, probe[1]/255.0, probe[2]/255.0);
-
- free(pixels);
- return 0;
- }
- }
- }
- }
-
- free(pixels);
- return 1;
-}
-
static void
print_pixel(const GLubyte *pixel, unsigned components)
{
--
2.0.1
More information about the Piglit
mailing list