Merge branch 'llvm-cliptest-viewport'
[mesa.git] / src / mesa / drivers / dri / mach64 / mach64_ioctl.c
index 109da1b5824e4ef1571f2226063d46371cd82d53..0146e0d05151776f5cb4b41b83814bc4cca035db 100644 (file)
@@ -1,4 +1,4 @@
-/* $XFree86$ */ /* -*- mode: c; c-basic-offset: 3 -*- */
+/* -*- mode: c; c-basic-offset: 3 -*- */
 /*
  * Copyright 2000 Gareth Hughes
  * All Rights Reserved.
@@ -35,8 +35,8 @@
 #include "mach64_ioctl.h"
 #include "mach64_tex.h"
 
-#include "imports.h"
-#include "macros.h"
+#include "main/imports.h"
+#include "main/macros.h"
 
 #include "swrast/swrast.h"
 
@@ -279,7 +279,7 @@ static int mach64WaitForFrameCompletion( mach64ContextPtr mmesa )
 
 /* Copy the back color buffer to the front color buffer.
  */
-void mach64CopyBuffer( const __DRIdrawablePrivate *dPriv )
+void mach64CopyBuffer( __DRIdrawable *dPriv )
 {
    mach64ContextPtr mmesa;
    GLint nbox, i, ret;
@@ -320,7 +320,7 @@ void mach64CopyBuffer( const __DRIdrawablePrivate *dPriv )
 #endif
 
    UNLOCK_HARDWARE( mmesa );
-   driWaitForVBlank( dPriv, &mmesa->vbl_seq, mmesa->vblank_flags, &missed_target );
+   driWaitForVBlank( dPriv, &missed_target );
    LOCK_HARDWARE( mmesa );
 
    /* use front buffer cliprects */
@@ -665,19 +665,18 @@ void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
  * Buffer clear
  */
 
-static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
-                          GLint cx, GLint cy, GLint cw, GLint ch )
+static void mach64DDClear( struct gl_context *ctx, GLbitfield mask )
 {
    mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
-   __DRIdrawablePrivate *dPriv = mmesa->driDrawable;
+   __DRIdrawable *dPriv = mmesa->driDrawable;
    drm_mach64_clear_t clear;
    GLuint flags = 0;
    GLint i;
    GLint ret;
+   GLint cx, cy, cw, ch;
 
    if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
-      fprintf( stderr, "%s: all=%d %d,%d %dx%d\n",
-              __FUNCTION__, all, cx, cy, cw, ch );
+      fprintf( stderr, "mach64DDClear\n");
    }
 
 #if ENABLE_PERF_BOXES
@@ -713,14 +712,19 @@ static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
    }
 
    if ( mask )
-      _swrast_Clear( ctx, mask, all, cx, cy, cw, ch );
+      _swrast_Clear( ctx, mask );
 
    if ( !flags )
       return;
 
    LOCK_HARDWARE( mmesa );
 
-   /* This needs to be in the locked region, so updated drawable origin is used */
+   /* compute region after locking: */
+   cx = ctx->DrawBuffer->_Xmin;
+   cy = ctx->DrawBuffer->_Ymin;
+   cw = ctx->DrawBuffer->_Xmax - cx;
+   ch = ctx->DrawBuffer->_Ymax - cy;
+
    /* Flip top to bottom */
    cx += mmesa->drawX;
    cy  = mmesa->drawY + dPriv->h - cy - ch;
@@ -737,7 +741,8 @@ static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
       drm_clip_rect_t *b = mmesa->sarea->boxes;
       GLint n = 0;
 
-      if ( !all ) {
+      if (cw != dPriv->w || ch != dPriv->h) {
+         /* clear subregion */
         for ( ; i < nr ; i++ ) {
            GLint x = box[i].x1;
            GLint y = box[i].y1;
@@ -759,6 +764,7 @@ static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
            n++;
         }
       } else {
+         /* clear whole window */
         for ( ; i < nr ; i++ ) {
            *b++ = box[i];
            n++;