nvk: Call INVALIDATE_RASTER_CACHE for shading rate

Fixes VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR to match
what the proprietary driver emits for that barrier type.

Reviewed-by: Mary Guillemard <mary@mary.zone>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37857>
This commit is contained in:
Mel Henning 2025-10-07 12:45:31 -04:00 committed by Marge Bot
parent f7725299c3
commit f725685428

View file

@ -443,6 +443,7 @@ enum nvk_barrier {
NVK_BARRIER_INVALIDATE_CONSTANT = 1 << 4,
NVK_BARRIER_INVALIDATE_MME_DATA = 1 << 5,
NVK_BARRIER_INVALIDATE_QMD_DATA = 1 << 6,
NVK_BARRIER_INVALIDATE_RASTER_CACHE = 1 << 7,
};
static enum nvk_barrier
@ -503,6 +504,9 @@ nvk_barrier_invalidates(VkPipelineStageFlags2 stages,
VK_PIPELINE_STAGE_2_BLIT_BIT)))
barriers |= NVK_BARRIER_INVALIDATE_TEX_DATA;
if (access & VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR)
barriers |= NVK_BARRIER_INVALIDATE_RASTER_CACHE;
return barriers;
}
@ -625,7 +629,7 @@ nvk_cmd_invalidate_deps(struct nvk_cmd_buffer *cmd,
if (!barriers)
return;
struct nv_push *p = nvk_cmd_buffer_push(cmd, 16);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 18);
if (barriers & NVK_BARRIER_INVALIDATE_TEX_DATA) {
if (pdev->info.cls_eng3d >= MAXWELL_A) {
@ -656,6 +660,10 @@ nvk_cmd_invalidate_deps(struct nvk_cmd_buffer *cmd,
}
}
if (barriers & NVK_BARRIER_INVALIDATE_RASTER_CACHE &&
dev->vk.enabled_features.pipelineFragmentShadingRate)
P_IMMD(p, NVC597, INVALIDATE_RASTER_CACHE_NO_WFI, 0);
if (barriers & (NVK_BARRIER_INVALIDATE_SHADER_DATA &
NVK_BARRIER_INVALIDATE_CONSTANT)) {
if (nvk_cmd_buffer_last_subchannel(cmd) == SUBC_NVA097) {