anv: Flush caches in anv_image_copy_to_shadow
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 19 Jun 2019 19:14:20 +0000 (14:14 -0500)
committerJason Ekstrand <jason@jlekstrand.net>
Wed, 19 Jun 2019 22:21:46 +0000 (22:21 +0000)
Copies to a shadow image happen during a VkCmdPipelineBarrier or at
subpass transitions.  We could potentially be a bit more conservative
but these transitions shouldn't happen often and it's better to have our
bases covered.

Fixes: f3ea0cf828 "anv: Add stencil texturing support for gen7"
src/intel/vulkan/anv_blorp.c

index 1539ae1d29870db89b7eb47664d63450928a626b..e4b1448c6cde55a355ffcbddbafdcef5c0fcbed8 100644 (file)
@@ -1409,6 +1409,15 @@ anv_image_copy_to_shadow(struct anv_cmd_buffer *cmd_buffer,
    struct blorp_batch batch;
    blorp_batch_init(&cmd_buffer->device->blorp, &batch, cmd_buffer, 0);
 
+   /* We don't know who touched the main surface last so flush a bunch of
+    * caches to ensure we get good data.
+    */
+   cmd_buffer->state.pending_pipe_bits |=
+      ANV_PIPE_DEPTH_CACHE_FLUSH_BIT |
+      ANV_PIPE_DATA_CACHE_FLUSH_BIT |
+      ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT |
+      ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT;
+
    struct blorp_surf surf;
    get_blorp_surf_for_anv_image(cmd_buffer->device,
                                 image, aspect,
@@ -1441,6 +1450,10 @@ anv_image_copy_to_shadow(struct anv_cmd_buffer *cmd_buffer,
       }
    }
 
+   /* We just wrote to the buffer with the render cache.  Flush it. */
+   cmd_buffer->state.pending_pipe_bits |=
+      ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT;
+
    blorp_batch_finish(&batch);
 }