From 9d0532a669c162844f36d6f6ffd650f283609b0e Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Sun, 3 May 2026 15:31:40 +0200 Subject: [PATCH] nvk: use MME shadow RAM in nvk_meta begin/end We are going to conditionally change SET_ZPASS_PIXEL_COUNT and SET_STATISTICS_COUNTER in queries handling. To prepare for that we now use the MME shadow RAM to restore the previous state. Signed-off-by: Mary Guillemard Reviewed-by: Mel Henning --- src/nouveau/vulkan/nvk_cmd_meta.c | 37 +++++++++---------------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/src/nouveau/vulkan/nvk_cmd_meta.c b/src/nouveau/vulkan/nvk_cmd_meta.c index d58f2ca4df2..a1f79df3c7f 100644 --- a/src/nouveau/vulkan/nvk_cmd_meta.c +++ b/src/nouveau/vulkan/nvk_cmd_meta.c @@ -78,10 +78,9 @@ nvk_meta_begin(struct nvk_cmd_buffer *cmd, { const struct nvk_descriptor_state *desc = &cmd->state.gfx.descriptors; - struct nv_push *p = nvk_cmd_buffer_push(cmd, 6); - + struct nv_push *p = nvk_cmd_buffer_push(cmd, 10); + P_IMMD(p, NV9097, SET_MME_SHADOW_RAM_CONTROL, MODE_METHOD_PASSTHROUGH); P_IMMD(p, NV9097, SET_RENDER_ENABLE_OVERRIDE, MODE_ALWAYS_RENDER); - P_IMMD(p, NV9097, SET_STATISTICS_COUNTER, { .da_vertices_generated_enable = false, .da_primitives_generated_enable = false, @@ -99,8 +98,8 @@ nvk_meta_begin(struct nvk_cmd_buffer *cmd, .total_streaming_primitives_needed_succeeded_enable = false, .vtg_primitives_out_enable = false, }); - - P_IMMD(p, NV9097, SET_ZPASS_PIXEL_COUNT, false); + P_IMMD(p, NV9097, SET_ZPASS_PIXEL_COUNT, ENABLE_FALSE); + P_IMMD(p, NV9097, SET_MME_SHADOW_RAM_CONTROL, MODE_METHOD_TRACK_WITH_FILTER); save->dynamic = cmd->vk.dynamic_graphics_state; save->_dynamic_vi = cmd->state.gfx._dynamic_vi; @@ -189,29 +188,13 @@ nvk_meta_end(struct nvk_cmd_buffer *cmd, nvk_descriptor_state_set_root_array(cmd, desc, push, 0, sizeof(save->push), save->push); - struct nv_push *p = nvk_cmd_buffer_push(cmd, 6); - - P_IMMD(p, NV9097, SET_ZPASS_PIXEL_COUNT, true); - - P_IMMD(p, NV9097, SET_STATISTICS_COUNTER, { - .da_vertices_generated_enable = true, - .da_primitives_generated_enable = true, - .vs_invocations_enable = true, - .gs_invocations_enable = true, - .gs_primitives_generated_enable = true, - .streaming_primitives_succeeded_enable = true, - .streaming_primitives_needed_enable = true, - .clipper_invocations_enable = true, - .clipper_primitives_generated_enable = true, - .ps_invocations_enable = true, - .ti_invocations_enable = true, - .ts_invocations_enable = true, - .ts_primitives_generated_enable = true, - .total_streaming_primitives_needed_succeeded_enable = true, - .vtg_primitives_out_enable = true, - }); - + /* Replay the previous state from shadow RAM */ + struct nv_push *p = nvk_cmd_buffer_push(cmd, 10); + P_IMMD(p, NV9097, SET_MME_SHADOW_RAM_CONTROL, MODE_METHOD_REPLAY); + P_IMMD(p, NV9097, SET_ZPASS_PIXEL_COUNT, ENABLE_FALSE); + P_IMMD(p, NV9097, SET_STATISTICS_COUNTER, {}); P_IMMD(p, NV9097, SET_RENDER_ENABLE_OVERRIDE, MODE_USE_RENDER_ENABLE); + P_IMMD(p, NV9097, SET_MME_SHADOW_RAM_CONTROL, MODE_METHOD_TRACK_WITH_FILTER); } VKAPI_ATTR void VKAPI_CALL