[Piglit] [PATCH v2 3/4] getteximage-simple: Allow configurable texture parameters

Nanley Chery nanleychery at gmail.com
Mon Jun 18 18:57:54 UTC 2018


We'd like to increase the pitch of the texture in the next patch.
---
 tests/texturing/getteximage-simple.c | 54 ++++++++++++++++++----------
 1 file changed, 35 insertions(+), 19 deletions(-)

diff --git a/tests/texturing/getteximage-simple.c b/tests/texturing/getteximage-simple.c
index de0f1edf6..525e6a392 100644
--- a/tests/texturing/getteximage-simple.c
+++ b/tests/texturing/getteximage-simple.c
@@ -21,38 +21,52 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
 
 PIGLIT_GL_TEST_CONFIG_END
 
-static int test_getteximage(GLubyte *data)
+#define MAX_TYPE_VAL UINT8_MAX
+#define PIX_TYPE GLubyte
+#define TEX_TYPE GL_UNSIGNED_BYTE
+#define TEX_INT_FMT GL_RGBA8
+#define TEX_FMT GL_RGBA
+#define CHANNELS_PER_PIXEL 4
+
+static bool test_getteximage(PIX_TYPE *data, size_t data_size, GLint w, GLint h)
 {
-	GLubyte compare[4096];
-	int i;
+	PIX_TYPE *compare = (PIX_TYPE *)malloc(data_size);
 
-	glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, compare);
+	glGetTexImage(GL_TEXTURE_2D, 0, TEX_FMT, TEX_TYPE, compare);
 
-	for(i = 0; i < 4096; ++i) {
+	bool match = true;
+	const unsigned data_channels = w * h / CHANNELS_PER_PIXEL;
+	for (unsigned i = 0; i < data_channels; ++i) {
 		if (data[i] != compare[i]) {
-			const unsigned pixel = i / 4;
-			const unsigned channel = i % 4;
-			printf("GetTexImage() returns incorrect data in byte %i\n", i);
-			printf("    corresponding to (%i,%i) channel %i\n", pixel % 64, pixel / 64, channel);
+			const unsigned pixel = i / CHANNELS_PER_PIXEL;
+			const unsigned pixel_channel = i % CHANNELS_PER_PIXEL;
+			printf("GetTexImage() returns incorrect data in element %i\n", i);
+			printf("    corresponding to (%i,%i) channel %i\n", pixel % w, pixel / w, pixel_channel);
 			printf("    expected: %i\n", data[i]);
 			printf("    got: %i\n", compare[i]);
-			return 0;
+			match = false;
+			break;
 		}
 	}
 
-	return 1;
+	free(compare);
+	return match;
 }
 
 enum piglit_result
 piglit_display(void)
 {
-	int pass;
-
-	GLubyte data[4096]; /* 64*16*4 */
-	for(int i = 0; i < 4096; ++i)
-		data[i] = rand() & 0xff;
-
-	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+	GLsizei height = 16;
+	GLsizei width = 64;
+
+	/* Upload random data to a texture with the given dimensions */
+	const unsigned data_channels = width * height * CHANNELS_PER_PIXEL;
+	const size_t data_size = data_channels * sizeof(PIX_TYPE);
+	PIX_TYPE *data = (PIX_TYPE *)malloc(data_size);
+	for (unsigned i = 0; i < data_channels; ++i)
+		data[i] = ((float)rand() / RAND_MAX) * MAX_TYPE_VAL;
+	glTexImage2D(GL_TEXTURE_2D, 0, TEX_INT_FMT, width, height, 0, TEX_FMT,
+		     TEX_TYPE, data);
 
 	glClearColor(0.0, 0.0, 0.0, 1.0);
 	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -71,7 +85,9 @@ piglit_display(void)
 
 	piglit_present_results();
 
-	pass = test_getteximage();
+	bool pass = test_getteximage(data, data_size, width, height);
+
+	free(data);
 
 	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
 }
-- 
2.17.1



More information about the Piglit mailing list