#include "lp_surface.h"
#include "lp_state.h"
#include "lp_tile_cache.h"
+#include "lp_tex_cache.h"
#include "lp_winsys.h"
draw_flush(llvmpipe->draw);
- if (flags & PIPE_FLUSH_TEXTURE_CACHE) {
- for (i = 0; i < llvmpipe->num_textures; i++) {
- lp_flush_tile_cache(llvmpipe, llvmpipe->tex_cache[i]);
- }
- }
-
- 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, llvmpipe->cbuf_cache[i]);
-
- if (llvmpipe->zsbuf_cache)
- lp_flush_tile_cache(llvmpipe, llvmpipe->zsbuf_cache);
+ if (llvmpipe->cbuf_cache[i]) {
+ lp_tile_cache_map_transfers(llvmpipe->cbuf_cache[i]);
+ lp_flush_tile_cache(llvmpipe->cbuf_cache[i]);
+ }
/* Need this call for hardware buffers before swapbuffers.
*
* 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_tile_cache_map_transfers(llvmpipe->cbuf_cache[i]);
+ lp_flush_tile_cache(llvmpipe->cbuf_cache[i]);
+ }
+
+ /* FIXME: untile zsbuf! */
+
llvmpipe->dirty_render_cache = FALSE;
}