Merge commit 'origin/master' into gallium-map-range
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_lock.c
index cdf8a19fb13a0be8808d33ca0e0edaf5ba1b97e9..64bb3ca103fe7d964338710d6caff9a5f7f113c3 100644 (file)
@@ -1,8 +1,12 @@
-/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_lock.c,v 1.5 2002/10/30 12:51:55 alanh Exp $ */
 /**************************************************************************
 
 Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
                      VA Linux Systems Inc., Fremont, California.
+Copyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
+
+The Weather Channel (TM) funded Tungsten Graphics to develop the
+initial release of the Radeon 8500 driver under the XFree86 license.
+This notice must be preserved.
 
 All Rights Reserved.
 
@@ -30,12 +34,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 /*
  * Authors:
- *   Kevin E. Martin <martin@valinux.com>
  *   Gareth Hughes <gareth@valinux.com>
+ *   Keith Whitwell <keith@tungstengraphics.com>
+ *   Kevin E. Martin <martin@valinux.com>
  */
 
-#include "glheader.h"
-#include "mtypes.h"
+#include "main/glheader.h"
+#include "main/mtypes.h"
 #include "radeon_context.h"
 #include "radeon_lock.h"
 #include "radeon_tex.h"
@@ -44,7 +49,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "drirenderbuffer.h"
 
-
 #if DEBUG_LOCKING
 char *prevLockFile = NULL;
 int prevLockLine = 0;
@@ -52,15 +56,15 @@ int prevLockLine = 0;
 
 /* Turn on/off page flipping according to the flags in the sarea:
  */
-static void
-radeonUpdatePageFlipping( radeonContextPtr rmesa )
+static void radeonUpdatePageFlipping(radeonContextPtr rmesa)
 {
-   rmesa->doPageFlip = rmesa->sarea->pfState;
-   driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer,
-                        rmesa->sarea->pfCurrentPage);
+       rmesa->doPageFlip = rmesa->sarea->pfState;
+       if (rmesa->glCtx->WinSysDrawBuffer) {
+               driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer,
+                                    rmesa->sarea->pfCurrentPage);
+       }
 }
 
-
 /* Update the hardware state.  This is called if another context has
  * grabbed the hardware lock, which includes the X server.  This
  * function also updates the driver's window state after the X server
@@ -69,51 +73,52 @@ radeonUpdatePageFlipping( radeonContextPtr rmesa )
  * the hardware lock when it changes the window state, this routine will
  * automatically be called after such a change.
  */
-void radeonGetLock( radeonContextPtr rmesa, GLuint flags )
+void radeonGetLock(radeonContextPtr rmesa, GLuint flags)
 {
-   __DRIdrawablePrivate *const drawable = rmesa->dri.drawable;
-   __DRIdrawablePrivate *const readable = rmesa->dri.readable;
-   __DRIscreenPrivate *sPriv = rmesa->dri.screen;
-   drm_radeon_sarea_t *sarea = rmesa->sarea;
-
-   drmGetLock( rmesa->dri.fd, rmesa->dri.hwContext, flags );
-
-   /* The window might have moved, so we might need to get new clip
-    * rects.
-    *
-    * NOTE: This releases and regrabs the hw lock to allow the X server
-    * to respond to the DRI protocol request for new drawable info.
-    * Since the hardware state depends on having the latest drawable
-    * clip rects, all state checking must be done _after_ this call.
-    */
-   DRI_VALIDATE_DRAWABLE_INFO( sPriv, drawable );
-   if (drawable != readable) {
-      DRI_VALIDATE_DRAWABLE_INFO( sPriv, readable );
-   }
-
-   if ( rmesa->lastStamp != drawable->lastStamp ) {
-      radeonUpdatePageFlipping( rmesa );
-      radeonSetCliprects( rmesa );
-      radeonUpdateViewportOffset( rmesa->glCtx );
-      driUpdateFramebufferSize(rmesa->glCtx, drawable);
-   }
-
-   RADEON_STATECHANGE( rmesa, ctx );
-   if (rmesa->sarea->tiling_enabled) {
-      rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= RADEON_COLOR_TILE_ENABLE;
-   }
-   else {
-      rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] &= ~RADEON_COLOR_TILE_ENABLE;
-   }
-
-   if ( sarea->ctx_owner != rmesa->dri.hwContext ) {
-      int i;
-      sarea->ctx_owner = rmesa->dri.hwContext;
-
-      for ( i = 0 ; i < rmesa->nr_heaps ; i++ ) {
-        DRI_AGE_TEXTURES( rmesa->texture_heaps[ i ] );
-      }
-   }
-
-   rmesa->lost_context = GL_TRUE;
+       __DRIdrawablePrivate *const drawable = rmesa->dri.drawable;
+       __DRIdrawablePrivate *const readable = rmesa->dri.readable;
+       __DRIscreenPrivate *sPriv = rmesa->dri.screen;
+       drm_radeon_sarea_t *sarea = rmesa->sarea;
+
+       drmGetLock(rmesa->dri.fd, rmesa->dri.hwContext, flags);
+
+       /* The window might have moved, so we might need to get new clip
+        * rects.
+        *
+        * NOTE: This releases and regrabs the hw lock to allow the X server
+        * to respond to the DRI protocol request for new drawable info.
+        * Since the hardware state depends on having the latest drawable
+        * clip rects, all state checking must be done _after_ this call.
+        */
+       DRI_VALIDATE_DRAWABLE_INFO(sPriv, drawable);
+       if (drawable != readable) {
+               DRI_VALIDATE_DRAWABLE_INFO(sPriv, readable);
+       }
+
+       if (rmesa->lastStamp != drawable->lastStamp) {
+               radeonUpdatePageFlipping(rmesa);
+               radeonSetCliprects(rmesa);
+               radeonUpdateViewportOffset(rmesa->glCtx);
+               driUpdateFramebufferSize(rmesa->glCtx, drawable);
+       }
+
+       RADEON_STATECHANGE(rmesa, ctx);
+       if (rmesa->sarea->tiling_enabled) {
+               rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |=
+                   RADEON_COLOR_TILE_ENABLE;
+       } else {
+               rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] &=
+                   ~RADEON_COLOR_TILE_ENABLE;
+       }
+
+       if (sarea->ctx_owner != rmesa->dri.hwContext) {
+               int i;
+               sarea->ctx_owner = rmesa->dri.hwContext;
+
+               for (i = 0; i < rmesa->nr_heaps; i++) {
+                       DRI_AGE_TEXTURES(rmesa->texture_heaps[i]);
+               }
+       }
+
+       rmesa->lost_context = GL_TRUE;
 }