[Piglit] [PATCH 3/3] arb_get_texture_sub_image: update cube map tests to make textures cube complete

Anthony Pesch inolen at gmail.com
Wed Apr 11 16:45:09 UTC 2018


From: Anthony Pesch <apesch at nvidia.com>

Update cube map tests to ensure cube map textures are cube complete before querying
them. Querying a cube map which is not cube complete should set INVALID_OPERATION
as per the OpenGL 4.6 Core spec:

"An INVALID_OPERATION error is generated if the effective target is
TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY, and the texture object
is not cube complete or cube array complete, respectively."

Reviewed-by: Arthur Huillet <ahuillet at nvidia.com>
Reviewed-by: Juan A. Suarez <jasuarez at igalia.com>
---
 tests/spec/arb_get_texture_sub_image/errors.c | 10 +++++++---
 tests/spec/arb_get_texture_sub_image/get.c    | 16 ++++++++++------
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/tests/spec/arb_get_texture_sub_image/errors.c b/tests/spec/arb_get_texture_sub_image/errors.c
index 1e7b17115..4b99d1cc2 100644
--- a/tests/spec/arb_get_texture_sub_image/errors.c
+++ b/tests/spec/arb_get_texture_sub_image/errors.c
@@ -253,16 +253,20 @@ test_cubemap_faces(void)
                         0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_FLOAT, NULL);
         }
 
-        /* try to get all six cube faces, should fail */
+        /* try to query incomplete cube map, should fail */
         glGetTextureSubImage(tex, 0,
                              0, 0, 0,
-                             8, 8, 6,
+                             8, 8, 5,
                              GL_RGBA, GL_UNSIGNED_BYTE,
                              sizeof(results), results);
 	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
 		pass = false;
 
-        /* try to get five cube faces, should pass */
+	/* upload final face */
+	glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + 5,
+	             0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_FLOAT, NULL);
+
+        /* try to query complete cube map, should now pass */
         glGetTextureSubImage(tex, 0,
                              0, 0, 0,
                              8, 8, 5,
diff --git a/tests/spec/arb_get_texture_sub_image/get.c b/tests/spec/arb_get_texture_sub_image/get.c
index 8aa4c92e1..4abf3a596 100644
--- a/tests/spec/arb_get_texture_sub_image/get.c
+++ b/tests/spec/arb_get_texture_sub_image/get.c
@@ -157,12 +157,16 @@ test_getsubimage(GLenum target,
 				     GL_RGBA, GL_UNSIGNED_BYTE, texData);
 			break;
 		case GL_TEXTURE_CUBE_MAP:
-			/* only set +Y face */
-			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
-				     level, intFormat,
-				     mip_width, mip_height, 0,
-				     GL_RGBA, GL_UNSIGNED_BYTE,
-				     texData);
+			/* specify dimensions and format for all faces to make texture cube complete,
+			   but specify data for only the +Y face as it is the only one read back */
+			for (i = 0; i < 6; i++) {
+				GLubyte *faceData = i == 2 ? texData : NULL;
+				glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
+					     level, intFormat,
+					     mip_width, mip_height, 0,
+					     GL_RGBA, GL_UNSIGNED_BYTE,
+					     faceData);
+			}
 			break;
 		}
 	}
-- 
2.13.6



More information about the Piglit mailing list