tc: optimize out tracked winsys resolves
drivers using renderpass tracking can rely on having pipe_framebuffer_state::resolve + tc_info::has_resolve to indicate a winsys blit, which means they don't actually need the blit call Acked-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30772>
This commit is contained in:

committed by
Marge Bot

parent
3b198d5392
commit
68a631947f
@@ -4532,24 +4532,27 @@ static void
|
||||
tc_blit(struct pipe_context *_pipe, const struct pipe_blit_info *info)
|
||||
{
|
||||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
tc_blit_enqueue(tc, info);
|
||||
|
||||
/* filter out untracked non-resolves */
|
||||
if (!tc->options.parse_renderpass_info ||
|
||||
info->src.resource->nr_samples <= 1 ||
|
||||
info->dst.resource->nr_samples > 1)
|
||||
info->dst.resource->nr_samples > 1) {
|
||||
tc_blit_enqueue(tc, info);
|
||||
return;
|
||||
}
|
||||
|
||||
if (tc->fb_resolve == info->dst.resource) {
|
||||
/* optimize out this blit entirely */
|
||||
tc->renderpass_info_recording->has_resolve = true;
|
||||
} else {
|
||||
for (unsigned i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
|
||||
if (tc->fb_resources[i] == info->src.resource) {
|
||||
tc->renderpass_info_recording->has_resolve = true;
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (unsigned i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
|
||||
if (tc->fb_resources[i] == info->src.resource) {
|
||||
tc->renderpass_info_recording->has_resolve = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
tc_blit_enqueue(tc, info);
|
||||
}
|
||||
|
||||
struct tc_generate_mipmap {
|
||||
|
Reference in New Issue
Block a user