nvk: Invalidate texture header and sampler caches each submit
authorFaith Ekstrand <faith.ekstrand@collabora.com>
Tue, 31 Jan 2023 02:11:56 +0000 (20:11 -0600)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 21:31:58 +0000 (21:31 +0000)
It's possible descriptors have been added or removed.  We could track
it, but there's really no point.  Per-submit shouldn't be terrible.

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

src/nouveau/vulkan/nvk_cmd_draw.c
src/nouveau/vulkan/nvk_device.c

index ca942d2..9b80921 100644 (file)
@@ -284,9 +284,6 @@ nvk_cmd_buffer_begin_graphics(struct nvk_cmd_buffer *cmd,
    P_IMMD(p, NV9097, SET_POINT_CENTER_MODE, V_OGL);
    P_IMMD(p, NV9097, SET_EDGE_FLAG, V_TRUE);
    P_IMMD(p, NV9097, SET_SAMPLER_BINDING, V_INDEPENDENTLY);
-   P_IMMD(p, NV9097, INVALIDATE_SAMPLER_CACHE, {
-      .lines = LINES_ALL
-   });
 
    if (cmd->vk.level != VK_COMMAND_BUFFER_LEVEL_PRIMARY &&
        (pBeginInfo->flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)) {
index b78f9cd..75ce8db 100644 (file)
@@ -216,12 +216,18 @@ nvk_queue_state_update(struct nvk_device *dev,
       P_NVA0C0_SET_TEX_HEADER_POOL_A(p, qs->images.bo->offset >> 32);
       P_NVA0C0_SET_TEX_HEADER_POOL_B(p, qs->images.bo->offset);
       P_NVA0C0_SET_TEX_HEADER_POOL_C(p, qs->images.alloc_count - 1);
+      P_IMMD(p, NVA0C0, INVALIDATE_TEXTURE_HEADER_CACHE_NO_WFI, {
+         .lines = LINES_ALL
+      });
 
       /* 3D */
       P_MTHD(p, NV9097, SET_TEX_HEADER_POOL_A);
       P_NV9097_SET_TEX_HEADER_POOL_A(p, qs->images.bo->offset >> 32);
       P_NV9097_SET_TEX_HEADER_POOL_B(p, qs->images.bo->offset);
       P_NV9097_SET_TEX_HEADER_POOL_C(p, qs->images.alloc_count - 1);
+      P_IMMD(p, NV9097, INVALIDATE_TEXTURE_HEADER_CACHE_NO_WFI, {
+         .lines = LINES_ALL
+      });
    }
 
    if (qs->samplers.bo) {
@@ -232,12 +238,18 @@ nvk_queue_state_update(struct nvk_device *dev,
       P_NVA0C0_SET_TEX_SAMPLER_POOL_A(p, qs->samplers.bo->offset >> 32);
       P_NVA0C0_SET_TEX_SAMPLER_POOL_B(p, qs->samplers.bo->offset);
       P_NVA0C0_SET_TEX_SAMPLER_POOL_C(p, qs->samplers.alloc_count - 1);
+      P_IMMD(p, NVA0C0, INVALIDATE_SAMPLER_CACHE_NO_WFI, {
+         .lines = LINES_ALL
+      });
 
       /* 3D */
       P_MTHD(p, NV9097, SET_TEX_SAMPLER_POOL_A);
       P_NV9097_SET_TEX_SAMPLER_POOL_A(p, qs->samplers.bo->offset >> 32);
       P_NV9097_SET_TEX_SAMPLER_POOL_B(p, qs->samplers.bo->offset);
       P_NV9097_SET_TEX_SAMPLER_POOL_C(p, qs->samplers.alloc_count - 1);
+      P_IMMD(p, NV9097, INVALIDATE_SAMPLER_CACHE_NO_WFI, {
+         .lines = LINES_ALL
+      });
    }
 
    if (qs->slm.bo) {