[Piglit] [PATCH] fbo-3d: test both POT and NPOT depths

Ilia Mirkin imirkin at alum.mit.edu
Wed Jan 2 00:02:25 UTC 2019


This demonstrates issues on nv4x, which will use a different layout for
POT vs NPOT sizes.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
---
 tests/fbo/fbo-3d.c | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/tests/fbo/fbo-3d.c b/tests/fbo/fbo-3d.c
index e622c1df8..36dbed4e0 100644
--- a/tests/fbo/fbo-3d.c
+++ b/tests/fbo/fbo-3d.c
@@ -58,16 +58,12 @@ float depth_color[NUM_DEPTHS][4] = {
 	{0.0, 1.0, 1.0, 0.0},
 };
 
-int pot_depth;
-
 static int
-create_3d_fbo(void)
+create_3d_fbo(int pot_depth)
 {
 	GLuint tex, fb;
 	GLenum status;
 	int depth;
-	pot_depth = piglit_is_extension_supported("GL_ARB_texture_non_power_of_two") ?
-		NUM_DEPTHS: POT_DEPTHS;
 
 	glGenTextures(1, &tex);
 	glBindTexture(GL_TEXTURE_3D, tex);
@@ -109,7 +105,6 @@ create_3d_fbo(void)
 		piglit_draw_rect(-2, -2, BUF_WIDTH + 2, BUF_HEIGHT + 2);
 	}
 
-
 done:
 	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, piglit_winsys_fbo);
 	glDeleteFramebuffersEXT(1, &fb);
@@ -121,7 +116,7 @@ done:
  * 3D texture.
  */
 static void
-draw_depth(int x, int y, int depth)
+draw_depth(int x, int y, int depth, int pot_depth)
 {
 	float depth_coord = (float)depth / (pot_depth - 1);
 
@@ -171,12 +166,12 @@ piglit_display(void)
 	glClearColor(1.0, 1.0, 1.0, 1.0);
 	glClear(GL_COLOR_BUFFER_BIT);
 
-	tex = create_3d_fbo();
+	tex = create_3d_fbo(POT_DEPTHS);
 
 	for (depth = 0; depth < NUM_DEPTHS; depth++) {
 		int x = 1 + depth * (BUF_WIDTH + 1);
 		int y = 1;
-		draw_depth(x, y, depth);
+		draw_depth(x, y, depth, POT_DEPTHS);
 	}
 
 	for (depth = 0; depth < NUM_DEPTHS; depth++) {
@@ -187,6 +182,24 @@ piglit_display(void)
 
 	glDeleteTextures(1, &tex);
 
+	if (piglit_is_extension_supported("GL_ARB_texture_non_power_of_two")) {
+		tex = create_3d_fbo(NUM_DEPTHS);
+
+		for (depth = 0; depth < NUM_DEPTHS; depth++) {
+			int x = 1 + depth * (BUF_WIDTH + 1);
+			int y = 2 + BUF_HEIGHT;
+			draw_depth(x, y, depth, NUM_DEPTHS);
+		}
+
+		for (depth = 0; depth < NUM_DEPTHS; depth++) {
+			int x = 1 + depth * (BUF_WIDTH + 1);
+			int y = 2 + BUF_HEIGHT;
+			pass &= test_depth_drawing(x, y, depth_color[depth]);
+		}
+
+		glDeleteTextures(1, &tex);
+	}
+
 	piglit_present_results();
 
 	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
-- 
2.18.1



More information about the Piglit mailing list