xserver/GL/glx glxcmds.c, 1.16, 1.17 glxcmdsswap.c, 1.8, 1.9 glxext.c, 1.9, 1.10 glxscreens.c, 1.17, 1.18 glxserver.h, 1.10, 1.11 glxutil.c, 1.4, 1.5 singlesize.c, 1.9, 1.10

Dave Airlie xserver-commit at pdx.freedesktop.org
Tue Jan 3 01:43:42 PST 2006


Committed by: airlied

Update of /cvs/xserver/xserver/GL/glx
In directory gabe:/tmp/cvs-serv14502/GL/glx

Modified Files:
	glxcmds.c glxcmdsswap.c glxext.c glxscreens.c glxserver.h 
	glxutil.c singlesize.c 
Log Message:
GL changes from Xgl codedrop


Index: glxcmds.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxcmds.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- glxcmds.c	23 Dec 2005 02:07:57 -0000	1.16
+++ glxcmds.c	3 Jan 2006 09:43:40 -0000	1.17
@@ -1161,17 +1161,23 @@
 	** The calling thread is swapping its current drawable.  In this case,
 	** glxSwapBuffers is in both GL and X streams, in terms of
 	** sequentiality.
-	*/
+	*
+
+	* XXX: Xgl don't need this. However, removing the code like this
+   * is not the final solution. We need to make it possible for the DDX to
+   * decide if this context switch and glFinish call is needed or not.
+    
 	if (__glXForceCurrent(cl, tag, &error)) {
-	    /*
+	    *
 	    ** Do whatever is needed to make sure that all preceding requests
 	    ** in both streams are completed before the swap is executed.
-	    */
+	    *
 	    (*__glRenderTable->Finish)();
 	    __GLX_NOTE_FLUSHED_CMDS(glxc);
 	} else {
 	    return error;
 	}
