diff options
author | Eric Anholt <eric@anholt.net> | 2012-10-29 10:46:17 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2012-11-14 11:36:35 -0800 |
commit | 19f601dcdb29cd3b366210425154054316189b08 (patch) | |
tree | 8a385ab808b42eb986dc2ff8db9154368b41f9d8 | |
parent | e24af19728884e21ffdf0ae8aed54fe4296f3373 (diff) |
gl-3.1: Add a new test for genned object name requirements.
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
-rw-r--r-- | tests/all.tests | 1 | ||||
-rw-r--r-- | tests/spec/gl-3.1/CMakeLists.gl.txt | 1 | ||||
-rw-r--r-- | tests/spec/gl-3.1/genned-names.c | 182 |
3 files changed, 184 insertions, 0 deletions
diff --git a/tests/all.tests b/tests/all.tests index 306473ba..a61568cc 100644 --- a/tests/all.tests +++ b/tests/all.tests @@ -691,6 +691,7 @@ add_plain_test(gl30, 'sampler-cube-shadow') gl31 = Group() spec['!OpenGL 3.1'] = gl31 +gl31['genned-names'] = concurrent_test('gl-3.1-genned-names') gl31['minmax'] = concurrent_test('gl-3.1-minmax') # Group spec/glsl-1.00 diff --git a/tests/spec/gl-3.1/CMakeLists.gl.txt b/tests/spec/gl-3.1/CMakeLists.gl.txt index cc90e2f1..b0885515 100644 --- a/tests/spec/gl-3.1/CMakeLists.gl.txt +++ b/tests/spec/gl-3.1/CMakeLists.gl.txt @@ -9,6 +9,7 @@ link_libraries ( ${OPENGL_glu_LIBRARY} ) +piglit_add_executable (gl-3.1-genned-names genned-names.c) piglit_add_executable (gl-3.1-minmax minmax.c) # vim: ft=cmake: diff --git a/tests/spec/gl-3.1/genned-names.c b/tests/spec/gl-3.1/genned-names.c new file mode 100644 index 00000000..f2ac7350 --- /dev/null +++ b/tests/spec/gl-3.1/genned-names.c @@ -0,0 +1,182 @@ +/* Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/** @file genned-names.c + * + * Test that GL 3.1 core contexts properly throw errors when an object + * is bound with a name that wasn't returned by the corresponding Gen + * function. + * + * Citations are from the GL 3.1 specification 20090528. The text is + * of the form "BindRenderbuffer fails and an INVALID_OPERATION error + * is generated if renderbuffer is not zero or a name returned from a + * previous call to GenRenderbuffers, or if such a name has since been + * deleted with DeleteRenderbuffers." + */ + +#include "piglit-util-gl-common.h" +#include "minmax-test.h" + +PIGLIT_GL_TEST_CONFIG_BEGIN + + config.supports_gl_core_version = 31; + config.supports_gl_compat_version = 0; + + config.window_width = 32; + config.window_height = 32; + config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_ALPHA; + +PIGLIT_GL_TEST_CONFIG_END + +enum piglit_result +piglit_display(void) +{ + /* UNREACHED */ + return PIGLIT_FAIL; +} + +/* Page 32 */ +static bool +test_bindbuffer() +{ + /* Targets from Table 2.5 of the GL 3.1 specification, page 31. */ + static const GLenum targets[] = { + GL_ARRAY_BUFFER, + GL_COPY_READ_BUFFER, + GL_COPY_WRITE_BUFFER, + GL_ELEMENT_ARRAY_BUFFER, + GL_PIXEL_PACK_BUFFER, + GL_PIXEL_UNPACK_BUFFER, + GL_TEXTURE_BUFFER, + GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER, + }; + int i; + bool pass = true; + + for (i = 0; i < ARRAY_SIZE(targets); i++) { + glBindBuffer(targets[i], 100 + i); + if (!piglit_check_gl_error(GL_INVALID_OPERATION)) + pass = false; + } + + return pass; +} + +/* Page 41 */ +static bool +test_bindvertexarray() +{ + glBindVertexArray(200); + return piglit_check_gl_error(GL_INVALID_OPERATION); +} + +/* Page 76 */ +static bool +test_beginquery() +{ + bool pass; + + glBeginQuery(GL_SAMPLES_PASSED, 300); + pass = piglit_check_gl_error(GL_INVALID_OPERATION); + + glEndQuery(GL_SAMPLES_PASSED); + piglit_reset_gl_error(); + + return pass; +} + +/* Page 156 */ +static bool +test_bindtexture() +{ + GLenum targets[] = { + GL_TEXTURE_1D, + GL_TEXTURE_1D_ARRAY, + GL_TEXTURE_2D, + GL_TEXTURE_2D_ARRAY, + GL_TEXTURE_3D, + GL_TEXTURE_CUBE_MAP, + GL_TEXTURE_RECTANGLE, + GL_TEXTURE_BUFFER, + }; + int i; + bool pass = true; + + for (i = 0; i < ARRAY_SIZE(targets); i++) { + glBindTexture(targets[i], 400 + i); + if (!piglit_check_gl_error(GL_INVALID_OPERATION)) + pass = false; + } + + return pass; +} + +/* Page 199 */ +static bool +test_bindframebuffer() +{ + glBindFramebuffer(GL_FRAMEBUFFER, 500); + return piglit_check_gl_error(GL_INVALID_OPERATION); +} + +/* Page 203 */ +static bool +test_bindrenderbuffer() +{ + glBindRenderbuffer(GL_RENDERBUFFER, 600); + return piglit_check_gl_error(GL_INVALID_OPERATION); +} + +/* The transform feedback entrypoints don't explicitly specify the + * genned name behavior in the 3.1 spec, but it inherits from + * glBindBuffer()'s bheavior. + */ +static bool +test_bindbuffer_tfb() +{ + bool pass = true; + + glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 600); + pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass; + + glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 601, 0, 1); + pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass; + + return pass; +} + +void +piglit_init(int argc, char **argv) +{ + bool pass = true; + + pass = test_bindbuffer() && pass; + pass = test_bindvertexarray() && pass; + pass = test_beginquery() && pass; + pass = test_bindtexture() && pass; + pass = test_bindframebuffer() && pass; + pass = test_bindrenderbuffer() && pass; + pass = test_bindbuffer_tfb() && pass; + + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); +} |