summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2010-05-10 16:01:38 -0400
committerKristian Høgsberg <krh@bitplanet.net>2010-05-10 17:48:11 -0400
commitd8cfdbe894be8691242df4e812601320fbf6c5e7 (patch)
treeffa4f5641571086fdafd9bcfa81ebc86612caf59 /src
parent32942d2b1c80d3f16048d6acfedf7dbcf5e2f8cb (diff)
downloadexternal_mesa3d-d8cfdbe894be8691242df4e812601320fbf6c5e7.zip
external_mesa3d-d8cfdbe894be8691242df4e812601320fbf6c5e7.tar.gz
external_mesa3d-d8cfdbe894be8691242df4e812601320fbf6c5e7.tar.bz2
intel: Don't mark front buffer dirty if we're only reading
When we call intel_prepare_render() from intelReadPixels(), we'll mark the front buffer dirty. That's silly, since we're only reading from it and marking it dirty will cause us to copy from fake front to front eventually. Just clear the dirty flag after doing the read.
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/dri/intel/intel_pixel_read.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_pixel_read.c b/src/mesa/drivers/dri/intel/intel_pixel_read.c
index 2ac3da7..0c95a975 100644
--- a/src/mesa/drivers/dri/intel/intel_pixel_read.c
+++ b/src/mesa/drivers/dri/intel/intel_pixel_read.c
@@ -170,11 +170,19 @@ intelReadPixels(GLcontext * ctx,
GLenum format, GLenum type,
const struct gl_pixelstore_attrib *pack, GLvoid * pixels)
{
+ struct intel_context *intel = intel_context(ctx);
+ GLboolean dirty;
+
if (INTEL_DEBUG & DEBUG_PIXEL)
fprintf(stderr, "%s\n", __FUNCTION__);
intelFlush(ctx);
- intel_prepare_render(intel_context(ctx));
+
+ /* glReadPixels() wont dirty the front buffer, so reset the dirty
+ * flag after calling intel_prepare_render(). */
+ dirty = intel->front_buffer_dirty;
+ intel_prepare_render(intel);
+ intel->front_buffer_dirty = dirty;
if (do_blit_readpixels
(ctx, x, y, width, height, format, type, pack, pixels))
@@ -193,4 +201,7 @@ intelReadPixels(GLcontext * ctx,
_mesa_update_state(ctx);
_swrast_ReadPixels(ctx, x, y, width, height, format, type, pack, pixels);
+
+ /* There's an intel_prepare_render() call in intelSpanRenderStart(). */
+ intel->front_buffer_dirty = dirty;
}