diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c b/src/nouveau/vulkan/nvk_cmd_buffer.c index af72611d5fb..805a2f69b34 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.c +++ b/src/nouveau/vulkan/nvk_cmd_buffer.c @@ -529,6 +529,10 @@ nvk_cmd_flush_wait_dep(struct nvk_cmd_buffer *cmd, const VkDependencyInfo *dep, bool wait) { + VkQueueFlags queue_flags = nvk_cmd_buffer_queue_flags(cmd); + enum nvkmd_engines engines = + nvk_queue_engines_from_queue_flags(queue_flags); + enum nvk_barrier barriers = 0; /* For asymmetric, we don't know what the access flags will be yet. @@ -564,6 +568,9 @@ nvk_cmd_flush_wait_dep(struct nvk_cmd_buffer *cmd, bar->srcAccessMask); } + if (!(engines & (NVKMD_ENGINE_3D | NVKMD_ENGINE_COMPUTE))) + barriers &= ~NVK_BARRIER_FLUSH_SHADER_DATA; + if (!barriers) return; @@ -655,6 +662,20 @@ nvk_cmd_invalidate_deps(struct nvk_cmd_buffer *cmd, } } + VkQueueFlags queue_flags = nvk_cmd_buffer_queue_flags(cmd); + enum nvkmd_engines engines = + nvk_queue_engines_from_queue_flags(queue_flags); + + if (!(engines & (NVKMD_ENGINE_3D | NVKMD_ENGINE_COMPUTE))) + barriers &= ~(NVK_BARRIER_INVALIDATE_TEX_DATA | + NVK_BARRIER_INVALIDATE_RASTER_CACHE | + NVK_BARRIER_INVALIDATE_SHADER_DATA | + NVK_BARRIER_INVALIDATE_CONSTANT | + NVK_BARRIER_INVALIDATE_MME_DATA); + + if (!(engines & NVKMD_ENGINE_COMPUTE)) + barriers &= ~NVK_BARRIER_INVALIDATE_QMD_DATA; + if (!barriers) return;