diff options
author | Eric Anholt <eric@anholt.net> | 2013-12-05 13:50:10 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2013-12-05 15:07:08 -0800 |
commit | 9ffa5d25c4e59acf4808d2f87c1980daa8e7d3cb (patch) | |
tree | 080da30fc2a2c10aced359ea201891780eb535f8 /test | |
parent | 4d0d93b1c0a3a7a7f2b146dcc0995007b21d87eb (diff) |
Add a test for a bug when called during glBegin()/glEnd().
Diffstat (limited to 'test')
-rw-r--r-- | test/.gitignore | 1 | ||||
-rw-r--r-- | test/Makefile.am | 6 | ||||
-rw-r--r-- | test/glx_beginend.c | 107 |
3 files changed, 114 insertions, 0 deletions
diff --git a/test/.gitignore b/test/.gitignore index 4e30176..f9bf69d 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,4 +1,5 @@ egl_has_extension_nocontext +glx_beginend glx_glxgetprocaddress_nocontext glx_has_extension_nocontext glx_public_api diff --git a/test/Makefile.am b/test/Makefile.am index 59e4ee3..d113f6e 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -41,6 +41,7 @@ AM_CPPFLAGS = \ TESTS = \ egl_has_extension_nocontext \ + glx_beginend \ glx_public_api \ glx_public_api_core \ glx_glxgetprocaddress_nocontext \ @@ -48,11 +49,16 @@ TESTS = \ headerguards \ $() +XFAIL_TESTS = glx_beginend + check_PROGRAMS = $(TESTS) egl_has_extension_nocontext_LDFLAGS = $(X11_LIBS) $(EPOXY) libegl_common.la egl_has_extension_nocontext_DEPENDENCIES = libegl_common.la +glx_beginend_LDFLAGS = $(X11_LIBS) $(EPOXY) libglx_common.la $(GL_LIBS) +glx_beginend_DEPENDENCIES = libglx_common.la + glx_public_api_LDFLAGS = $(X11_LIBS) $(EPOXY) libglx_common.la glx_public_api_DEPENDENCIES = libglx_common.la diff --git a/test/glx_beginend.c b/test/glx_beginend.c new file mode 100644 index 0000000..c68f408 --- /dev/null +++ b/test/glx_beginend.c @@ -0,0 +1,107 @@ +/* + * Copyright © 2013 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. + */ + +#include <stdio.h> +#include <assert.h> +#include "epoxy/gl.h" +#include "epoxy/glx.h" +#include <X11/Xlib.h> + +#include "glx_common.h" + +static Display *dpy; +static bool has_argb2101010; + +static bool +test_with_epoxy(void) +{ + glBegin(GL_TRIANGLES); + { + /* Hit a base entrypoint that won't call gl_version() */ + glVertex2f(0, 0); + + /* Hit an entrypoint that will call probably call gl_version() */ + glMultiTexCoord4f(GL_TEXTURE0, 0.0, 0.0, 0.0, 0.0); + + /* Hit an entrypoint that will probably call + * epoxy_conservative_has_extension(); + */ + if (has_argb2101010) { + glTexCoordP4ui(GL_UNSIGNED_INT_2_10_10_10_REV, 0); + } + } + glEnd(); + + /* No error should have been generated in the process. */ + return glGetError() == 0; +} + + + +#undef glBegin +#undef glEnd +extern void glBegin(GLenum primtype); +extern void glEnd(void); + +static bool +test_without_epoxy(void) +{ + glBegin(GL_TRIANGLES); + { + /* Hit a base entrypoint that won't call gl_version() */ + glVertex4f(0, 0, 0, 0); + + /* Hit an entrypoint that will call probably call gl_version() */ + glMultiTexCoord3f(GL_TEXTURE0, 0.0, 0.0, 0.0); + + /* Hit an entrypoint that will probably call + * epoxy_conservative_has_extension(); + */ + if (has_argb2101010) { + glTexCoordP3ui(GL_UNSIGNED_INT_2_10_10_10_REV, 0); + } + } + glEnd(); + + /* We can't make any assertions about error presence this time + * around. This test is just trying to catch segfaults. + */ + return true; +} + +int +main(int argc, char **argv) +{ + bool pass = true; + + dpy = get_display_or_skip(); + make_glx_context_current_or_skip(dpy); + + has_argb2101010 = + epoxy_has_gl_extension("GL_ARB_vertex_type_2_10_10_10_rev"); + + pass = pass && test_with_epoxy(); + pass = pass && test_without_epoxy(); + + return pass != true; +} |