[Piglit] [PATCH 24/24] ext_packed_float: Refactored the getteximage-invalid-format-for-packed-type.c test.
Laura Ekstrand
laura at jlekstrand.net
Mon Dec 15 17:24:27 PST 2014
I added comments and refactored the test into a newer Piglit style. This
helped me diagnose some difficulties with Mesa's glGetTextureImage
implementation.
---
.../getteximage-invalid-format-for-packed-type.c | 105 +++++++++++++--------
1 file changed, 64 insertions(+), 41 deletions(-)
diff --git a/tests/spec/ext_packed_float/getteximage-invalid-format-for-packed-type.c b/tests/spec/ext_packed_float/getteximage-invalid-format-for-packed-type.c
index 05fa006..c030c1c 100644
--- a/tests/spec/ext_packed_float/getteximage-invalid-format-for-packed-type.c
+++ b/tests/spec/ext_packed_float/getteximage-invalid-format-for-packed-type.c
@@ -24,19 +24,22 @@
*/
/**
- * file tests/spec/ext_packed_float/getteximage-invalid-format-for-packed-type.c
- * test with some invalid type when the format is not GL_RGB.
+ * @file ext_packed_float/getteximage-invalid-format-for-packed-type.c
*
- * Page 262 (page 282 of the PDF) of the OpenGL 4.2 Compatibility
- * Profile spec says:
+ * Section 8.4.4.2 Special Interpretations in Section 8.4 Pixel Rectangles of
+ * the OpenGL 4.5 core spec (30.10.2014) says:
*
- * "The number of components per packed pixel is fixed by the
- * type, and must match the number of components per group
- * indicated by the format parameter, as listed in table 3.8.
- * The error INVALID_OPERATION is generated by any command
- * processing pixel rectangles if a mismatch occurs."
+ * "A type matching one of the types in table 8.5 is a special case in
+ * which all the components of each group are packed into a single
+ * unsigned byte, unsigned short, or unsigned int, depending on the
+ * type....
+ * The number of components per packed pixel is fixed by the type, and
+ * must match the number of components per group indicated by the format
+ * parameter, as listed in table 8.5.
+ * An INVALID_OPERATION error is generated by any command
+ * processing pixel rectangles if a mismatch occurs."
*
- * Table 3.8 says:
+ * Table 8.5 Packed pixel formats:
*
*"type Parameter Token Name ... Matching Pixel Formats"
* UNSIGNED_BYTE_3_3_2 RGB, RGB_INTEGER
@@ -60,8 +63,8 @@
* UNSIGNED_INT_2_10_10_10_REV RGBA, BGRA, RGBA_INTEGER,
* BGRA_INTEGER
* UNSIGNED_INT_24_8 DEPTH_STENCIL
- * UNSIGNED_INT_10F_11F_11F_REV RGB, RGB_INTEGER
- * UNSIGNED_INT_5_9_9_9_REV RGB, RGB_INTEGER
+ * UNSIGNED_INT_10F_11F_11F_REV RGB
+ * UNSIGNED_INT_5_9_9_9_REV RGB
* FLOAT_32_UNSIGNED_INT_24_8_REV DEPTH_STENCIL"
*
*
@@ -77,6 +80,16 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
PIGLIT_GL_TEST_CONFIG_END
+/* For simplicity, we are only testing the following types: */
+static const GLenum testedTypes[] = {
+ GL_UNSIGNED_BYTE_3_3_2,
+ GL_UNSIGNED_BYTE_2_3_3_REV,
+ GL_UNSIGNED_SHORT_5_6_5,
+ GL_UNSIGNED_SHORT_5_6_5_REV,
+ GL_UNSIGNED_INT_10F_11F_11F_REV,
+};
+
+/* As Table 8.5 states, our testedTypes[] only work with GL_RGB below. */
static const GLenum formatTypes[] = {
GL_RGBA,
GL_RGB,
@@ -88,44 +101,54 @@ static const GLenum formatTypes[] = {
GL_LUMINANCE_ALPHA,
};
-static const GLenum testedTypes[] = {
- GL_UNSIGNED_BYTE_3_3_2,
- GL_UNSIGNED_BYTE_2_3_3_REV,
- GL_UNSIGNED_SHORT_5_6_5,
- GL_UNSIGNED_SHORT_5_6_5_REV,
- GL_UNSIGNED_INT_10F_11F_11F_REV,
-};
-
+void
+piglit_init(int argc, char **argv)
+{
+ piglit_require_extension("GL_EXT_packed_float");
+}
enum piglit_result
-piglit_display(void)
+subtest(GLenum format, GLenum type)
{
- return PIGLIT_FAIL;
-}
+ GLfloat pxBuffer[4];
+ enum piglit_result result;
+ glGetTexImage(GL_TEXTURE_2D, 0, format, type, pxBuffer);
+ if (format == GL_RGB) {
+ if (!piglit_check_gl_error(GL_NO_ERROR))
+ result = PIGLIT_FAIL;
+ else
+ result = PIGLIT_PASS;
+ }
+ else {
+ if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+ result = PIGLIT_FAIL;
+ else
+ result = PIGLIT_PASS;
+ }
-void
-piglit_init(int argc, char **argv)
+ piglit_report_subtest_result(result, "%s, %s",
+ piglit_get_gl_enum_name(type),
+ piglit_get_gl_enum_name(format));
+
+ return result;
+}
+
+enum piglit_result
+piglit_display(void)
{
- long rcvError, expError = GL_NO_ERROR;
- GLfloat pxBuffer[4];
int i, j;
-
- piglit_require_extension("GL_EXT_packed_float");
+ enum piglit_result result = PIGLIT_PASS;
+ enum piglit_result subtest_result;
for (j = 0; j < ARRAY_SIZE(testedTypes); j++) {
- for (i = 0; i< ARRAY_SIZE(formatTypes); i++) {
- glGetTexImage(GL_TEXTURE_2D, 0, formatTypes[i],
- testedTypes[j], pxBuffer);
- rcvError = glGetError();
- if (formatTypes[i] == GL_RGB)
- expError = GL_NO_ERROR;
- else
- expError = GL_INVALID_OPERATION;
-
- if (rcvError != expError)
- piglit_report_result(PIGLIT_FAIL);
+ for (i = 0; i < ARRAY_SIZE(formatTypes); i++) {
+ subtest_result = subtest(formatTypes[i],
+ testedTypes[j]);
+ if (subtest_result != PIGLIT_PASS)
+ result = PIGLIT_FAIL;
}
}
- piglit_report_result(PIGLIT_PASS);
+
+ return result;
}
--
2.1.0
More information about the Piglit
mailing list