nvk: Invalidate sampler/texture header caches in BeginCommandBuffer()
authorFaith Ekstrand <faith.ekstrand@collabora.com>
Thu, 5 Oct 2023 17:34:35 +0000 (12:34 -0500)
committerMarge Bot <emma+marge@anholt.net>
Sat, 7 Oct 2023 04:23:50 +0000 (04:23 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25595>

src/nouveau/vulkan/nvk_cmd_dispatch.c
src/nouveau/vulkan/nvk_cmd_draw.c

index 74f1aae..035a9c9 100644 (file)
@@ -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,
index 6bfd770..6a9ee86 100644 (file)
@@ -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)];