Module: Mesa
Branch: main
Commit: f450f3f25605df9da6f618080f0284d15b9b536c
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f450f3f25605df9da6f618080f0284d15b9b536c

Author: Faith Ekstrand <[email protected]>
Date:   Thu Oct  5 12:34:35 2023 -0500

nvk: Invalidate sampler/texture header caches in BeginCommandBuffer()

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

---

 src/nouveau/vulkan/nvk_cmd_dispatch.c | 12 +++++++++++-
 src/nouveau/vulkan/nvk_cmd_draw.c     | 11 +++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/nouveau/vulkan/nvk_cmd_dispatch.c 
b/src/nouveau/vulkan/nvk_cmd_dispatch.c
index 74f1aae680e..035a9c9e431 100644
--- a/src/nouveau/vulkan/nvk_cmd_dispatch.c
+++ b/src/nouveau/vulkan/nvk_cmd_dispatch.c
@@ -48,7 +48,17 @@ nvk_cmd_buffer_compute_cls(struct nvk_cmd_buffer *cmd)
 void
 nvk_cmd_buffer_begin_compute(struct nvk_cmd_buffer *cmd,
                              const VkCommandBufferBeginInfo *pBeginInfo)
-{ }
+{
+   if (cmd->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
+      struct nv_push *p = nvk_cmd_buffer_push(cmd, 4);
+      P_IMMD(p, NVA0C0, INVALIDATE_SAMPLER_CACHE_NO_WFI, {
+         .lines = LINES_ALL,
+      });
+      P_IMMD(p, NVA0C0, INVALIDATE_TEXTURE_HEADER_CACHE_NO_WFI, {
+         .lines = LINES_ALL,
+      });
+   }
+}
 
 static void
 nva0c0_qmd_set_dispatch_size(UNUSED struct nvk_device *dev, uint32_t *qmd,
diff --git a/src/nouveau/vulkan/nvk_cmd_draw.c 
b/src/nouveau/vulkan/nvk_cmd_draw.c
index 6bfd770fbe8..6a9ee86233c 100644
--- a/src/nouveau/vulkan/nvk_cmd_draw.c
+++ b/src/nouveau/vulkan/nvk_cmd_draw.c
@@ -447,6 +447,17 @@ void
 nvk_cmd_buffer_begin_graphics(struct nvk_cmd_buffer *cmd,
                               const VkCommandBufferBeginInfo *pBeginInfo)
 {
+   if (cmd->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
+      struct nv_push *p = nvk_cmd_buffer_push(cmd, 3);
+      P_MTHD(p, NV9097, INVALIDATE_SAMPLER_CACHE_NO_WFI);
+      P_NV9097_INVALIDATE_SAMPLER_CACHE_NO_WFI(p, {
+         .lines = LINES_ALL,
+      });
+      P_NV9097_INVALIDATE_TEXTURE_HEADER_CACHE_NO_WFI(p, {
+         .lines = LINES_ALL,
+      });
+   }
+
    if (cmd->vk.level != VK_COMMAND_BUFFER_LEVEL_PRIMARY &&
        (pBeginInfo->flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)) 
{
       char gcbiar_data[VK_GCBIARR_DATA_SIZE(NVK_MAX_RTS)];

Reply via email to