[Piglit] [PATCH 14/24] arb_direct_state_access: Add additional error checking for *TextureParameter
Laura Ekstrand
laura at jlekstrand.net
Mon Dec 15 17:24:17 PST 2014
From: Dylan Baker <dylanx.c.baker at intel.com>
This adds checking for additional types of errors.
---
.../spec/arb_direct_state_access/texture-errors.c | 244 ++++++++++++++-------
1 file changed, 159 insertions(+), 85 deletions(-)
diff --git a/tests/spec/arb_direct_state_access/texture-errors.c b/tests/spec/arb_direct_state_access/texture-errors.c
index db587ff..78bccac 100644
--- a/tests/spec/arb_direct_state_access/texture-errors.c
+++ b/tests/spec/arb_direct_state_access/texture-errors.c
@@ -41,129 +41,203 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
PIGLIT_GL_TEST_CONFIG_END
/** Test texture size errors and subtexture position errors */
-static GLboolean
+static bool
test_pos_and_sizes(void)
{
- GLuint name;
+ bool pass = true;
+ GLuint name;
- /* all of these should generate GL_INVALID_VALUE */
+ /* all of these should generate GL_INVALID_VALUE */
+ glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, -16, 0, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_VALUE);
- glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, -16, 0, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return GL_FALSE;
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, -6, -5, 0, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_VALUE);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, -6, -5, 0, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return GL_FALSE;
+ glTexImage2D(GL_TEXTURE_2D, -2, GL_RGBA, 16, 16, 0, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_VALUE);
- glTexImage2D(GL_TEXTURE_2D, -2, GL_RGBA, 16, 16, 0, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return GL_FALSE;
+ glTexImage2D(GL_TEXTURE_2D, 2000, GL_RGBA, 16, 16, 0, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_VALUE);
- glTexImage2D(GL_TEXTURE_2D, 2000, GL_RGBA, 16, 16, 0, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return GL_FALSE;
+ /* Setup dsa. */
+ glCreateTextures(GL_TEXTURE_2D, 1, &name);
+ glBindTextureUnit(0, name); /* Since next command isn't bindless. */
- /* Setup dsa. */
- glCreateTextures(GL_TEXTURE_2D, 1, &name);
- glBindTextureUnit(0, name); /* Since next command isn't bindless. */
+ /* setup valid 2D texture for subsequent TexSubImage calls */
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_FLOAT, NULL);
- /* setup valid 2D texture for subsequent TexSubImage calls */
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_FLOAT, NULL);
+ glTextureSubImage2D(name, 0, 6, 6, 100, 100, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_VALUE);
- glTextureSubImage2D(name, 0, 6, 6, 100, 100, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return GL_FALSE;
+ glTextureSubImage2D(name, 0, -6, -6, 10, 10, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_VALUE);
- glTextureSubImage2D(name, 0, -6, -6, 10, 10, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return GL_FALSE;
+ glCopyTextureSubImage2D(name, 0, -6, -6, 2, 2, 10, 10);
+ pass &= piglit_check_gl_error(GL_INVALID_VALUE);
+ glCopyTextureSubImage2D(name, 0, 6, 6, 2, 2, 200, 200);
+ pass &= piglit_check_gl_error(GL_INVALID_VALUE);
- glCopyTextureSubImage2D(name, 0, -6, -6, 2, 2, 10, 10);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return GL_FALSE;
+ /* mipmap level 1 doesn't exist */
+ glTextureSubImage2D(name, 1, 0, 0, 8, 8, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
- glCopyTextureSubImage2D(name, 0, 6, 6, 2, 2, 200, 200);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return GL_FALSE;
+ /* mipmap level 2 doesn't exist */
+ glCopyTextureSubImage2D(name, 2, 0, 0, 0, 0, 4, 4);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
- /* mipmap level 1 doesn't exist */
- glTextureSubImage2D(name, 1, 0, 0, 8, 8, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_OPERATION))
- return GL_FALSE;
+ /* To test 1D and 3D entry points, let's try using the wrong functions. */
+ glTextureSubImage1D(name, 0, 0, 4, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
- /* mipmap level 2 doesn't exist */
- glCopyTextureSubImage2D(name, 2, 0, 0, 0, 0, 4, 4);
- if (!piglit_check_gl_error(GL_INVALID_OPERATION))
- return GL_FALSE;
+ glTextureSubImage3D(name, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_FLOAT, NULL);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
- /* To test 1D and 3D entry points, let's try using the wrong functions. */
- glTextureSubImage1D(name, 0, 0, 4, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_ENUM))
- return GL_FALSE;
+ glCopyTextureSubImage1D(name, 0, 0, 0, 0, 4);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
- glTextureSubImage3D(name, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_FLOAT, NULL);
- if (!piglit_check_gl_error(GL_INVALID_ENUM))
- return GL_FALSE;
+ glCopyTextureSubImage3D(name, 0, 0, 0, 0, 0, 0, 4, 4);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
- glCopyTextureSubImage1D(name, 0, 0, 0, 0, 4);
- if (!piglit_check_gl_error(GL_INVALID_ENUM))
- return GL_FALSE;
-
- glCopyTextureSubImage3D(name, 0, 0, 0, 0, 0, 0, 4, 4);
- if (!piglit_check_gl_error(GL_INVALID_ENUM))
- return GL_FALSE;
-
- return GL_TRUE;
+ return pass;
}
/*
* The texture parameter must be an existing texture object as returned
* by glCreateTextures
*/
-static GLboolean
-test_sizes(void)
+static bool
+test_target_name(void)
+{
+ static const GLuint badname = 250;
+ static const GLfloat fvec[2] = { 1.0, 1.0 };
+ static const GLint ivec[2] = { -1, 1 };
+ static const GLuint uvec[2] = { 1, 1 };
+ bool pass = true;
+
+ glTextureParameteri(badname, GL_TEXTURE_MAX_LEVEL, 4);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ glTextureParameterf(badname, GL_TEXTURE_MAX_LEVEL, 4.0);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ glTextureParameterfv(badname, GL_TEXTURE_MAX_LEVEL, fvec);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ glTextureParameteriv(badname, GL_TEXTURE_MAX_LEVEL, ivec);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ glTextureParameterIiv(badname, GL_TEXTURE_MAX_LEVEL, ivec);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ glTextureParameterIuiv(badname, GL_TEXTURE_MAX_LEVEL, uvec);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ piglit_report_subtest_result(pass ? PIGLIT_PASS : PIGLIT_FAIL,
+ "glTextureParameter: GL_INVALID_OPERATION on bad texture");
+ return pass;
+}
+
+/* same as test_target_name, but for the getter functions */
+static bool
+test_getter_target_name(void)
+{
+ static const GLuint badname = 250;
+ static GLfloat f = 1.0;
+ static GLuint u = 1;
+ static GLint i = -5;
+ bool pass = true;
+
+ glGetTextureParameterfv(badname, GL_TEXTURE_MAX_LEVEL, &f);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ glGetTextureParameteriv(badname, GL_TEXTURE_MAX_LEVEL, &i);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ glGetTextureParameterIiv(badname, GL_TEXTURE_MAX_LEVEL, &i);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ glGetTextureParameterIuiv(badname, GL_TEXTURE_MAX_LEVEL, &u);
+ pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
+
+ piglit_report_subtest_result(pass ? PIGLIT_PASS : PIGLIT_FAIL,
+ "glGetTextureParameter: GL_INVALID_OPERATION on bad texture");
+ return pass;
+}
+
+static bool
+test_getter_pname(void)
{
- const GLuint badname = 250;
- const GLfloat fvec[] = {1.0, 1.0};
- const GLint ivec[] = {-1, 1};
- const GLuint uvec[] = {1, 1};
+ static GLuint name;
+ static GLfloat f = 1.0;
+ static GLuint u = 1;
+ static GLint i = -5;
+ bool pass = true;
+
+ /* Setup dsa. */
+ glCreateTextures(GL_TEXTURE_2D, 1, &name);
+ glBindTextureUnit(0, name); /* Since next command isn't bindless. */
- glTextureParameteri(badname, GL_TEXTURE_MAX_LEVEL, 4);
- if (!piglit_check_gl_error(GL_INVALID_OPERATION))
- return GL_FALSE;
+ glGetTextureParameterfv(name, GL_TEXTURE_1D, &f);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
- glTextureParameterf(badname, GL_TEXTURE_MAX_LEVEL, 4.0);
- if (!piglit_check_gl_error(GL_INVALID_OPERATION))
- return GL_FALSE;
+ glGetTextureParameteriv(name, GL_TEXTURE_1D, &i);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
- glTextureParameterfv(badname, GL_TEXTURE_MAX_LEVEL, fvec);
- if (!piglit_check_gl_error(GL_INVALID_OPERATION))
- return GL_FALSE;
+ glGetTextureParameterIiv(name, GL_TEXTURE_1D, &i);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
- glTextureParameteriv(badname, GL_TEXTURE_MAX_LEVEL, ivec);
- if (!piglit_check_gl_error(GL_INVALID_OPERATION))
- return GL_FALSE;
+ glGetTextureParameterIuiv(name, GL_TEXTURE_1D, &u);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
- glTextureParameterIiv(badname, GL_TEXTURE_MAX_LEVEL, ivec);
- if (!piglit_check_gl_error(GL_INVALID_OPERATION))
- return GL_FALSE;
+ piglit_report_subtest_result(pass ? PIGLIT_PASS : PIGLIT_FAIL,
+ "glGetTextureParameter: GL_INVALID_ENUM on bad pname");
+ return pass;
+}
- glTextureParameterIuiv(badname, GL_TEXTURE_MAX_LEVEL, uvec);
- if (!piglit_check_gl_error(GL_INVALID_OPERATION))
- return GL_FALSE;
+static bool
+test_pname(void)
+{
+ static GLuint name;
+ const static GLfloat f = 1.0;
+ const static GLuint u = 1;
+ const static GLint i = -5;
+ bool pass = true;
- return GL_TRUE;
+ /* Setup dsa. */
+ glCreateTextures(GL_TEXTURE_2D, 1, &name);
+ glBindTextureUnit(0, name); /* Since next command isn't bindless. */
+
+ glTextureParameterfv(name, GL_TEXTURE_1D, &f);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
+
+ glTextureParameteriv(name, GL_TEXTURE_1D, &i);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
+
+ glTextureParameterIiv(name, GL_TEXTURE_1D, &i);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
+
+ glTextureParameterIuiv(name, GL_TEXTURE_1D, &u);
+ pass &= piglit_check_gl_error(GL_INVALID_ENUM);
+
+ piglit_report_subtest_result(pass ? PIGLIT_PASS : PIGLIT_FAIL,
+ "glTextureParameter: GL_INVALID_ENUM on bad pname");
+ return pass;
}
+
enum piglit_result
piglit_display(void)
{
- bool pass = true;
- pass = test_pos_and_sizes() && test_sizes() && pass;
-
- return pass ? PIGLIT_PASS: PIGLIT_FAIL;
+ bool pass = true;
+ pass &= test_pos_and_sizes();
+ pass &= test_target_name();
+ pass &= test_pname();
+ pass &= test_getter_target_name();
+ pass &= test_getter_pname();
+
+ return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
--
2.1.0
More information about the Piglit
mailing list