[Mesa-dev] [PATCH] mesa, st/glx, st/wgl: Move GL version validation into an helper.

2014-11-14 Thread jfonseca
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.

2014-11-14 Thread Ilia Mirkin
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.

2014-11-14 Thread Jose Fonseca
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.

2014-11-14 Thread Jose Fonseca
 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