+	*/
     }
 
     if (pDraw) {
@@ -1254,8 +1260,7 @@
     GLXDrawable			   drawId;
     __GLXdrawablePrivate	   *glxPriv;
     int				   numAttribs;
-    int				   *sendBuf, *pSendBuf;
-    int				   nReplyBytes;
+    int				   sendBuf[2];
 
     pc += __GLX_VENDPRIV_HDR_SIZE;
 
@@ -1274,14 +1279,8 @@
     reply.sequenceNumber = client->sequence;
     reply.numAttribs = numAttribs;
 
-    nReplyBytes = reply.length << 2;
-    sendBuf = (int *) __glXMalloc ((size_t) nReplyBytes);
-    if (sendBuf == NULL)
-	return __glXBadContext;	/* XXX: Is this correct? */
-    
-    pSendBuf = sendBuf;
-    *pSendBuf++ = GLX_TEXTURE_TARGET_EXT;
-    *pSendBuf++ = (int) (glxPriv->texTarget);
+    sendBuf[0] = GLX_TEXTURE_TARGET_EXT;
+    sendBuf[1] = (int) (glxPriv->texTarget);
 
     if (client->swapped)
     {
@@ -1291,11 +1290,9 @@
     {
 	WriteToClient (client, sz_xGLXGetDrawableAttributesReply,
 		       (char *) &reply);
-	WriteToClient (client, nReplyBytes, (char *) sendBuf);
+	WriteToClient (client, sizeof (sendBuf), (char *) sendBuf);
     }
-    
-    __glXFree ((char *) sendBuf);
-    
+
     return Success;
 }
 
@@ -1311,8 +1308,8 @@
 
     pc += __GLX_VENDPRIV_HDR_SIZE;
 
-    drawId = *((GLXDrawable *) (pc));
-    buffer = *((int *)	       (pc + 4));
+    drawId = *((CARD32 *) (pc));
+    buffer = *((INT32 *)  (pc + 4));
 
     cx = __glXForceCurrent (cl, req->contextTag, &error);
     if (!cx)
@@ -1340,8 +1337,8 @@
 
     pc += __GLX_VENDPRIV_HDR_SIZE;
 
-    drawId = *((GLXDrawable *) (pc));
-    buffer = *((int *)	       (pc + 4));
+    drawId = *((CARD32 *) (pc));
+    buffer = *((INT32 *)  (pc + 4));
     
     cx = __glXForceCurrent (cl, req->contextTag, &error);
     if (!cx)
@@ -1360,6 +1357,186 @@
 
 /************************************************************************/
 
+static int
+__glXRenderBeginEnd (__GLXclientState *cl,
+		     int	      *commandsDone,
+		     GLbyte	      **ppc,
+		     int	      *pleft)
+{
+    ClientPtr	        client = cl->client;
+    int		        left, cmdlen;
+    CARD16	        opcode;
+    __GLXrenderHeader   *hdr;
+    GLbyte	        *pc;
+    __GLXrenderSizeData *entry;
+    int			extra;
+    void		(*proc) (GLbyte *);
+
+    pc = *ppc;
+    left = *pleft;
+    opcode = 0;
+
+    while (left > 0 && opcode != X_GLrop_End)
+    {
+	/*
+	** Verify that the header length and the overall length agree.
+	** Also, each command must be word aligned.
+	*/
+	hdr = (__GLXrenderHeader *) pc;
+	cmdlen = hdr->length;
+	opcode = hdr->opcode;
+
+	/*
+	** Check for core opcodes and grab entry data.
+	*/
+	if ( (opcode >= __GLX_MIN_RENDER_OPCODE) &&
+	     (opcode <= __GLX_MAX_RENDER_OPCODE) ) {
+	    entry = &__glXRenderSizeTable[opcode];
+	    proc = __glXRenderTable[opcode];
+#if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
+	} else if ( (opcode >= __GLX_MIN_RENDER_OPCODE_EXT) &&
+		    (opcode <= __GLX_MAX_RENDER_OPCODE_EXT) ) {
+	    entry =
+		&__glXRenderSizeTable_EXT[opcode -
+					  __GLX_MIN_RENDER_OPCODE_EXT];
+	    proc = __glXRenderTable_EXT[opcode -
+					__GLX_MIN_RENDER_OPCODE_EXT];
+#endif /* __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT */
+	} else {
+	    client->errorValue = *commandsDone;
+	    cl->beBufLen = 0;
+	    return __glXBadRenderRequest;
+	}
+
+	if (!entry->bytes) {
+	    /* unused opcode */
+	    client->errorValue = *commandsDone;
+	    cl->beBufLen = 0;
+	    return __glXBadRenderRequest;
+	}
+	if (entry->varsize) {
+	    /* variable size command */
+	    extra = (*entry->varsize)(pc + __GLX_RENDER_HDR_SIZE, False);
+	    if (extra < 0) {
+		extra = 0;
+	    }
+	    if (cmdlen != __GLX_PAD(entry->bytes + extra)) {
+		cl->beBufLen = 0;
+		return BadLength;
+	    }
+	} else {
+	    /* constant size command */
+	    if (cmdlen != __GLX_PAD(entry->bytes)) {
+		cl->beBufLen = 0;
+		return BadLength;
+	    }
+	}
+	if (left < cmdlen) {
+	    cl->beBufLen = 0;
+	    return BadLength;
+	}
+
+	(*commandsDone)++;
+
+	pc += cmdlen;
+	left -= cmdlen;
+    }
+
+    if (opcode == X_GLrop_End)
+    {
+	pc = cl->beBuf;
+	left = cl->beBufLen;
+	opcode = 0;
+
+	while (left > 0 && opcode != X_GLrop_End)
+	{
+	    hdr = (__GLXrenderHeader *) pc;
+	    cmdlen = hdr->length;
+	    opcode = hdr->opcode;
+
+	    if ((opcode >= __GLX_MIN_RENDER_OPCODE) &&
+		(opcode <= __GLX_MAX_RENDER_OPCODE))
+	    {
+		entry = &__glXRenderSizeTable[opcode];
+		proc = __glXRenderTable[opcode];
+	    }
+
+#if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
+	    else
+	    {
+		int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
+
+		entry = &__glXRenderSizeTable_EXT[index];
+		proc = __glXRenderTable_EXT[index];
+	    }
+#endif
+
+	    (*proc) (pc + __GLX_RENDER_HDR_SIZE);
+
+	    pc += cmdlen;
+	    left -= cmdlen;
+	}
+
+	cl->beBufLen = 0;
+
+	pc = *ppc;
+	left = *pleft;
+	opcode = 0;
+
+	while (opcode != X_GLrop_End)
+	{
+	    hdr = (__GLXrenderHeader *) pc;
+	    cmdlen = hdr->length;
+	    opcode = hdr->opcode;
+
+	    if ((opcode >= __GLX_MIN_RENDER_OPCODE) &&
+		(opcode <= __GLX_MAX_RENDER_OPCODE))
+	    {
+		entry = &__glXRenderSizeTable[opcode];
+		proc = __glXRenderTable[opcode];
+	    }
+
+#if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
+	    else
+	    {
+		int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
+		entry = &__glXRenderSizeTable_EXT[index];
+		proc = __glXRenderTable_EXT[index];
+	    }
+#endif
+
+	    (*proc) (pc + __GLX_RENDER_HDR_SIZE);
+
+	    pc += cmdlen;
+	    left -= cmdlen;
+	}
+    }
+    else
+    {
+	int size;
+
+	size = pc - *ppc;
+	if (cl->beBufSize < cl->beBufLen + size)
+	{
+	    cl->beBuf = (GLbyte *) Xrealloc (cl->beBuf, cl->beBufLen + size);
+	    if (!cl->beBuf)
+		cl->beBufLen = size = 0;
+
+	    cl->beBufSize = cl->beBufLen + size;
+	}
+
+	if (size)
+	    memcpy (cl->beBuf + cl->beBufLen, *ppc, size);
+
+	cl->beBufLen += size;
+    }
+
+    *ppc = pc;
+    *pleft = left;
+
+    return Success;
+}
+
 /*
 ** Render and Renderlarge are not in the GLX API.  They are used by the GLX
 ** client library to send batches of GL rendering commands.
@@ -1451,18 +1628,28 @@
 	    return BadLength;
 	}
 
-	/*
-	** Skip over the header and execute the command.  We allow the
-	** caller to trash the command memory.  This is useful especially
-	** for things that require double alignment - they can just shift
-	** the data towards lower memory (trashing the header) by 4 bytes
-	** and achieve the required alignment.
-	*/
-	(*proc)(pc + __GLX_RENDER_HDR_SIZE);
-	pc += cmdlen;
-	left -= cmdlen;
-	commandsDone++;
+	if (opcode == X_GLrop_Begin || cl->beBufLen > 0)
+	{
+	    error = __glXRenderBeginEnd (cl, &commandsDone, &pc, &left);
+	    if (error != Success)
+		return error;
+	}
+	else
+	{
+	    /*
+	    ** Skip over the header and execute the command.  We allow the
+	    ** caller to trash the command memory.  This is useful especially
+	    ** for things that require double alignment - they can just shift
+	    ** the data towards lower memory (trashing the header) by 4 bytes
+	    ** and achieve the required alignment.
+	    */
+	    (*proc)(pc + __GLX_RENDER_HDR_SIZE);
+	    pc += cmdlen;
+	    left -= cmdlen;
+	    commandsDone++;
+	}
     }
