intel: Skip the flush before read-pixels via blit
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 11 Feb 2011 00:03:48 +0000 (00:03 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 21 Feb 2011 12:59:36 +0000 (12:59 +0000)
As we will flush when reading the return values of the blit, we can forgo
the earlier flush.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
src/mesa/drivers/dri/intel/intel_pixel_read.c

index f90f822..b2e77c7 100644 (file)
@@ -80,6 +80,7 @@ do_blit_readpixels(struct gl_context * ctx,
    drm_intel_bo *dst_buffer;
    GLboolean all;
    GLint dst_x, dst_y;
+   GLuint dirty;
 
    DBG("%s\n", __FUNCTION__);
 
@@ -129,7 +130,9 @@ do_blit_readpixels(struct gl_context * ctx,
       return GL_TRUE;
    }
 
+   dirty = intel->front_buffer_dirty;
    intel_prepare_render(intel);
+   intel->front_buffer_dirty = dirty;
 
    all = (width * height * src->cpp == dst->Base.Size &&
          x == 0 && dst_offset == 0);
@@ -171,6 +174,10 @@ intelReadPixels(struct gl_context * ctx,
 
    DBG("%s\n", __FUNCTION__);
 
+   if (do_blit_readpixels
+       (ctx, x, y, width, height, format, type, pack, pixels))
+      return;
+
    intel_flush(ctx);
 
    /* glReadPixels() wont dirty the front buffer, so reset the dirty
@@ -179,10 +186,6 @@ intelReadPixels(struct gl_context * ctx,
    intel_prepare_render(intel);
    intel->front_buffer_dirty = dirty;
 
-   if (do_blit_readpixels
-       (ctx, x, y, width, height, format, type, pack, pixels))
-      return;
-
    fallback_debug("%s: fallback to swrast\n", __FUNCTION__);
 
    /* Update Mesa state before calling down into _swrast_ReadPixels, as