tu: Fix DST_INCOHERENT_FLUSH copy/paste error
authorConnor Abbott <cwabbott0@gmail.com>
Tue, 7 Jul 2020 15:10:44 +0000 (17:10 +0200)
committerConnor Abbott <cwabbott0@gmail.com>
Tue, 4 Aug 2020 13:37:51 +0000 (15:37 +0200)
This was meant to handle incoherent accesses by always flushing them,
but it accidentally checked for the coherent variant instead. As a
result e.g. a vkCmdClearImage() followed by a renderpass using the image
didn't get any flushes, resulting in the same sort of corruption seen
with sysmem renderpass clears. This happened to be exposed via some
tests that used multiview.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6009>

src/freedreno/vulkan/tu_cmd_buffer.c

index eb3f69a6e8090c89b288ac083ff7947016b6d22d..03130750d329efd60ffd0e3ce4601164cac16266 100644 (file)
@@ -2317,8 +2317,8 @@ tu_flush_for_access(struct tu_cache_state *cache,
 #undef DST_FLUSH
 
 #define DST_INCOHERENT_FLUSH(domain, flush, invalidate) \
-   if (dst_mask & (TU_ACCESS_##domain##_READ |                 \
-                   TU_ACCESS_##domain##_WRITE)) {              \
+   if (dst_mask & (TU_ACCESS_##domain##_INCOHERENT_READ |      \
+                   TU_ACCESS_##domain##_INCOHERENT_WRITE)) {   \
       flush_bits |= TU_CMD_FLAG_##invalidate |                 \
           (cache->pending_flush_bits &                         \
            (TU_CMD_FLAG_ALL_FLUSH & ~TU_CMD_FLAG_##flush));    \