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)];
