From c39bf7e7f986eee05e95a99d957f3928e850179c Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Tue, 27 May 2025 17:33:05 -0400 Subject: [PATCH] nvk: Don't use INVALIDATE_TEXTURE_DATA_CACHE_NO_WFI on Kepler It exists in the headers but it doesn't seem to work properly. Even doing a separate WFI right before it doesn't help. Acked-by: Mel Henning Part-of: --- src/nouveau/vulkan/nvk_cmd_buffer.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c b/src/nouveau/vulkan/nvk_cmd_buffer.c index 90445a17e49..a6b6318a288 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.c +++ b/src/nouveau/vulkan/nvk_cmd_buffer.c @@ -18,6 +18,7 @@ #include "vk_pipeline_layout.h" #include "vk_synchronization.h" +#include "clb097.h" #include "nv_push_cl906f.h" #include "nv_push_cl90b5.h" #include "nv_push_cla097.h" @@ -602,9 +603,20 @@ nvk_cmd_invalidate_deps(struct nvk_cmd_buffer *cmd, struct nv_push *p = nvk_cmd_buffer_push(cmd, 10); if (barriers & NVK_BARRIER_INVALIDATE_TEX_DATA) { - P_IMMD(p, NVA097, INVALIDATE_TEXTURE_DATA_CACHE_NO_WFI, { - .lines = LINES_ALL, - }); + if (pdev->info.cls_eng3d >= MAXWELL_A) { + P_IMMD(p, NVA097, INVALIDATE_TEXTURE_DATA_CACHE_NO_WFI, { + .lines = LINES_ALL, + }); + } else { + /* On Kepler, the _NO_WFI form doesn't appear to actually work + * properly. It exists in the headers but it doesn't fully + * invalidate everything. Even doing a full WFI before hand isn't + * sufficient. + */ + P_IMMD(p, NVA097, INVALIDATE_TEXTURE_DATA_CACHE, { + .lines = LINES_ALL, + }); + } } if (barriers & (NVK_BARRIER_INVALIDATE_SHADER_DATA &