debian/changelog                             |    6 
 debian/patches/03_fedora_glx_versioning.diff |  233 +++++++++++++++++++++++++++
 debian/patches/04_fedora_glx14-swrast.diff   |   26 +++
 debian/patches/series                        |    3 
 4 files changed, 268 insertions(+)

New commits:
commit 0b30e9d06e30d3b6fb08cb77e8236e13cce54ad4
Author: Julien Cristau <jcris...@debian.org>
Date:   Wed Dec 2 21:56:48 2009 +0100

    Enable GLX 1.4 on DRI2 and swrast (from upstream, via F12).

diff --git a/debian/changelog b/debian/changelog
index a89107f..48848d8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+xorg-server (2:1.7.2-3) UNRELEASED; urgency=low
+
+  * Enable GLX 1.4 on DRI2 and swrast (from upstream, via F12).
+
+ -- Julien Cristau <jcris...@debian.org>  Wed, 02 Dec 2009 21:52:45 +0100
+
 xorg-server (2:1.7.2-2) experimental; urgency=low
 
   [ Julien Cristau ]
diff --git a/debian/patches/03_fedora_glx_versioning.diff 
b/debian/patches/03_fedora_glx_versioning.diff
new file mode 100644
index 0000000..c8a1c30
--- /dev/null
+++ b/debian/patches/03_fedora_glx_versioning.diff
@@ -0,0 +1,233 @@
+From 3ef4be8129f78afd5566a9e5d0fb901449dcb771 Mon Sep 17 00:00:00 2001
+From: Ian Romanick <ian.d.roman...@intel.com>
+Date: Tue, 29 Sep 2009 16:43:43 -0700
+Subject: [PATCH] GLX: Enable GLX 1.4 on DRI2
+
+this squashes 4 commits
+(cherry picked from commit ad5c0d9efa47476ed5cf75c82265c73919e468b4)
+(cherry picked from commit cb54cf1b3e8c4109541cfb698542c00f2473e731)
+(cherry picked from commit 4c6bfa2c09ae2b0cffdf9211a6dfbcaefe0366b5)
+(cherry picked from commit 9bf2ff4faf730913de3073f346646a8727be41d4)
+---
+ glx/glxcmds.c                      |   12 ++++++++----
+ glx/glxdri2.c                      |   12 ++++++++++++
+ glx/glxext.c                       |    8 +++++++-
+ glx/glxscreens.c                   |   15 ++++++++++++---
+ glx/glxscreens.h                   |   11 +++++++++++
+ glx/glxserver.h                    |    3 +++
+ glx/indirect_texture_compression.c |    4 ++--
+ include/protocol-versions.h        |    2 +-
+ 8 files changed, 56 insertions(+), 11 deletions(-)
+
+diff --git a/glx/glxcmds.c b/glx/glxcmds.c
+index b1061a8..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)
+@@ -739,8 +738,8 @@ int __glXDisp_QueryVersion(__GLXclientState *cl, GLbyte 
*pc)
+     ** client if it wants to work with older clients; however, in this
+     ** implementation the server just returns its version number.
+     */
+-    reply.majorVersion = SERVER_GLX_MAJOR_VERSION;
+-    reply.minorVersion = SERVER_GLX_MINOR_VERSION;
++    reply.majorVersion = glxMajorVersion;
++    reply.minorVersion = glxMinorVersion;
+     reply.length = 0;
+     reply.type = X_Reply;
+     reply.sequenceNumber = client->sequence;
+@@ -2360,6 +2359,7 @@ int __glXDisp_QueryServerString(__GLXclientState *cl, 
GLbyte *pc)
+     char *buf;
+     __GLXscreen *pGlxScreen;
+     int err;
++    char ver_str[16];
+ 
+     if (!validGlxScreen(client, req->screen, &pGlxScreen, &err))
+       return err;
+@@ -2369,7 +2369,11 @@ int __glXDisp_QueryServerString(__GLXclientState *cl, 
GLbyte *pc)
+           ptr = pGlxScreen->GLXvendor;
+           break;
+       case GLX_VERSION:
+-          ptr = pGlxScreen->GLXversion;
++          /* Return to the server version rather than the screen version
++           * to prevent confusion when they do not match.
++           */
++          snprintf(ver_str, 16, "%d.%d", glxMajorVersion, glxMinorVersion);
++          ptr = ver_str;
+           break;
+       case GLX_EXTENSIONS:
+           ptr = pGlxScreen->GLXextensions;
+diff --git a/glx/glxdri2.c b/glx/glxdri2.c
+index ed7fb4c..ed7dc80 100644
+--- a/glx/glxdri2.c
++++ b/glx/glxdri2.c
+@@ -685,6 +685,18 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
+                                      screen->base.GLXextensions);
+     }
+ 
++    /* 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)
++     *    - GLX_SGIX_fbconfig (1.3)
++     *    - GLX_SGIX_pbuffer (1.3)
++     *    - GLX_ARB_multisample (1.4)
++     */
++    screen->base.GLXmajor = 1;
++    screen->base.GLXminor = 4;
++
+     screen->enterVT = pScrn->EnterVT;
+     pScrn->EnterVT = glxDRIEnterVT; 
+     screen->leaveVT = pScrn->LeaveVT;
+diff --git a/glx/glxext.c b/glx/glxext.c
+index 19d70d4..9f9c0ed 100644
+--- a/glx/glxext.c
++++ b/glx/glxext.c
+@@ -360,12 +360,18 @@ void GlxExtensionInit(void)
+       pScreen = screenInfo.screens[i];
+ 
+       for (p = __glXProviderStack; p != NULL; p = p->next) {
+-          if (p->screenProbe(pScreen) != NULL) {
++          __GLXscreen *glxScreen;
++
++          glxScreen = p->screenProbe(pScreen);
++          if (glxScreen != NULL) {
++              if (glxScreen->GLXminor < glxMinorVersion)
++                  glxMinorVersion = glxScreen->GLXminor;
+               LogMessage(X_INFO,
+                          "GLX: Initialized %s GL provider for screen %d\n",
+                          p->name, i);
+               break;
+           }
++
+       }
+ 
+       if (!p)
+diff --git a/glx/glxscreens.c b/glx/glxscreens.c
+index 7d29d31..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,7 +163,8 @@ static const char GLServerExtensions[] =
+ ** supported across all screens in a multi-screen system.
+ */
+ static char GLXServerVendorName[] = "SGI";
+-static char GLXServerVersion[] = "1.2";
++unsigned glxMajorVersion = SERVER_GLX_MAJOR_VERSION;
++unsigned glxMinorVersion = SERVER_GLX_MINOR_VERSION;
+ static char GLXServerExtensions[] =
+                       "GLX_ARB_multisample "
+                       "GLX_EXT_visual_info "
+@@ -378,9 +380,17 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr 
pScreen)
+     pGlxScreen->pScreen       = pScreen;
+     pGlxScreen->GLextensions  = xstrdup(GLServerExtensions);
+     pGlxScreen->GLXvendor     = xstrdup(GLXServerVendorName);
+-    pGlxScreen->GLXversion    = xstrdup(GLXServerVersion);
+     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;
++
+     pGlxScreen->CloseScreen = pScreen->CloseScreen;
+     pScreen->CloseScreen = glxCloseScreen;
+     pGlxScreen->DestroyWindow = pScreen->DestroyWindow;
+@@ -454,7 +464,6 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr 
pScreen)
+ void __glXScreenDestroy(__GLXscreen *screen)
+ {
+     xfree(screen->GLXvendor);
+-    xfree(screen->GLXversion);
+     xfree(screen->GLXextensions);
+     xfree(screen->GLextensions);
+ }
+diff --git a/glx/glxscreens.h b/glx/glxscreens.h
+index 3c1bdd4..bff4363 100644
+--- a/glx/glxscreens.h
++++ b/glx/glxscreens.h
+@@ -161,6 +161,17 @@ struct __GLXscreen {
+     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/glx/glxserver.h b/glx/glxserver.h
+index 4aa8c2e..80f1b28 100644
+--- a/glx/glxserver.h
++++ b/glx/glxserver.h
+@@ -248,4 +248,7 @@ extern int __glXImageSize(GLenum format, GLenum type,
+     GLint imageHeight, GLint rowLength, GLint skipImages, GLint skipRows,
+     GLint alignment);
+ 
++extern unsigned glxMajorVersion;
++extern unsigned glxMinorVersion;
++
+ #endif /* !__GLX_server_h__ */
+diff --git a/glx/indirect_texture_compression.c 
b/glx/indirect_texture_compression.c
+index 25c6eb3..5f44d7b 100644
+--- a/glx/indirect_texture_compression.c
++++ b/glx/indirect_texture_compression.c
+@@ -52,7 +52,7 @@ int __glXDisp_GetCompressedTexImageARB(struct 
__GLXclientStateRec *cl, GLbyte *p
+       const GLenum target = *(GLenum *)(pc + 0);
+       const GLint  level  = *(GLint  *)(pc + 4);
+       GLint compsize = 0;
+-      char *answer, answerBuffer[200];
++      char *answer = NULL, answerBuffer[200];
+ 
+       CALL_GetTexLevelParameteriv(GET_DISPATCH(), (target, level, 
GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compsize));
+ 
+@@ -92,7 +92,7 @@ int __glXDispSwap_GetCompressedTexImageARB(struct 
__GLXclientStateRec *cl, GLbyt
+       const GLenum target = (GLenum) bswap_32( *(int *)(pc + 0) );
+       const GLint  level =  (GLint ) bswap_32( *(int *)(pc + 4) );
+       GLint compsize = 0;
+-      char *answer, answerBuffer[200];
++      char *answer = NULL, answerBuffer[200];
+ 
+       CALL_GetTexLevelParameteriv(GET_DISPATCH(), (target, level, 
GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compsize));
+ 
+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.5.rc2
+
diff --git a/debian/patches/04_fedora_glx14-swrast.diff 
b/debian/patches/04_fedora_glx14-swrast.diff
new file mode 100644
index 0000000..2c51802
--- /dev/null
+++ b/debian/patches/04_fedora_glx14-swrast.diff
@@ -0,0 +1,26 @@
+From 25a0107768c9f25e8edc5e423ca8b1d0813f2d04 Mon Sep 17 00:00:00 2001
+From: Adam Jackson <a...@redhat.com>
+Date: Tue, 24 Nov 2009 13:38:46 -0500
+Subject: [PATCH] Enable GLX 1.4 for swrast
+
+---
+ glx/glxdriswrast.c |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c
+index 44f658f..20f9f90 100644
+--- a/glx/glxdriswrast.c
++++ b/glx/glxdriswrast.c
+@@ -510,6 +510,9 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
+ 
+     __glXScreenInit(&screen->base, pScreen);
+ 
++    screen->base.GLXmajor = 1;
++    screen->base.GLXminor = 4;
++
+     LogMessage(X_INFO,
+              "AIGLX: Loaded and initialized %s\n", filename);
+ 
+-- 
+1.6.5.2
+
diff --git a/debian/patches/series b/debian/patches/series
index 1524847..7d97522 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,6 +2,9 @@
 ## Ubuntu patches start with 100.
 001_fedora_extramodes.patch
 02_Add-libgcrypt-as-an-option-for-sha1.diff
+# 03 and 04 are backports from git master
+03_fedora_glx_versioning.diff
+04_fedora_glx14-swrast.diff
 #13_debian_add_xkbpath_env_variable.diff
 11-Move-config_init-after-CreateWellKnownSockets-and-In.diff
 12-Add-libudev-input-hotplug-backend.diff


-- 
To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to