+
     __GLX_NOTE_UNFLUSHED_CMDS(glxc);
     return Success;
 }

Index: glxcmdsswap.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxcmdsswap.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- glxcmdsswap.c	10 Jun 2005 12:30:39 -0000	1.8
+++ glxcmdsswap.c	3 Jan 2006 09:43:40 -0000	1.9
@@ -519,6 +519,184 @@
 
 /************************************************************************/
 
+static int
+__glXSwapRenderBeginEnd (__GLXclientState *cl,
+			 int		  *commandsDone,
+			 GLbyte		  **ppc,
+			 int		  *pleft)
+{
+    ClientPtr	        client = cl->client;
+    int		        left, cmdlen;
+    CARD16	        opcode;
+    __GLXrenderHeader   *hdr;
+    GLbyte	        *pc;
+    __GLXrenderSizeData *entry;
+    int			extra;
+    void		(*proc) (GLbyte *);
+
+   __GLX_DECLARE_SWAP_VARIABLES;
+
+    pc = *ppc;
+    left = *pleft;
+    opcode = 0;
+
+    while (left > 0 && opcode != X_GLrop_End)
+    {
+	/*
+	** Verify that the header length and the overall length agree.
+	** Also, each command must be word aligned.
+	*/
+	hdr = (__GLXrenderHeader *) pc;
+	__GLX_SWAP_SHORT(&hdr->length);
+	__GLX_SWAP_SHORT(&hdr->opcode);
+	cmdlen = hdr->length;
+	opcode = hdr->opcode;
+
+	if ( (opcode >= __GLX_MIN_RENDER_OPCODE) &&
+	     (opcode <= __GLX_MAX_RENDER_OPCODE) ) {
+	    entry = &__glXRenderSizeTable[opcode];
+	    proc = __glXSwapRenderTable[opcode];
+#if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
+	} else if ( (opcode >= __GLX_MIN_RENDER_OPCODE_EXT) &&
+		    (opcode <= __GLX_MAX_RENDER_OPCODE_EXT) ) {
+	    int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
+	    entry = &__glXRenderSizeTable_EXT[index];
+	    proc = __glXSwapRenderTable_EXT[index];
+#endif /* __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT */
+	} else {
+	    client->errorValue = *commandsDone;
+	    cl->beBufLen = 0;
+	    return __glXBadRenderRequest;
+	}
+
+	if (!entry->bytes) {
+	    /* unused opcode */
+	    client->errorValue = *commandsDone;
+	    cl->beBufLen = 0;
+	    return __glXBadRenderRequest;
+	}
+	if (entry->varsize) {
+	    /* variable size command */
+	    extra = (*entry->varsize)(pc + __GLX_RENDER_HDR_SIZE, True);
+	    if (extra < 0) {
+		extra = 0;
+	    }
+	    if (cmdlen != __GLX_PAD(entry->bytes + extra)) {
+		cl->beBufLen = 0;
+		return BadLength;
+	    }
+	} else {
+	    /* constant size command */
+	    if (cmdlen != __GLX_PAD(entry->bytes)) {
+		cl->beBufLen = 0;
+		return BadLength;
+	    }
+	}
+	if (left < cmdlen) {
+	    cl->beBufLen = 0;
+	    return BadLength;
+	}
+
+	(*commandsDone)++;
+
+	pc += cmdlen;
+	left -= cmdlen;
+    }
+
+    if (opcode == X_GLrop_End)
+    {
+	pc = cl->beBuf;
+	left = cl->beBufLen;
+	opcode = 0;
+
+	while (left > 0 && opcode != X_GLrop_End)
+	{
+	    hdr = (__GLXrenderHeader *) pc;
+	    cmdlen = hdr->length;
+	    opcode = hdr->opcode;
+
+	    if ((opcode >= __GLX_MIN_RENDER_OPCODE) &&
+		(opcode <= __GLX_MAX_RENDER_OPCODE))
+	    {
+		entry = &__glXRenderSizeTable[opcode];
+		proc = __glXSwapRenderTable[opcode];
+	    }
+
+#if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
+	    else
+	    {
+		int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
+
+		entry = &__glXRenderSizeTable_EXT[index];
+		proc = __glXSwapRenderTable_EXT[index];
+	    }
+#endif
+
+	    (*proc) (pc + __GLX_RENDER_HDR_SIZE);
+
+	    pc += cmdlen;
+	    left -= cmdlen;
+	}
+
+	cl->beBufLen = 0;
+
+	pc = *ppc;
+	left = *pleft;
+	opcode = 0;
+
+	while (opcode != X_GLrop_End)
+	{
+	    hdr = (__GLXrenderHeader *) pc;
+	    cmdlen = hdr->length;
+	    opcode = hdr->opcode;
+
+	    if ((opcode >= __GLX_MIN_RENDER_OPCODE) &&
+		(opcode <= __GLX_MAX_RENDER_OPCODE))
+	    {
+		entry = &__glXRenderSizeTable[opcode];
+		proc = __glXRenderTable[opcode];
+	    }
+
+#if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
+	    else
+	    {
+		int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
+
+		entry = &__glXRenderSizeTable_EXT[index];
+		proc = __glXRenderTable_EXT[index];
+	    }
+#endif
+
+	    (*proc) (pc + __GLX_RENDER_HDR_SIZE);
+
+	    pc += cmdlen;
+	    left -= cmdlen;
+	}
+    }
+    else
+    {
+	int size;
+
+	size = pc - *ppc;
+	if (cl->beBufSize < cl->beBufLen + size)
+	{
+	    cl->beBuf = (GLbyte *) Xrealloc (cl->beBuf, cl->beBufLen + size);
+	    if (!cl->beBuf)
+		cl->beBufLen = size = 0;
+
+	    cl->beBufSize = cl->beBufLen + size;
+	}
+
+	if (size)
+	    memcpy (cl->beBuf + cl->beBufLen, *ppc, size);
+    }
+
+    *ppc = pc;
+    *pleft = left;
+
+    return Success;
+}
+
 /*
 ** Render and Renderlarge are not in the GLX API.  They are used by the GLX
 ** client library to send batches of GL rendering commands.
@@ -607,17 +785,26 @@
 	    return BadLength;
 	}
 
-	/*
-	** Skip over the header and execute the command.  We allow the
-	** caller to trash the command memory.  This is useful especially
-	** for things that require double alignment - they can just shift
-	** the data towards lower memory (trashing the header) by 4 bytes
-	** and achieve the required alignment.
-	*/
-	(*proc)(pc + __GLX_RENDER_HDR_SIZE);
-	pc += cmdlen;
-	left -= cmdlen;
-	commandsDone++;
+	if (opcode == X_GLrop_Begin || cl->beBufLen > 0)
+	{
+	    error = __glXSwapRenderBeginEnd (cl, &commandsDone, &pc, &left);
+	    if (error != Success)
+		return error;
+	}
+	else
+	{
+	    /*
+	    ** Skip over the header and execute the command.  We allow the
+	    ** caller to trash the command memory.  This is useful especially
+	    ** for things that require double alignment - they can just shift
+	    ** the data towards lower memory (trashing the header) by 4 bytes
+	    ** and achieve the required alignment.
+	    */
+	    (*proc)(pc + __GLX_RENDER_HDR_SIZE);
+	    pc += cmdlen;
+	    left -= cmdlen;
+	    commandsDone++;
+	}
     }
     __GLX_NOTE_UNFLUSHED_CMDS(cx);
     return Success;

