Don't use the x/y/width/height params passed to Clear(). Get them
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 1 Nov 2006 18:51:43 +0000 (18:51 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 1 Nov 2006 18:51:43 +0000 (18:51 +0000)
after locking.  Next: remove the params altogether.

src/mesa/drivers/dri/i915/i830_metaops.c
src/mesa/drivers/dri/i915/i915_metaops.c
src/mesa/drivers/dri/i915/intel_batchbuffer.c
src/mesa/drivers/dri/i915/intel_ioctl.c
src/mesa/drivers/dri/i915tex/intel_blit.c
src/mesa/drivers/dri/i915tex/intel_buffers.c

index 17fde2f4804c11cf17253061f2b364e4314ca7de..dbf5f043498fb71f1cdf299330c6ff0e83f91026 100644 (file)
@@ -395,13 +395,15 @@ static void draw_poly(i830ContextPtr i830,
 
 void 
 i830ClearWithTris(intelContextPtr intel, GLbitfield mask,
-                 GLboolean all,
-                 GLint cx, GLint cy, GLint cw, GLint ch)
+                 GLboolean allFoo,
+                 GLint cxFoo, GLint cyFoo, GLint cwFoo, GLint chFoo)
 {
    i830ContextPtr i830 = I830_CONTEXT( intel );
    __DRIdrawablePrivate *dPriv = intel->driDrawable;
    intelScreenPrivate *screen = intel->intelScreen;
    int x0, y0, x1, y1;
+   GLint cx, cy, cw, ch;
+   GLboolean all;
 
    INTEL_FIREVERTICES(intel);
    SET_STATE( i830, meta );
@@ -411,6 +413,14 @@ i830ClearWithTris(intelContextPtr intel, GLbitfield mask,
 
    LOCK_HARDWARE(intel);
 
+   /* get clear bounds after locking */
+   cx = intel->ctx.DrawBuffer->_Xmin;
+   cy = intel->ctx.DrawBuffer->_Ymin;
+   cw = intel->ctx.DrawBuffer->_Xmax - cx;
+   ch = intel->ctx.DrawBuffer->_Ymax - cy;
+   all = (cw == intel->ctx.DrawBuffer->Width &&
+          ch == intel->ctx.DrawBuffer->Height);
+
    if(!all) {
       x0 = cx;
       y0 = cy;
index 3ab5dbfd68531b91326fb48f7d971c54a5eed69f..1be7ac4c48531fe81624f7f75f378648e22b9012 100644 (file)
@@ -493,14 +493,16 @@ static void draw_poly(i915ContextPtr i915,
 
 
 void 
-i915ClearWithTris(intelContextPtr intel, GLbitfield mask,
-                 GLboolean all,
-                 GLint cx, GLint cy, GLint cw, GLint ch)
+i915ClearWithTris(intelContextPtr intel, GLbitfield buffers,
+                 GLboolean allFoo,
+                 GLint cxFoo, GLint cyFoo, GLint cwFoo, GLint chFoo)
 {
    i915ContextPtr i915 = I915_CONTEXT( intel );
    __DRIdrawablePrivate *dPriv = intel->driDrawable;
    intelScreenPrivate *screen = intel->intelScreen;
    int x0, y0, x1, y1;
+   GLint cx, cy, cw, ch;
+   GLboolean all;
 
    SET_STATE( i915, meta ); 
    set_initial_state( i915 ); 
@@ -509,6 +511,14 @@ i915ClearWithTris(intelContextPtr intel, GLbitfield mask,
 
    LOCK_HARDWARE(intel);
 
+   /* get clear bounds after locking */
+   cx = intel->ctx.DrawBuffer->_Xmin;
+   cy = intel->ctx.DrawBuffer->_Ymin;
+   cw = intel->ctx.DrawBuffer->_Xmax - cx;
+   ch = intel->ctx.DrawBuffer->_Ymax - cy;
+   all = (cw == intel->ctx.DrawBuffer->Width &&
+          ch == intel->ctx.DrawBuffer->Height);
+
    if (!all) {
       x0 = cx;
       y0 = cy;
@@ -525,7 +535,7 @@ i915ClearWithTris(intelContextPtr intel, GLbitfield mask,
     * The active cliprects will be applied as for any other geometry.
     */
 
-   if (mask & BUFFER_BIT_FRONT_LEFT) { 
+   if (buffers & BUFFER_BIT_FRONT_LEFT) { 
       set_no_depth_stencil_write( i915 );
       set_color_mask( i915, GL_TRUE );
       set_draw_region( i915, &screen->front );
@@ -536,7 +546,7 @@ i915ClearWithTris(intelContextPtr intel, GLbitfield mask,
                0, 0, 0, 0);
    }
 
-   if (mask & BUFFER_BIT_BACK_LEFT) {
+   if (buffers & BUFFER_BIT_BACK_LEFT) {
       set_no_depth_stencil_write( i915 );
       set_color_mask( i915, GL_TRUE );
       set_draw_region( i915, &screen->back );
@@ -547,7 +557,7 @@ i915ClearWithTris(intelContextPtr intel, GLbitfield mask,
                0, 0, 0, 0);
    }
 
-   if (mask & BUFFER_BIT_STENCIL) {
+   if (buffers & BUFFER_BIT_STENCIL) {
       set_stencil_replace( i915, 
                           intel->ctx.Stencil.WriteMask[0], 
                           intel->ctx.Stencil.Clear);
index 865f15e79f552fd202e0389f4c6c673afc7ead26..803b41b2567deb39128a92a18395d4a7c1482380 100644 (file)
@@ -621,13 +621,14 @@ void intelEmitCopyBlitLocked( intelContextPtr intel,
 
 
 
-void intelClearWithBlit(GLcontext *ctx, GLbitfield flags, GLboolean all,
-                     GLint cx1, GLint cy1, GLint cw, GLint ch)
+void intelClearWithBlit(GLcontext *ctx, GLbitfield buffers, GLboolean allFoo,
+                        GLint cx1Foo, GLint cy1Foo, GLint cwFoo, GLint chFoo)
 {
    intelContextPtr intel = INTEL_CONTEXT( ctx );
    intelScreenPrivate *intelScreen = intel->intelScreen;
    GLuint clear_depth, clear_color;
-   GLint cx, cy;
+   GLint cx, cy, cw, ch;
+   GLboolean all;
    GLint pitch;
    GLint cpp = intelScreen->cpp;
    GLint i;
@@ -637,16 +638,24 @@ void intelClearWithBlit(GLcontext *ctx, GLbitfield flags, GLboolean all,
    intelFlush( &intel->ctx );
    LOCK_HARDWARE( intel );
 
+   /* get clear bounds after locking */
+   cx = intel->ctx.DrawBuffer->_Xmin;
+   cy = intel->ctx.DrawBuffer->_Ymin;
+   cw = intel->ctx.DrawBuffer->_Xmax - cx;
+   ch = intel->ctx.DrawBuffer->_Ymax - cy;
+   all = (cw == intel->ctx.DrawBuffer->Width &&
+          ch == intel->ctx.DrawBuffer->Height);
+
    pitch = intelScreen->front.pitch;
 
    clear_color = intel->ClearColor;
    clear_depth = 0;
 
-   if (flags & BUFFER_BIT_DEPTH) {
+   if (buffers & BUFFER_BIT_DEPTH) {
       clear_depth = (GLuint)(ctx->Depth.Clear * intel->ClearDepth);
    }
 
-   if (flags & BUFFER_BIT_STENCIL) {
+   if (buffers & BUFFER_BIT_STENCIL) {
       clear_depth |= (ctx->Stencil.Clear & 0xff) << 24;
    }
 
@@ -661,8 +670,8 @@ void intelClearWithBlit(GLcontext *ctx, GLbitfield flags, GLboolean all,
             XY_COLOR_BLT_WRITE_ALPHA | 
             XY_COLOR_BLT_WRITE_RGB);
       D_CMD = XY_COLOR_BLT_CMD;
-      if (flags & BUFFER_BIT_DEPTH) D_CMD |= XY_COLOR_BLT_WRITE_RGB;
-      if (flags & BUFFER_BIT_STENCIL) D_CMD |= XY_COLOR_BLT_WRITE_ALPHA;
+      if (buffers & BUFFER_BIT_DEPTH) D_CMD |= XY_COLOR_BLT_WRITE_RGB;
+      if (buffers & BUFFER_BIT_STENCIL) D_CMD |= XY_COLOR_BLT_WRITE_ALPHA;
       break;
    default:
       BR13 = (0xF0 << 16) | (pitch) | (1<<24);
@@ -672,17 +681,17 @@ void intelClearWithBlit(GLcontext *ctx, GLbitfield flags, GLboolean all,
 
    {
       /* flip top to bottom */
-      cy = intel->driDrawable->h-cy1-ch;
-      cx = cx1 + intel->drawX;
+      cy = intel->driDrawable->h - cy - ch;
+      cx = cx + intel->drawX;
       cy += intel->drawY;
 
       /* adjust for page flipping */
       if ( intel->sarea->pf_current_page == 1 ) {
-        GLuint tmp = flags;
+        GLuint tmp = buffers;
 
-        flags &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT);
-        if ( tmp & BUFFER_BIT_FRONT_LEFT ) flags |= BUFFER_BIT_BACK_LEFT;
-        if ( tmp & BUFFER_BIT_BACK_LEFT )  flags |= BUFFER_BIT_FRONT_LEFT;
+        buffers &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT);
+        if ( tmp & BUFFER_BIT_FRONT_LEFT ) buffers |= BUFFER_BIT_BACK_LEFT;
+        if ( tmp & BUFFER_BIT_BACK_LEFT )  buffers |= BUFFER_BIT_FRONT_LEFT;
       }
 
       for (i = 0 ; i < intel->numClipRects ; i++) 
@@ -718,7 +727,7 @@ void intelClearWithBlit(GLcontext *ctx, GLbitfield flags, GLboolean all,
             b.y2 > intelScreen->height)
            continue;
 
-        if ( flags & BUFFER_BIT_FRONT_LEFT ) {     
+        if ( buffers & BUFFER_BIT_FRONT_LEFT ) {           
            BEGIN_BATCH( 6);        
            OUT_BATCH( CMD );
            OUT_BATCH( BR13 );
@@ -729,7 +738,7 @@ void intelClearWithBlit(GLcontext *ctx, GLbitfield flags, GLboolean all,
            ADVANCE_BATCH();
         }
 
-        if ( flags & BUFFER_BIT_BACK_LEFT ) {
+        if ( buffers & BUFFER_BIT_BACK_LEFT ) {
            BEGIN_BATCH( 6); 
            OUT_BATCH( CMD );
            OUT_BATCH( BR13 );
@@ -740,7 +749,7 @@ void intelClearWithBlit(GLcontext *ctx, GLbitfield flags, GLboolean all,
            ADVANCE_BATCH();
         }
 
-        if ( flags & (BUFFER_BIT_STENCIL | BUFFER_BIT_DEPTH) ) {
+        if ( buffers & (BUFFER_BIT_STENCIL | BUFFER_BIT_DEPTH) ) {
            BEGIN_BATCH( 6);
            OUT_BATCH( D_CMD );
            OUT_BATCH( BR13 );
index d8530367664ebb02e7c2b87493b771327d171305..fa02a17da134dd84e5dedf369a4d88450a22eae3 100644 (file)
@@ -375,8 +375,8 @@ void intelFinish( GLcontext *ctx  )
 }
 
 
-void intelClear(GLcontext *ctx, GLbitfield mask, GLboolean all,
-               GLint cx, GLint cy, GLint cw, GLint ch)
+void intelClear(GLcontext *ctx, GLbitfield mask, GLboolean allFoo,
+               GLint cxFoo, GLint cyFoo, GLint cwFoo, GLint chFoo)
 {
    intelContextPtr intel = INTEL_CONTEXT( ctx );
    const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask);
@@ -429,13 +429,13 @@ void intelClear(GLcontext *ctx, GLbitfield mask, GLboolean all,
    swrast_mask |= (mask & BUFFER_BIT_ACCUM);
 
    if (blit_mask) 
-      intelClearWithBlit( ctx, blit_mask, all, cx, cy, cw, ch );
+      intelClearWithBlit( ctx, blit_mask, 0, 0, 0, 0, 0);
 
    if (tri_mask) 
-      intel->vtbl.clear_with_tris( intel, tri_mask, all, cx, cy, cw, ch);
+      intel->vtbl.clear_with_tris( intel, tri_mask, 0, 0, 0, 0, 0);
 
    if (swrast_mask)
-      _swrast_Clear( ctx, swrast_mask, all, cx, cy, cw, ch );
+      _swrast_Clear( ctx, swrast_mask, 0, 0, 0, 0, 0);
 }
 
 
index cbf993fc0e6d832e148acb2754c5f4d50c7386e3..1781fef569a2e45f569169c6d213b0a5a4cb0f52 100644 (file)
@@ -376,8 +376,8 @@ intelEmitCopyBlit(struct intel_context *intel,
  * \param mask  bitmask of BUFFER_BIT_* values indicating buffers to clear
  */
 void
-intelClearWithBlit(GLcontext * ctx, GLbitfield mask, GLboolean all,
-                   GLint cx, GLint cy, GLint cw, GLint ch)
+intelClearWithBlit(GLcontext * ctx, GLbitfield mask, GLboolean allFoo,
+                   GLint cxFoo, GLint cyFoo, GLint cwFoo, GLint chFoo)
 {
    struct intel_context *intel = intel_context(ctx);
    GLuint clear_depth;
@@ -409,20 +409,15 @@ intelClearWithBlit(GLcontext * ctx, GLbitfield mask, GLboolean all,
    LOCK_HARDWARE(intel);
 
    if (intel->numClipRects) {
+      GLint cx, cy, cw, ch;
       drm_clip_rect_t clear;
       int i;
 
-      /* Refresh the cx/y/w/h values as they may have been invalidated
-       * by a new window position or size picked up when we did
-       * LOCK_HARDWARE above.  The values passed by mesa are not
-       * reliable.
-       */
-      {
-         cx = ctx->DrawBuffer->_Xmin;
-         cy = ctx->DrawBuffer->_Ymin;
-         ch = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
-         cw = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
-      }
+      /* Get clear bounds after locking */
+      cx = ctx->DrawBuffer->_Xmin;
+      cy = ctx->DrawBuffer->_Ymin;
+      cw = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
+      ch = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
 
       if (intel->ctx.DrawBuffer->Name == 0) {
          /* clearing a window */
@@ -458,7 +453,9 @@ intelClearWithBlit(GLcontext * ctx, GLbitfield mask, GLboolean all,
          const drm_clip_rect_t *box = &intel->pClipRects[i];
          drm_clip_rect_t b;
          GLuint buf;
-         GLuint clearMask = mask;       /* use copy, since we modify it below */
+         GLuint clearMask = mask;      /* use copy, since we modify it below */
+         GLboolean all = (cw == ctx->DrawBuffer->Width &&
+                          ch == ctx->DrawBuffer->Height);
 
          if (!all) {
             intel_intersect_cliprects(&b, &clear, box);
index fe7ef7ec36f8589b1ea6295b8a1a372794fc7a2e..3da1420cddc2dccaec390b0c1f3f251f62a979ef 100644 (file)
@@ -281,7 +281,7 @@ intelWindowMoved(struct intel_context *intel)
 static void
 intelClearWithTris(struct intel_context *intel,
                    GLbitfield mask,
-                   GLboolean all, GLint cx, GLint cy, GLint cw, GLint ch)
+                   GLboolean allFoo, GLint cxFoo, GLint cyFoo, GLint cwFoo, GLint chFoo)
 {
    GLcontext *ctx = &intel->ctx;
    drm_clip_rect_t clear;
@@ -293,22 +293,16 @@ intelClearWithTris(struct intel_context *intel,
 
    /* XXX FBO: was: intel->driDrawable->numClipRects */
    if (intel->numClipRects) {
+      GLint cx, cy, cw, ch;
       GLuint buf;
 
       intel->vtbl.install_meta_state(intel);
 
-
-      /* Refresh the cx/y/w/h values as they may have been invalidated
-       * by a new window position or size picked up when we did
-       * LOCK_HARDWARE above.  The values passed by mesa are not
-       * reliable.
-       */
-      {
-         cx = ctx->DrawBuffer->_Xmin;
-         cy = ctx->DrawBuffer->_Ymin;
-         ch = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
-         cw = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
-      }
+      /* Get clear bounds after locking */
+      cx = ctx->DrawBuffer->_Xmin;
+      cy = ctx->DrawBuffer->_Ymin;
+      ch = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
+      cw = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
 
       /* note: regardless of 'all', cx, cy, cw, ch are now correct */
       clear.x1 = cx;
@@ -542,7 +536,7 @@ intelRotateWindow(struct intel_context *intel,
 static void
 intelClear(GLcontext * ctx,
            GLbitfield mask,
-           GLboolean all, GLint cx, GLint cy, GLint cw, GLint ch)
+           GLboolean allFoo, GLint cxFoo, GLint cyFoo, GLint cwFoo, GLint chFoo)
 {
    struct intel_context *intel = intel_context(ctx);
    const GLuint colorMask = *((GLuint *) & ctx->Color.ColorMask);
@@ -609,13 +603,13 @@ intelClear(GLcontext * ctx,
    intelFlush(ctx);             /* XXX intelClearWithBlit also does this */
 
    if (blit_mask)
-      intelClearWithBlit(ctx, blit_mask, all, cx, cy, cw, ch);
+      intelClearWithBlit(ctx, blit_mask, 0, 0, 0, 0, 0);
 
    if (tri_mask)
-      intelClearWithTris(intel, tri_mask, all, cx, cy, cw, ch);
+      intelClearWithTris(intel, tri_mask, 0, 0, 0, 0, 0);
 
    if (swrast_mask)
-      _swrast_Clear(ctx, swrast_mask, all, cx, cy, cw, ch);
+      _swrast_Clear(ctx, swrast_mask, 0, 0, 0, 0, 0);
 }