[Mesa-dev] [PATCH] mesa, st/glx, st/wgl: Move GL version validation into an helper.
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(-) 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
Re: [Mesa-dev] [PATCH] mesa, st/glx, st/wgl: Move GL version validation into an helper.
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
Re: [Mesa-dev] [PATCH] mesa, st/glx, st/wgl: Move GL version validation into an helper.
piglit didn't catch this but I just noticed there a bug. It should be: diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c index 5bdef16..3f08d31 100644 --- a/src/mesa/main/version.c +++ b/src/mesa/main/version.c @@ -472,8 +472,8 @@ _mesa_is_valid_version(int major, int minor) /* 4 . */ 5, }; - return (major = 0 - major sizeof max_minor_version + return (major 0 + major = sizeof max_minor_version minor = 0 minor = max_minor_version[major - 1]); } @@ -488,8 +488,8 @@ _mesa_is_valid_es_version(int major, int minor) /* 3 . */ 1, }; - return (major = 0 - major sizeof max_minor_version + return (major 0 + major = sizeof max_minor_version minor = 0 minor = max_minor_version[major - 1]); } From: mesa-dev mesa-dev-boun...@lists.freedesktop.org on behalf of jfons...@vmware.com jfons...@vmware.com Sent: 14 November 2014 20:33 To: mesa-dev@lists.freedesktop.org; Brian Paul Subject: [Mesa-dev] [PATCH] mesa, st/glx, st/wgl: Move GL version validation into an helper. 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(-) 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
Re: [Mesa-dev] [PATCH] mesa, st/glx, st/wgl: Move GL version validation into an helper.
Is it OK to depend on mesa/main from state trackers? (other than the GL state tracker, obviously) No, not in general. It's only because these two state trackers are GL state trackers, and already depend on mesa/main. (The code src/mesa/state_tracker doesn't completely hide classic Mesa internals, and there's no harm in that.) But a, vega, d3d state tracker, should not depend on mesa/main. I think noawadays the place for putting code that should be used by gallium and mesa is src/util.. Jose From: ibmir...@gmail.com ibmir...@gmail.com on behalf of Ilia Mirkin imir...@alum.mit.edu Sent: 14 November 2014 20:36 To: Jose Fonseca Cc: mesa-dev@lists.freedesktop.org; Brian Paul Subject: Re: [Mesa-dev] [PATCH] mesa, st/glx, st/wgl: Move GL version validation into an helper. 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