On 09/20/2012 07:21 AM, Robert Bragg wrote:
This adds an egl_probe_front_pixel_rgb function that is analogous to
piglit_probe_pixel_rgba except it probes the front buffer instead of
probing the back buffer.
---
  tests/egl/egl-util.c |   30 ++++++++++++++++++++++++++++++
  tests/egl/egl-util.h |    4 ++++
  2 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/tests/egl/egl-util.c b/tests/egl/egl-util.c
index 20cd699..e26add4 100644
--- a/tests/egl/egl-util.c
+++ b/tests/egl/egl-util.c
@@ -37,6 +37,36 @@ static int automatic;

  int depth;

+int
+egl_probe_front_pixel_rgb(struct egl_state *state,
+                         int x, int y, const float *expected)
+{
+       XImage *ximage = XGetImage(state->dpy, state->win,
+                                  x, state->height - y - 1, 1, 1, AllPlanes, 
ZPixmap);
+       unsigned long pixel = XGetPixel(ximage, 0, 0);
+       uint8_t *probe = (uint8_t *)&pixel;
+       int pass = 1;
+
+       XDestroyImage(ximage);
+
+       /* NB: XGetPixel returns a normalized BGRA, byte per
+        * component, pixel format */

Is that always true? Don't you need to examine the window's XVisualInfo's red/green/blue_mask vales to determine the position of the components in the ulong?

In any case, 8-bit BGRA can probably be safely assumed for now.


+       if (probe[2] != expected[0]*255 ||
+           probe[1] != expected[1]*255 ||
+           probe[0] != expected[2]*255) {
+               pass = 0;
+       }

The other pixel probing functions in piglit use "fabs(probe - expected) < piglit_tolerance" when comparing actual/expected values. Shouldn't you do that here too?


+
+       if (pass)
+               return 1;
+
+       printf("Front Buffer Probe 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;
+}
+
  void
  egl_init_test(struct egl_test *test)
  {
diff --git a/tests/egl/egl-util.h b/tests/egl/egl-util.h
index 87c2db3..e1caa94 100644
--- a/tests/egl/egl-util.h
+++ b/tests/egl/egl-util.h
@@ -62,4 +62,8 @@ egl_util_create_pixmap(struct egl_state *state,

  int egl_util_run(const struct egl_test *test, int argc, char *argv[]);

+int
+egl_probe_front_pixel_rgb(struct egl_state *state,
+                         int x, int y, const float *expected);
+
  #endif

-Brian
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to