i965: defined BRW_MAX_MRF
[mesa.git] / src / mesa / drivers / x11 / xm_buffer.c
index c1fa23328f0352b7f63eefedcd468d3240090f34..821e2a8e082e42198d0655836f2e080192865708 100644 (file)
 
 
 #include "glxheader.h"
-#include "GL/xmesa.h"
 #include "xmesaP.h"
-#include "imports.h"
-#include "framebuffer.h"
-#include "renderbuffer.h"
+#include "main/imports.h"
+#include "main/framebuffer.h"
+#include "main/renderbuffer.h"
 
 
-#ifndef XFree86Server
+#if defined(USE_XSHM) && !defined(XFree86Server)
 static volatile int mesaXErrorFlag = 0;
 
 /**
@@ -51,18 +50,14 @@ mesaHandleXError(XMesaDisplay *dpy, XErrorEvent *event)
    mesaXErrorFlag = 1;
    return 0;
 }
-#endif
-
 
 /**
  * Allocate a shared memory XImage back buffer for the given XMesaBuffer.
  * Return:  GL_TRUE if success, GL_FALSE if error
  */
-#ifndef XFree86Server
 static GLboolean
 alloc_back_shm_ximage(XMesaBuffer b, GLuint width, GLuint height)
 {
-#ifdef USE_XSHM
    /*
     * We have to do a _lot_ of error checking here to be sure we can
     * really use the XSHM extension.  It seems different servers trigger
@@ -152,10 +147,13 @@ alloc_back_shm_ximage(XMesaBuffer b, GLuint width, GLuint height)
    }
 
    return GL_TRUE;
+}
 #else
+static GLboolean
+alloc_back_shm_ximage(XMesaBuffer b, GLuint width, GLuint height)
+{
    /* Can't compile XSHM support */
    return GL_FALSE;
-#endif
 }
 #endif
 
@@ -187,14 +185,12 @@ alloc_back_buffer(XMesaBuffer b, GLuint width, GLuint height)
          return;
 
       /* Allocate new back buffer */
-#ifdef XFree86Server
-      /* Allocate a regular XImage for the back buffer. */
-      b->backxrb->ximage = XMesaCreateImage(b->xm_visual->BitsPerPixel,
-                                            width, height, NULL);
-      {
-#else
       if (b->shm == 0 || !alloc_back_shm_ximage(b, width, height)) {
         /* Allocate a regular XImage for the back buffer. */
+#ifdef XFree86Server
+        b->backxrb->ximage = XMesaCreateImage(b->xm_visual->BitsPerPixel,
+                                               width, height, NULL);
+#else
         b->backxrb->ximage = XCreateImage(b->xm_visual->display,
                                       b->xm_visual->visinfo->visual,
                                       GET_VISUAL_DEPTH(b->xm_visual),
@@ -233,6 +229,7 @@ alloc_back_buffer(XMesaBuffer b, GLuint width, GLuint height)
       }
 
       b->backxrb->ximage = NULL;
+      b->backxrb->drawable = b->backxrb->pixmap;
    }
 }
 
@@ -386,18 +383,18 @@ xmesa_delete_framebuffer(struct gl_framebuffer *fb)
    }
 
    if (b->gc)
-      XMesaFreeGC(b->xm_visual->display, b->gc);
+      XMesaFreeGC(b->display, b->gc);
    if (b->cleargc)
-      XMesaFreeGC(b->xm_visual->display, b->cleargc);
+      XMesaFreeGC(b->display, b->cleargc);
    if (b->swapgc)
-      XMesaFreeGC(b->xm_visual->display, b->swapgc);
+      XMesaFreeGC(b->display, b->swapgc);
 
-   if (b->xm_visual->mesa_visual.doubleBufferMode) {
+   if (fb->Visual.doubleBufferMode) {
       /* free back ximage/pixmap/shmregion */
       if (b->backxrb->ximage) {
 #if defined(USE_XSHM) && !defined(XFree86Server)
          if (b->shm) {
-            XShmDetach( b->xm_visual->display, &b->shminfo );
+            XShmDetach( b->display, &b->shminfo );
             XDestroyImage( b->backxrb->ximage );
             shmdt( b->shminfo.shmaddr );
          }
@@ -407,9 +404,9 @@ xmesa_delete_framebuffer(struct gl_framebuffer *fb)
          b->backxrb->ximage = NULL;
       }
       if (b->backxrb->pixmap) {
-         XMesaFreePixmap( b->xm_visual->display, b->backxrb->pixmap );
+         XMesaFreePixmap( b->display, b->backxrb->pixmap );
          if (b->xm_visual->hpcr_clear_flag) {
-            XMesaFreePixmap( b->xm_visual->display,
+            XMesaFreePixmap( b->display,
                              b->xm_visual->hpcr_clear_pixmap );
             XMesaDestroyImage( b->xm_visual->hpcr_clear_ximage );
          }
@@ -422,18 +419,6 @@ xmesa_delete_framebuffer(struct gl_framebuffer *fb)
       XMesaDestroyImage( b->rowimage );
    }
 
-   /* Note that XMesaBuffer renderbuffers normally have a refcount of 2
-    * (creation + binding) so we need to explicitly delete/unbind them here.
-    */
-   if (b->frontxrb) {
-      _mesa_unreference_renderbuffer((struct gl_renderbuffer **) &b->frontxrb);
-      ASSERT(b->frontxrb == NULL);
-   }
-   if (b->backxrb) {
-      _mesa_unreference_renderbuffer((struct gl_renderbuffer **) &b->backxrb);
-      ASSERT(b->backxrb == NULL);
-   }
-
    _mesa_free_framebuffer_data(fb);
    _mesa_free(fb);
 }