This will facilitate expanding the test to cover depthstencil
textures, since the stencil data can't be uploaded into the texture
directly using glTexImage2D--it will need to be converted into a
combined depth/stencil format first.
---
 .../framebuffer-blit-levels.c                      | 42 ++++++++++++++++------
 1 file changed, 31 insertions(+), 11 deletions(-)

diff --git a/tests/spec/arb_framebuffer_object/framebuffer-blit-levels.c 
b/tests/spec/arb_framebuffer_object/framebuffer-blit-levels.c
index eb951bc..c605eba 100644
--- a/tests/spec/arb_framebuffer_object/framebuffer-blit-levels.c
+++ b/tests/spec/arb_framebuffer_object/framebuffer-blit-levels.c
@@ -221,6 +221,33 @@ piglit_init(int argc, char **argv)
                               GL_TEXTURE_2D, aux_texture, 0 /* level */);
 }
 
+/**
+ * Upload test data to the given texture.
+ *
+ * \param data_level is the miplevel that the data is destined to
+ * ultimately end up in--this influences the contents of the test
+ * data.
+ *
+ * \param upload_level is the miplevel that the data should be
+ * uploaded to.
+ */
+static void
+upload_test_data(GLuint texture, unsigned data_level,
+                unsigned upload_level, unsigned width, unsigned height)
+{
+       GLfloat *data = malloc(SIZE * SIZE * 4 * sizeof(GLfloat));
+
+       glBindTexture(GL_TEXTURE_2D, texture);
+
+       create_test_data(data, texture_format, data_level, width, height);
+
+       glTexImage2D(GL_TEXTURE_2D, upload_level, texture_internal_format,
+                    width, height, 0 /* border */, texture_format,
+                    texture_type, data);
+
+       free(data);
+}
+
 enum piglit_result
 piglit_display()
 {
@@ -232,25 +259,18 @@ piglit_display()
        for (level = 0; level < NUM_LEVELS; ++level) {
                unsigned width = SIZE >> level;
                unsigned height = SIZE >> level;
-               create_test_data(data, texture_format, level, width, height);
                if (test_mode == TEST_MODE_READ) {
                        /* Populate directly */
-                       glBindTexture(GL_TEXTURE_2D, test_texture);
-                       glTexImage2D(GL_TEXTURE_2D, level,
-                                    texture_internal_format, width, height,
-                                    0 /* border */, texture_format,
-                                    texture_type, data);
+                       upload_test_data(test_texture, level, level,
+                                        width, height);
                } else {
                        /* Populate via aux texture */
+                       upload_test_data(aux_texture, level, 0,
+                                        width, height);
                        glBindFramebuffer(GL_READ_FRAMEBUFFER,
                                          aux_framebuffer);
                        glBindFramebuffer(GL_DRAW_FRAMEBUFFER,
                                          test_framebuffer);
-                       glBindTexture(GL_TEXTURE_2D, aux_texture);
-                       glTexImage2D(GL_TEXTURE_2D, 0 /* level */,
-                                    texture_internal_format, width, height,
-                                    0 /* border */, texture_format,
-                                    texture_type, data);
                        glBindTexture(GL_TEXTURE_2D, test_texture);
                        glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,
                                               framebuffer_attachment,
-- 
1.7.12

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to