diff --git a/.pick_status.json b/.pick_status.json index 87312777bb8..461d46d5684 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2234,7 +2234,7 @@ "description": "aux/tc: fix rp info handling around tc_sync calls", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "07017aa137b9fa48ec25ef5d1e3fd2d137beb651", "notes": null diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c index 0e949823f03..a396324396d 100644 --- a/src/gallium/auxiliary/util/u_threaded_context.c +++ b/src/gallium/auxiliary/util/u_threaded_context.c @@ -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; }