From 79861e3d88b5e1edb47cf412908ff0053b5b8736 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 4 Sep 2020 12:01:50 -0400 Subject: [PATCH] zink: break out even more of zink_blit state saving for reuse in upcoming clear refactoring Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_blit.c | 28 ++++++++++++++----------- src/gallium/drivers/zink/zink_context.h | 1 + 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/gallium/drivers/zink/zink_blit.c b/src/gallium/drivers/zink/zink_blit.c index 90008e08fd5..1de31d25221 100644 --- a/src/gallium/drivers/zink/zink_blit.c +++ b/src/gallium/drivers/zink/zink_blit.c @@ -210,18 +210,7 @@ zink_blit(struct pipe_context *pctx, if (info->dst.resource->target == PIPE_BUFFER) util_range_add(info->dst.resource, &dst->valid_buffer_range, info->dst.box.x, info->dst.box.x + info->dst.box.width); - util_blitter_save_vertex_elements(ctx->blitter, ctx->element_state); - util_blitter_save_viewport(ctx->blitter, ctx->viewport_states); - - util_blitter_save_fragment_sampler_states(ctx->blitter, - ctx->num_samplers[PIPE_SHADER_FRAGMENT], - ctx->sampler_states[PIPE_SHADER_FRAGMENT]); - util_blitter_save_fragment_sampler_views(ctx->blitter, - ctx->num_sampler_views[PIPE_SHADER_FRAGMENT], - ctx->sampler_views[PIPE_SHADER_FRAGMENT]); - util_blitter_save_fragment_constant_buffer_slot(ctx->blitter, ctx->ubos[PIPE_SHADER_FRAGMENT]); - util_blitter_save_vertex_buffer_slot(ctx->blitter, ctx->buffers); - zink_blit_begin(ctx, ZINK_BLIT_SAVE_FB | ZINK_BLIT_SAVE_FS); + zink_blit_begin(ctx, ZINK_BLIT_SAVE_FB | ZINK_BLIT_SAVE_FS | ZINK_BLIT_SAVE_TEXTURES); util_blitter_blit(ctx->blitter, info); } @@ -230,6 +219,10 @@ zink_blit(struct pipe_context *pctx, void zink_blit_begin(struct zink_context *ctx, enum zink_blit_flags flags) { + util_blitter_save_vertex_elements(ctx->blitter, ctx->element_state); + util_blitter_save_viewport(ctx->blitter, ctx->viewport_states); + + util_blitter_save_vertex_buffer_slot(ctx->blitter, ctx->buffers); util_blitter_save_vertex_shader(ctx->blitter, ctx->gfx_stages[PIPE_SHADER_VERTEX]); util_blitter_save_tessctrl_shader(ctx->blitter, ctx->gfx_stages[PIPE_SHADER_TESS_CTRL]); util_blitter_save_tesseval_shader(ctx->blitter, ctx->gfx_stages[PIPE_SHADER_TESS_EVAL]); @@ -238,6 +231,7 @@ zink_blit_begin(struct zink_context *ctx, enum zink_blit_flags flags) util_blitter_save_so_targets(ctx->blitter, ctx->num_so_targets, ctx->so_targets); if (flags & ZINK_BLIT_SAVE_FS) { + util_blitter_save_fragment_constant_buffer_slot(ctx->blitter, ctx->ubos[PIPE_SHADER_FRAGMENT]); util_blitter_save_blend(ctx->blitter, ctx->gfx_pipeline_state.blend_state); util_blitter_save_depth_stencil_alpha(ctx->blitter, ctx->dsa_state); util_blitter_save_stencil_ref(ctx->blitter, &ctx->stencil_ref); @@ -250,4 +244,14 @@ zink_blit_begin(struct zink_context *ctx, enum zink_blit_flags flags) if (flags & ZINK_BLIT_SAVE_FB) util_blitter_save_framebuffer(ctx->blitter, &ctx->fb_state); + + + if (flags & ZINK_BLIT_SAVE_TEXTURES) { + util_blitter_save_fragment_sampler_states(ctx->blitter, + ctx->num_samplers[PIPE_SHADER_FRAGMENT], + ctx->sampler_states[PIPE_SHADER_FRAGMENT]); + util_blitter_save_fragment_sampler_views(ctx->blitter, + ctx->num_sampler_views[PIPE_SHADER_FRAGMENT], + ctx->sampler_views[PIPE_SHADER_FRAGMENT]); + } } diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h index 2054b2cc8df..d8d8d8691c3 100644 --- a/src/gallium/drivers/zink/zink_context.h +++ b/src/gallium/drivers/zink/zink_context.h @@ -51,6 +51,7 @@ enum zink_blit_flags { ZINK_BLIT_NORMAL = 1 << 0, ZINK_BLIT_SAVE_FS = 1 << 1, ZINK_BLIT_SAVE_FB = 1 << 2, + ZINK_BLIT_SAVE_TEXTURES = 1 << 3, }; struct zink_sampler_view {