[Piglit] [PATCH v3 4/4] GL_MESA_pack_invert: make it endian-safe
Oded Gabbay
oded.gabbay at gmail.com
Thu Mar 31 20:09:54 UTC 2016
In this test we use GL_BGRA + GL_UNSIGNED_BYTE. However, the test
function constructs the expected colors array as 32-bit values, which is
a wrong way to build expected results values when testing array_of_bytes
(GL_UNSIGNED_BYTE) in an endian-safe way.
This patch fixes this bug by building the expected colors using array of
array_of_bytes.
This fixes the test in llvmpipe, softpipe and r600g in big-endian machine.
v3: Changed printing of results to display individual components
Signed-off-by: Oded Gabbay <oded.gabbay at gmail.com>
---
tests/spec/mesa_pack_invert/readpixels.c | 40 +++++++++++++++++++-------------
1 file changed, 24 insertions(+), 16 deletions(-)
diff --git a/tests/spec/mesa_pack_invert/readpixels.c b/tests/spec/mesa_pack_invert/readpixels.c
index f8fbebe..e9523b2 100644
--- a/tests/spec/mesa_pack_invert/readpixels.c
+++ b/tests/spec/mesa_pack_invert/readpixels.c
@@ -45,34 +45,42 @@ PIGLIT_GL_TEST_CONFIG_END
#define H 6
static bool
-check_unorm(const uint32_t *data, const char *name)
+check_unorm(const uint8_t *data, const char *name)
{
- static const uint32_t colors[] = {
- 0x000000ff,
- 0xffffffff,
- 0x00ff0000,
- 0x0000ff00
+ static const uint8_t colors[4][4] = {
+ {0xff, 0x00, 0x00, 0x00},
+ {0xff, 0xff, 0xff, 0xff},
+ {0x00, 0x00, 0xff, 0x00},
+ {0x00, 0xff, 0x00, 0x00}
};
int x, y;
for (y = 0; y < H; y++) {
for (x = 0; x < W; x++) {
int i = (y >= H / 2) * 2 + (x >= W / 2);
- uint32_t expected = colors[i];
+ const uint8_t *expected = &colors[i][0];
+ const uint8_t *observed = &data[(y * W + x) * 4];
- if (data[y * W + x] != expected) {
+ if (expected[0] != observed[0] ||
+ expected[1] != observed[1] ||
+ expected[2] != observed[2] ||
+ expected[3] != observed[3]) {
fprintf(stderr,
- "%s pixel value read at (%d, %d) was "
- "0x%08x, expected 0x%08x\n",
- name, x, y, data[y * W + x], expected);
- fprintf(stderr, "\n");
+ "%s pixel value read at (%d, %d)\n", name, x, y);
+ fprintf(stderr,
+ " Expected: b = 0x%02x g = 0x%02x r = 0x%02x a = 0x%02x\n",
+ expected[0], expected[1], expected[2], expected[3]);
+ fprintf(stderr,
+ " Observed: b = 0x%02x g = 0x%02x r = 0x%02x a = 0x%02x\n",
+ observed[0], observed[1], observed[2], observed[3]);
for (y = 0; y < H; y++) {
for (x = 0; x < W; x++) {
- fprintf(stderr, "0x%08x ",
- data[y * W + x]);
+ observed = &data[(y * W + x) * 4];
+ fprintf(stderr,
+ "b = 0x%02x g = 0x%02x r = 0x%02x a = 0x%02x\n",
+ observed[0], observed[1], observed[2], observed[3]);
}
- fprintf(stderr, "\n");
}
piglit_report_subtest_result(PIGLIT_FAIL,
@@ -135,7 +143,7 @@ piglit_display(void)
{
bool pass = true;
GLuint pbo;
- uint32_t bgra_unorm[W * H];
+ uint8_t bgra_unorm[W * H * 4];
float rgba_float[W * H * 4];
void *map;
--
2.5.5
More information about the Piglit
mailing list