Module: Mesa Branch: main Commit: 62356e71f431684008efc7e471bddb1ada9801a3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=62356e71f431684008efc7e471bddb1ada9801a3
Author: Samuel Pitoiset <[email protected]> Date: Wed Nov 16 15:49:24 2022 +0100 radv: suspend/resume XFB queries with NGG for meta operations XFB queries enable primitives generated queries with NGG and meta operations shouldn't be counted. Reproduced on GFX10.3 by forcing NGG streamout. Cc: 22.3 mesa-stable Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19785> --- src/amd/vulkan/radv_meta.c | 12 ++++++++++++ src/amd/vulkan/radv_meta.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c index 95c3386280f..6c7969ea34b 100644 --- a/src/amd/vulkan/radv_meta.c +++ b/src/amd/vulkan/radv_meta.c @@ -62,6 +62,12 @@ radv_suspend_queries(struct radv_meta_saved_state *state, struct radv_cmd_buffer state->active_prims_gen_gds_queries = cmd_buffer->state.active_prims_gen_gds_queries; cmd_buffer->state.active_prims_gen_gds_queries = 0; } + + /* Transform feedback queries (NGG). */ + if (cmd_buffer->state.active_prims_xfb_gds_queries) { + state->active_prims_xfb_gds_queries = cmd_buffer->state.active_prims_xfb_gds_queries; + cmd_buffer->state.active_prims_xfb_gds_queries = 0; + } } static void @@ -90,6 +96,11 @@ radv_resume_queries(const struct radv_meta_saved_state *state, struct radv_cmd_b if (state->active_prims_gen_gds_queries) { cmd_buffer->state.active_prims_gen_gds_queries = state->active_prims_gen_gds_queries; } + + /* Transform feedback queries (NGG). */ + if (state->active_prims_xfb_gds_queries) { + cmd_buffer->state.active_prims_xfb_gds_queries = state->active_prims_xfb_gds_queries; + } } void @@ -106,6 +117,7 @@ radv_meta_save(struct radv_meta_saved_state *state, struct radv_cmd_buffer *cmd_ state->flags = flags; state->active_prims_gen_gds_queries = 0; + state->active_prims_xfb_gds_queries = 0; if (state->flags & RADV_META_SAVE_GRAPHICS_PIPELINE) { assert(!(state->flags & RADV_META_SAVE_COMPUTE_PIPELINE)); diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h index 8f555a7f871..8f00e8a9e09 100644 --- a/src/amd/vulkan/radv_meta.h +++ b/src/amd/vulkan/radv_meta.h @@ -56,6 +56,7 @@ struct radv_meta_saved_state { unsigned active_pipeline_gds_queries; unsigned active_prims_gen_gds_queries; + unsigned active_prims_xfb_gds_queries; bool predicating; };