Index: glxext.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxext.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- glxext.c	23 Dec 2005 02:07:57 -0000	1.9
+++ glxext.c	3 Jan 2006 09:43:40 -0000	1.10
@@ -72,6 +72,7 @@
     __GLXclientState *cl = __glXClients[clientIndex];
 
     if (cl->returnBuf) __glXFree(cl->returnBuf);
+    if (cl->beBuf) __glXFree(cl->beBuf);
     if (cl->largeCmdBuf) __glXFree(cl->largeCmdBuf);
     if (cl->currentContexts) __glXFree(cl->currentContexts);
     if (cl->GLClientextensions) __glXFree(cl->GLClientextensions);

Index: glxscreens.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxscreens.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- glxscreens.c	7 Jun 2005 15:25:02 -0000	1.17
+++ glxscreens.c	3 Jan 2006 09:43:40 -0000	1.18
@@ -34,6 +34,9 @@
 **
 */
 
+#include "glxserver.h"
+#include "glxutil.h"
+
 #ifdef IN_MODULE
 #include <xf86_ansic.h>
 #else
@@ -43,9 +46,6 @@
 
 #include <windowstr.h>
 
-#include "glxserver.h"
-#include "glxutil.h"
-
 static const char GLServerExtensions[] = 
 			"GL_ARB_depth_texture "
 			"GL_ARB_imaging "
