[PATCH] GLX: More clearly document the GLX protocol version handling

Ian Romanick idr at freedesktop.org
Thu Oct 1 10:45:16 PDT 2009


From: Ian Romanick <ian.d.romanick at intel.com>

---
 glx/glxcmds.c               |    1 -
 glx/glxdri2.c               |    6 ++----
 glx/glxscreens.c            |   12 ++++++++++--
 glx/glxscreens.h            |    9 +++++++++
 include/protocol-versions.h |    2 +-
 5 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 30c25a9..ba4c123 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -50,7 +50,6 @@
 #include "indirect_dispatch.h"
 #include "indirect_table.h"
 #include "indirect_util.h"
-#include "protocol-versions.h"
 
 static int
 validGlxScreen(ClientPtr client, int screen, __GLXscreen **pGlxScreen, int *err)
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 82568e6..ed7dc80 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -685,10 +685,8 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 				       screen->base.GLXextensions);
     }
 
-    /* We know that the X server supports the protocol for at least GLX 1.4.
-     * When a new version of GLX is created, we'll have to revisit this.  We're
-     * also going to assume (perhaps incorrectly?) that all DRI2-enabled
-     * drivers support the required extension for GLX 1.3.  The extensions
+    /* We're going to assume (perhaps incorrectly?) that all DRI2-enabled
+     * drivers support the required extensions for GLX 1.4.  The extensions
      * we're assuming are:
      *
      *    - GLX_SGI_make_current_read (1.3)
diff --git a/glx/glxscreens.c b/glx/glxscreens.c
index 6ce24b2..674e2c6 100644
--- a/glx/glxscreens.c
+++ b/glx/glxscreens.c
@@ -42,6 +42,7 @@
 #include "glxserver.h"
 #include "glxutil.h"
 #include "glxext.h"
+#include "protocol-versions.h"
 
 static int glxScreenPrivateKeyIndex;
 static DevPrivateKey glxScreenPrivateKey = &glxScreenPrivateKeyIndex;
@@ -162,8 +163,8 @@ static const char GLServerExtensions[] =
 ** supported across all screens in a multi-screen system.
 */
 static char GLXServerVendorName[] = "SGI";
-unsigned glxMajorVersion = 1;
-unsigned glxMinorVersion = 4;
+unsigned glxMajorVersion = SERVER_GLX_MAJOR_VERSION;
+unsigned glxMinorVersion = SERVER_GLX_MINOR_VERSION;
 static char GLXServerExtensions[] =
 			"GLX_ARB_multisample "
 			"GLX_EXT_visual_info "
@@ -380,6 +381,13 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
     pGlxScreen->GLextensions  = xstrdup(GLServerExtensions);
     pGlxScreen->GLXvendor     = xstrdup(GLXServerVendorName);
     pGlxScreen->GLXextensions = xstrdup(GLXServerExtensions);
+
+    /* All GLX providers must support all of the functionality required for at
+     * least GLX 1.2.  If the provider supports a higher version, the GLXminor
+     * version can be changed in the provider's screen-probe routine.  For
+     * most providers, the screen-probe routine is the caller of this
+     * function.
+     */
     pGlxScreen->GLXmajor      = 1;
     pGlxScreen->GLXminor      = 2;
 
diff --git a/glx/glxscreens.h b/glx/glxscreens.h
index 2d696d2..bff4363 100644
--- a/glx/glxscreens.h
+++ b/glx/glxscreens.h
@@ -160,8 +160,17 @@ struct __GLXscreen {
     char *GLXvendor;
     char *GLXversion;
     char *GLXextensions;
+
+    /**
+     * \name GLX version supported by this screen.
+     *
+     * Since the GLX version advertised by the server is for the whole server,
+     * the GLX protocol code uses the minimum version supported on all screens.
+     */
+    /*@{*/
     unsigned GLXmajor;
     unsigned GLXminor;
+    /*@}*/
 
     Bool (*CloseScreen)(int index, ScreenPtr pScreen);
     Bool (*DestroyWindow)(WindowPtr pWindow);
diff --git a/include/protocol-versions.h b/include/protocol-versions.h
index da9770c..d688c66 100644
--- a/include/protocol-versions.h
+++ b/include/protocol-versions.h
@@ -61,7 +61,7 @@
 
 /* GLX */
 #define SERVER_GLX_MAJOR_VERSION		1
-#define SERVER_GLX_MINOR_VERSION		2
+#define SERVER_GLX_MINOR_VERSION		4
 
 /* Xinerama */
 #define SERVER_PANORAMIX_MAJOR_VERSION          1
-- 
1.6.4.3



More information about the xorg-devel mailing list