[Piglit] [PATCH] arb_texture_view: add tests for mipmap generation with nonzero view minlevel

Paul Gofman gofmanp at gmail.com
Mon Nov 4 12:28:26 UTC 2019


Existing test values were also changed to provide nonzero expected result,
otherwise it succeeds with glGenerateMipmap() doing nothing.

Signed-off-by: Paul Gofman <gofmanp at gmail.com>
---
 tests/spec/arb_texture_view/mipgen.c | 77 ++++++++++++++++++++++++----
 1 file changed, 66 insertions(+), 11 deletions(-)

diff --git a/tests/spec/arb_texture_view/mipgen.c b/tests/spec/arb_texture_view/mipgen.c
index 3502aff00..e57a35975 100644
--- a/tests/spec/arb_texture_view/mipgen.c
+++ b/tests/spec/arb_texture_view/mipgen.c
@@ -45,21 +45,21 @@ PIGLIT_GL_TEST_CONFIG_END
 static bool
 test_mipgen(void)
 {
-	GLuint tex, new_tex;
 	GLint width = 4, height = 4, levels = 2;
-	bool pass = true;
+	GLuint tex, new_tex;
+	bool pass, pass2;
 
 	glGenTextures(1, &tex);
 	glBindTexture(GL_TEXTURE_2D, tex);
 
 	glTexStorage2D(GL_TEXTURE_2D, levels, GL_R8, width, height);
 
-	/* averaging these as snorm values should give 0 */
+	/* averaging these as snorm values should give 0x01 */
 	GLubyte buf[4][4] =
-		{{0xFF, 0x01, 0xFF, 0x01},
-		 {0xFF, 0x01, 0xFF, 0x01},
-		 {0xFF, 0x01, 0xFF, 0x01},
-		 {0xFF, 0x01, 0xFF, 0x01}};
+		{{0xFF, 0x03, 0xFF, 0x03},
+		 {0xFF, 0x03, 0xFF, 0x03},
+		 {0xFF, 0x03, 0xFF, 0x03},
+		 {0xFF, 0x03, 0xFF, 0x03}};
 	GLbyte res[4];
 
 	glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,
@@ -67,17 +67,72 @@ test_mipgen(void)
 
 	glGenTextures(1, &new_tex);
 
-	glTextureView(new_tex, GL_TEXTURE_2D, tex,  GL_R8_SNORM, 0, 2, 0, 1);
+	glTextureView(new_tex, GL_TEXTURE_2D, tex,  GL_R8_SNORM, 0, levels, 0, 1);
 	glBindTexture(GL_TEXTURE_2D, new_tex);
 	glGenerateMipmap(GL_TEXTURE_2D);
 	glPixelStorei(GL_PACK_ALIGNMENT, 1);
 	glGetTexImage(GL_TEXTURE_2D, 1, GL_RED, GL_BYTE, &res);
-	pass = !res[0] && !res[1] && !res[2] && !res[3];
+	pass = res[0] == 0x01 && res[1] == 0x01 && res[2] == 0x01 && res[3] == 0x01;
 
 	if (!pass) {
-		printf("expected 0, got %d %d %d %d\n",
-		       res[0], res[1], res[2], res[3]);
+		printf("expected 0x01, got %d %d %d %d\n",
+				res[0], res[1], res[2], res[3]);
+	}
+
+	glDeleteTextures(1, &new_tex);
+	glDeleteTextures(1, &tex);
+
+	/* Test views with nonzero minlevel */
+	glGenTextures(1, &tex);
+	glBindTexture(GL_TEXTURE_2D, tex);
+
+	glTexStorage2D(GL_TEXTURE_2D, levels + 1, GL_R8, width * 2, height * 2);
+
+	glTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, width, height,
+			GL_RED, GL_UNSIGNED_BYTE, buf);
+
+	glGenTextures(1, &new_tex);
+
+	glTextureView(new_tex, GL_TEXTURE_2D, tex, GL_R8_SNORM, 1, levels, 0, 1);
+	glBindTexture(GL_TEXTURE_2D, new_tex);
+	glGenerateMipmap(GL_TEXTURE_2D);
+	memset(res, 0, sizeof(res));
+	glGetTexImage(GL_TEXTURE_2D, 1, GL_RED, GL_BYTE, &res);
+	pass2 = res[0] == 0x01 && res[1] == 0x01 && res[2] == 0x01 && res[3] == 0x01;
+
+	if (!pass2) {
+		printf("view minlevel 1, expected 0x01, got %d %d %d %d\n",
+				res[0], res[1], res[2], res[3]);
+	}
+	pass = pass && pass2;
+
+	glGenTextures(1, &tex);
+	glBindTexture(GL_TEXTURE_3D, tex);
+
+	glTexStorage3D(GL_TEXTURE_3D, levels + 1, GL_R8, width * 2, height * 2, 4);
+
+	GLubyte buf_3d[4 * 4 * 2];
+
+	memcpy(buf_3d, buf, sizeof(buf));
+	memcpy(buf_3d + 4 * 4, buf, sizeof(buf));
+
+	glTexSubImage3D(GL_TEXTURE_3D, 1, 0, 0, 0, width, height, 2,
+			GL_RED, GL_UNSIGNED_BYTE, buf_3d);
+
+	glGenTextures(1, &new_tex);
+
+	glTextureView(new_tex, GL_TEXTURE_3D, tex, GL_R8_SNORM, 1, levels, 0, 1);
+	glBindTexture(GL_TEXTURE_3D, new_tex);
+	glGenerateMipmap(GL_TEXTURE_3D);
+	memset(res, 0, sizeof(res));
+	glGetTexImage(GL_TEXTURE_3D, 1, GL_RED, GL_BYTE, res);
+	pass2 = res[0] == 0x01 && res[1] == 0x01 && res[2] == 0x01 && res[3] == 0x01;
+
+	if (!pass2) {
+		printf("view minlevel 1, 3d texture. expected 0x01, got %d %d %d %d\n",
+				res[0], res[1], res[2], res[3]);
 	}
+	pass = pass && pass2;
 
 	glDeleteTextures(1, &new_tex);
 	glDeleteTextures(1, &tex);
-- 
2.23.0



More information about the Piglit mailing list