@@ -63,6 +63,7 @@
 			"GL_ARB_texture_mirrored_repeat "
 			"GL_ARB_transpose_matrix "
 			"GL_ARB_window_pos "
+			"GL_ARB_texture_non_power_of_two "
 			"GL_EXT_abgr "
 			"GL_EXT_bgra "
  			"GL_EXT_blend_color "
@@ -95,6 +96,7 @@
 			"GL_EXT_texture_object "
 			"GL_EXT_texture_rectangle "
 			"GL_EXT_vertex_array "
+			"GL_EXT_texture_filter_anisotropic "
 			"GL_APPLE_packed_pixels "
 			"GL_ATI_texture_mirror_once "
 			"GL_ATI_texture_env_combine3 "
@@ -112,6 +114,7 @@
 			"GL_NV_point_sprite "
 			"GL_NV_texgen_reflection "
 			"GL_NV_texture_rectangle "
+			"GL_NV_texture_env_combine4 "
 			"GL_SGIS_generate_mipmap "
 			"GL_SGIS_texture_border_clamp "
 			"GL_SGIS_texture_edge_clamp "
@@ -119,7 +122,6 @@
 			"GL_SGIX_depth_texture "
 			"GL_SGIX_shadow "
 			"GL_SGIX_shadow_ambient "
