On Fri, Nov 14, 2014 at 3:33 PM, <jfons...@vmware.com> wrote: > From: José Fonseca <jfons...@vmware.com> > > As suggested by Brian Paul. > > Tested with piglit glx-create-context-invalid-{gl,es}-version. > --- > src/gallium/state_trackers/glx/xlib/glx_api.c | 13 +++------- > src/gallium/state_trackers/wgl/stw_ext_context.c | 13 +++------- > src/mesa/main/version.c | 33 > ++++++++++++++++++++++++ > src/mesa/main/version.h | 6 +++++ > 4 files changed, 47 insertions(+), 18 deletions(-)
Is it OK to depend on mesa/main from state trackers? (other than the GL state tracker, obviously) > > diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c > b/src/gallium/state_trackers/glx/xlib/glx_api.c > index 1807edb..d4e028c 100644 > --- a/src/gallium/state_trackers/glx/xlib/glx_api.c > +++ b/src/gallium/state_trackers/glx/xlib/glx_api.c > @@ -36,6 +36,8 @@ > #include <X11/Xmd.h> > #include <GL/glxproto.h> > > +#include "main/version.h" > + > #include "xm_api.h" > > > @@ -2792,19 +2794,12 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig > config, > if (majorVersion <= 0 || > minorVersion < 0 || > (profileMask != GLX_CONTEXT_ES_PROFILE_BIT_EXT && > - ((majorVersion == 1 && minorVersion > 5) || > - (majorVersion == 2 && minorVersion > 1) || > - (majorVersion == 3 && minorVersion > 3) || > - (majorVersion == 4 && minorVersion > 5) || > - majorVersion > 4))) { > + !_mesa_is_valid_version(majorVersion, minorVersion))) { > generate_error(dpy, BadMatch, 0, X_GLXCreateContextAtrribsARB, True); > return NULL; > } > if (profileMask == GLX_CONTEXT_ES_PROFILE_BIT_EXT && > - ((majorVersion == 1 && minorVersion > 1) || > - (majorVersion == 2 && minorVersion > 0) || > - (majorVersion == 3 && minorVersion > 1) || > - majorVersion > 3)) { > + !_mesa_is_valid_es_version(majorVersion, minorVersion)) { > /* GLX_EXT_create_context_es2_profile says nothing to justifying a > * different error code for invalid ES versions, but this is what > NVIDIA > * does and piglit expects. > diff --git a/src/gallium/state_trackers/wgl/stw_ext_context.c > b/src/gallium/state_trackers/wgl/stw_ext_context.c > index 8a96cac..ee46334 100644 > --- a/src/gallium/state_trackers/wgl/stw_ext_context.c > +++ b/src/gallium/state_trackers/wgl/stw_ext_context.c > @@ -30,6 +30,8 @@ > #include <GL/gl.h> > #include <GL/wglext.h> > > +#include "main/version.h" > + > #include "stw_icd.h" > #include "stw_context.h" > #include "stw_device.h" > @@ -114,16 +116,9 @@ wglCreateContextAttribsARB(HDC hDC, HGLRC hShareContext, > const int *attribList) > if (majorVersion <= 0 || > minorVersion < 0 || > (profileMask != WGL_CONTEXT_ES_PROFILE_BIT_EXT && > - ((majorVersion == 1 && minorVersion > 5) || > - (majorVersion == 2 && minorVersion > 1) || > - (majorVersion == 3 && minorVersion > 3) || > - (majorVersion == 4 && minorVersion > 5) || > - majorVersion > 4)) || > + !_mesa_is_valid_version(majorVersion, minorVersion)) || > (profileMask == WGL_CONTEXT_ES_PROFILE_BIT_EXT && > - ((majorVersion == 1 && minorVersion > 1) || > - (majorVersion == 2 && minorVersion > 0) || > - (majorVersion == 3 && minorVersion > 1) || > - majorVersion > 3))) { > + !_mesa_is_valid_es_version(majorVersion, minorVersion))) { > SetLastError(ERROR_INVALID_VERSION_ARB); > return NULL; > } > diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c > index 4951891..5bdef16 100644 > --- a/src/mesa/main/version.c > +++ b/src/mesa/main/version.c > @@ -460,3 +460,36 @@ _mesa_compute_version(struct gl_context *ctx) > break; > } > } > + > + > +GLboolean > +_mesa_is_valid_version(int major, int minor) > +{ > + static const char max_minor_version[] = { > + /* 1 . */ 5, > + /* 2 . */ 1, > + /* 3 . */ 3, > + /* 4 . */ 5, > + }; > + > + return (major >= 0 && > + major < sizeof max_minor_version && > + minor >= 0 && > + minor <= max_minor_version[major - 1]); > +} > + > + > +GLboolean > +_mesa_is_valid_es_version(int major, int minor) > +{ > + static const char max_minor_version[] = { > + /* 1 . */ 1, > + /* 2 . */ 0, > + /* 3 . */ 1, > + }; > + > + return (major >= 0 && > + major < sizeof max_minor_version && > + minor >= 0 && > + minor <= max_minor_version[major - 1]); > +} > diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h > index 450a0e3..e2e1fc2 100644 > --- a/src/mesa/main/version.h > +++ b/src/mesa/main/version.h > @@ -50,4 +50,10 @@ _mesa_override_glsl_version(struct gl_constants *consts); > extern int > _mesa_get_gl_version_override(void); > > +extern GLboolean > +_mesa_is_valid_version(int major, int minor); > + > +extern GLboolean > +_mesa_is_valid_es_version(int major, int minor); > + > #endif /* VERSION_H */ > -- > 2.1.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev