Mesa (main): zink: clear textures directly when possible
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Jun 22 19:48:59 UTC 2021
Module: Mesa
Branch: main
Commit: 7eb3728e4b50fba5cbfc6e5bd1b8cffb807ba50b
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7eb3728e4b50fba5cbfc6e5bd1b8cffb807ba50b
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Thu Apr 15 12:18:35 2021 -0400
zink: clear textures directly when possible
now that overhead for resuming renderpasses has been made mostly nonexistent,
this is by far the better option and cuts cpu usage by ~90% in some cases,
e.g., tomb raider benchmark
Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11430>
---
src/gallium/drivers/zink/zink_clear.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_clear.c b/src/gallium/drivers/zink/zink_clear.c
index 21d5b342f4a..09be568af58 100644
--- a/src/gallium/drivers/zink/zink_clear.c
+++ b/src/gallium/drivers/zink/zink_clear.c
@@ -380,7 +380,6 @@ zink_clear_texture(struct pipe_context *pctx,
struct pipe_screen *pscreen = pctx->screen;
struct u_rect region = zink_rect_from_box(box);
bool needs_rp = !zink_blit_region_fills(region, pres->width0, pres->height0) || ctx->render_condition_active;
- struct zink_batch *batch = &ctx->batch;
struct pipe_surface *surf = NULL;
if (res->aspect & VK_IMAGE_ASPECT_COLOR_BIT) {
@@ -389,7 +388,8 @@ zink_clear_texture(struct pipe_context *pctx,
util_format_unpack_rgba(pres->format, color.ui, data, 1);
if (pscreen->is_format_supported(pscreen, pres->format, pres->target, 0, 0,
- PIPE_BIND_RENDER_TARGET) && !needs_rp && !batch->in_rp) {
+ PIPE_BIND_RENDER_TARGET) && !needs_rp) {
+ zink_batch_no_rp(ctx);
clear_color_no_rp(ctx, res, &color, level, box->z, box->depth);
} else {
surf = create_clear_surface(pctx, pres, level, box);
@@ -408,9 +408,10 @@ zink_clear_texture(struct pipe_context *pctx,
if (res->aspect & VK_IMAGE_ASPECT_STENCIL_BIT)
util_format_unpack_s_8uint(pres->format, &stencil, data, 1);
- if (!needs_rp && !batch->in_rp)
+ if (!needs_rp) {
+ zink_batch_no_rp(ctx);
clear_zs_no_rp(ctx, res, res->aspect, depth, stencil, level, box->z, box->depth);
- else {
+ } else {
unsigned flags = 0;
if (res->aspect & VK_IMAGE_ASPECT_DEPTH_BIT)
flags |= PIPE_CLEAR_DEPTH;
More information about the mesa-commit
mailing list