summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/llvmpipe/lp_flush.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_flush.c')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_flush.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_flush.c b/src/gallium/drivers/llvmpipe/lp_flush.c
index f815e79003c..866d4fb0996 100644
--- a/src/gallium/drivers/llvmpipe/lp_flush.c
+++ b/src/gallium/drivers/llvmpipe/lp_flush.c
@@ -56,14 +56,16 @@ llvmpipe_flush( struct pipe_context *pipe,
}
}
- if (flags & PIPE_FLUSH_RENDER_CACHE) {
+ if (flags & PIPE_FLUSH_SWAPBUFFERS) {
+ /* If this is a swapbuffers, just flush color buffers.
+ *
+ * The zbuffer changes are not discarded, but held in the cache
+ * in the hope that a later clear will wipe them out.
+ */
for (i = 0; i < llvmpipe->framebuffer.nr_cbufs; i++)
if (llvmpipe->cbuf_cache[i])
lp_flush_tile_cache(llvmpipe->cbuf_cache[i]);
- if (llvmpipe->zsbuf_cache)
- lp_flush_tile_cache(llvmpipe->zsbuf_cache);
-
/* Need this call for hardware buffers before swapbuffers.
*
* there should probably be another/different flush-type function
@@ -71,7 +73,15 @@ llvmpipe_flush( struct pipe_context *pipe,
* to unmap surfaces when flushing.
*/
llvmpipe_unmap_transfers(llvmpipe);
-
+ }
+ else if (flags & PIPE_FLUSH_RENDER_CACHE) {
+ for (i = 0; i < llvmpipe->framebuffer.nr_cbufs; i++)
+ if (llvmpipe->cbuf_cache[i])
+ lp_flush_tile_cache(llvmpipe->cbuf_cache[i]);
+
+ if (llvmpipe->zsbuf_cache)
+ lp_flush_tile_cache(llvmpipe->zsbuf_cache);
+
llvmpipe->dirty_render_cache = FALSE;
}