aux/tc: add a function to reset rp info

drivers should be maintaining a local copy of the rp info, and this
provides a consistent way to reset that info if a renderpass is ended
early

Acked-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21800>
This commit is contained in:
Mike Blumenkrantz
2023-03-13 07:40:03 -04:00
committed by Marge Bot
parent 4a5d3590d6
commit 1a9ba0aaa3
2 changed files with 19 additions and 7 deletions
@@ -487,6 +487,23 @@ tc_renderpass_info_is_zsbuf_used(const struct tc_renderpass_info *info)
info->zsbuf_fbfetch;
}
/* if a driver ends a renderpass early for some reason,
* this function can be called to reset any stored renderpass info
* to a "safe" state that will avoid data loss on framebuffer attachments
*
* note: ending a renderpass early if invalidate hints are applied will
* result in data loss
*/
static inline void
tc_renderpass_info_reset(struct tc_renderpass_info *info)
{
info->data32[0] = 0;
info->cbuf_load = BITFIELD_MASK(8);
info->zsbuf_clear_partial = true;
info->has_draw = true;
info->has_query_ends = true;
}
struct tc_batch {
struct threaded_context *tc;
#if !defined(NDEBUG) && TC_DEBUG >= 1
+2 -7
View File
@@ -2816,13 +2816,8 @@ zink_batch_no_rp(struct zink_context *ctx)
{
if (!ctx->batch.in_rp)
return;
if (zink_screen(ctx->base.screen)->driver_workarounds.track_renderpasses && !ctx->blitting) {
ctx->dynamic_fb.tc_info.data = 0;
ctx->dynamic_fb.tc_info.cbuf_load = BITFIELD_MASK(8);
ctx->dynamic_fb.tc_info.zsbuf_clear_partial = true;
ctx->dynamic_fb.tc_info.has_draw = true;
ctx->dynamic_fb.tc_info.has_query_ends = true;
}
if (zink_screen(ctx->base.screen)->driver_workarounds.track_renderpasses && !ctx->blitting)
tc_renderpass_info_reset(&ctx->dynamic_fb.tc_info);
zink_batch_no_rp_safe(ctx);
}