-			"GL_ARB_texture_non_power_of_two "
 			;
 
 /*
@@ -133,15 +135,11 @@
 			"GLX_EXT_visual_info "
 			"GLX_EXT_visual_rating "
 			"GLX_EXT_import_context "
-			"GLX_SGI_make_current_read "
+/*			"GLX_SGI_make_current_read " */
 			"GLX_SGIS_multisample "
 			"GLX_MESA_render_texture "
 			;
 
-/*
-** This comes from the GL library that the server will link with.  Right
-** now, that is the DDX Sample OpenGL.
-*/
 extern __GLXscreenInfo __glDDXScreenInfo;
 
 __GLXscreenInfo *__glXScreens[] = {

Index: glxserver.h
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxserver.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- glxserver.h	3 Jan 2006 07:39:40 -0000	1.10
+++ glxserver.h	3 Jan 2006 09:43:40 -0000	1.11
@@ -40,7 +40,6 @@
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
-
 #include <X11/X.h>
 #include <X11/Xproto.h>
 #include <X11/Xmd.h>
@@ -140,6 +139,13 @@
     GLint returnBufSize;
 
     /*
+    ** Begin/End buffer.
+    */
+    GLbyte *beBuf;
+    GLint beBufLen;
+    GLint beBufSize;
+
+    /*
     ** Keep track of large rendering commands, which span multiple requests.
     */
     GLint largeCmdBytesSoFar;		/* bytes received so far	*/

Index: glxutil.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxutil.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- glxutil.c	3 Jul 2003 18:05:13 -0000	1.4
+++ glxutil.c	3 Jan 2006 09:43:40 -0000	1.5
@@ -296,7 +296,7 @@
 	assert(glxc->readPriv->width == 0);
 	assert(glxc->readPriv->height == 0);
 	(*glci->exports.notifyDestroy)(gc);
-	__glXDeassociateContext(glxc);
+	/* __glXDeassociateContext(glxc); */
 	assert((glxc->pendingState & __GLX_PENDING_DESTROY) == 0x0);
     }
     if (glxc->pendingState & __GLX_PENDING_SWAP) {

Index: singlesize.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/singlesize.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- singlesize.c	7 Jun 2005 15:25:02 -0000	1.9
+++ singlesize.c	3 Jan 2006 09:43:40 -0000	1.10
@@ -1083,6 +1083,10 @@
       case GL_MODELVIEW1_MATRIX_EXT:
 	return 32;
 
+      /* GL_EXT_texture_filter_anisotropic */
+      case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
+	  return 1;
+
       /* GL_ARB_texture_comrpession / GL 1.3 */
       case GL_COMPRESSED_TEXTURE_FORMATS: {
 	  GLint temp;



More information about the xserver-commit mailing list