From d7c64ffcb8a55549d4d638eb7de7b21af4077a3f Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 2 Sep 2022 10:25:35 -0400 Subject: [PATCH] zink: split up get_clear_data() make the array extension part reusable cc: mesa-stable Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_clear.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/zink/zink_clear.c b/src/gallium/drivers/zink/zink_clear.c index 9843770059e..bdcc193d7b9 100644 --- a/src/gallium/drivers/zink/zink_clear.c +++ b/src/gallium/drivers/zink/zink_clear.c @@ -116,23 +116,25 @@ clear_in_rp(struct pipe_context *pctx, ctx->base.texture_barrier(&ctx->base, PIPE_TEXTURE_BARRIER_FRAMEBUFFER); } +static struct zink_framebuffer_clear_data * +add_new_clear(struct zink_framebuffer_clear *fb_clear) +{ + struct zink_framebuffer_clear_data cd = {0}; + util_dynarray_append(&fb_clear->clears, struct zink_framebuffer_clear_data, cd); + return zink_fb_clear_element(fb_clear, zink_fb_clear_count(fb_clear) - 1); +} + static struct zink_framebuffer_clear_data * get_clear_data(struct zink_context *ctx, struct zink_framebuffer_clear *fb_clear, const struct pipe_scissor_state *scissor_state) { - struct zink_framebuffer_clear_data *clear = NULL; unsigned num_clears = zink_fb_clear_count(fb_clear); if (num_clears) { struct zink_framebuffer_clear_data *last_clear = zink_fb_clear_element(fb_clear, num_clears - 1); /* if we're completely overwriting the previous clear, merge this into the previous clear */ if (!scissor_state || (last_clear->has_scissor && scissor_states_equal(&last_clear->scissor, scissor_state))) - clear = last_clear; + return last_clear; } - if (!clear) { - struct zink_framebuffer_clear_data cd = {0}; - util_dynarray_append(&fb_clear->clears, struct zink_framebuffer_clear_data, cd); - clear = zink_fb_clear_element(fb_clear, zink_fb_clear_count(fb_clear) - 1); - } - return clear; + return add_new_clear(fb_clear); } static void