aux/tc: fix rp info handling around tc_sync calls

if a set_framebuffer_state call has occurred but no draws have been
triggered, the rp info must be preserved for the driver to (eventually)
use after the sync

Fixes: 07017aa137 ("util/tc: implement renderpass tracking")

Acked-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25227>
This commit is contained in:
Mike Blumenkrantz 2023-09-14 11:40:29 -04:00 committed by Marge Bot
parent c9b7639a7d
commit 81dd39de01

View file

@ -695,8 +695,13 @@ _tc_sync(struct threaded_context *tc, UNUSED const char *info, UNUSED const char
if (tc->options.parse_renderpass_info) {
int renderpass_info_idx = next->renderpass_info_idx;
if (renderpass_info_idx > 0) {
/* don't reset if fb state is unflushed */
bool fb_no_draw = tc->seen_fb_state && !tc->renderpass_info_recording->has_draw;
uint32_t fb_info = tc->renderpass_info_recording->data32[0];
next->renderpass_info_idx = -1;
tc_batch_increment_renderpass_info(tc, tc->next, false);
if (fb_no_draw)
tc->renderpass_info_recording->data32[0] = fb_info;
} else if (tc->renderpass_info_recording->has_draw) {
tc->renderpass_info_recording->data32[0] = 0;
}