anv/blorp: Flush the texture cache in UpdateBuffer
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 31 Mar 2017 22:33:51 +0000 (15:33 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 14 Apr 2017 20:35:02 +0000 (13:35 -0700)
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: "13.0 17.0" <mesa-stable@lists.freedesktop.org>
src/intel/vulkan/anv_blorp.c

index 4904ee3a5fc09bb108f71c7cde0d6f392144b75a..1755663e2ac5d2a10a9eb8f2395f71fbc056b1d8 100644 (file)
@@ -690,12 +690,19 @@ void anv_CmdUpdateBuffer(
 
    assert(max_update_size < MAX_SURFACE_DIM * 4);
 
+   /* We're about to read data that was written from the CPU.  Flush the
+    * texture cache so we don't get anything stale.
+    */
+   cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT;
+
    while (dataSize) {
       const uint32_t copy_size = MIN2(dataSize, max_update_size);
 
       struct anv_state tmp_data =
          anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, copy_size, 64);
 
+      anv_state_flush(cmd_buffer->device, tmp_data);
+
       memcpy(tmp_data.map, pData, copy_size);
 
       int bs = 16;