diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c index 55957eaee3f..11873774d08 100644 --- a/src/gallium/drivers/radeonsi/si_blit.c +++ b/src/gallium/drivers/radeonsi/si_blit.c @@ -1026,7 +1026,7 @@ static bool resolve_formats_compatible(enum pipe_format src, enum pipe_format ds return *need_rgb_to_bgr; } -static bool si_msaa_resolve_blit_via_CB(struct pipe_context *ctx, const struct pipe_blit_info *info) +bool si_msaa_resolve_blit_via_CB(struct pipe_context *ctx, const struct pipe_blit_info *info) { struct si_context *sctx = (struct si_context *)ctx; @@ -1043,6 +1043,10 @@ static bool si_msaa_resolve_blit_via_CB(struct pipe_context *ctx, const struct p struct pipe_resource *tmp, templ; struct pipe_blit_info blit; + /* Gfx11 doesn't have CB_RESOLVE. */ + if (sctx->gfx_level >= GFX11) + return false; + /* Check basic requirements for hw resolve. */ if (!(info->src.resource->nr_samples > 1 && info->dst.resource->nr_samples <= 1 && !util_format_is_pure_integer(format) && !util_format_is_depth_or_stencil(format) && @@ -1215,6 +1219,13 @@ static void si_blit(struct pipe_context *ctx, const struct pipe_blit_info *info) return; } + si_gfx_blit(ctx, info); +} + +void si_gfx_blit(struct pipe_context *ctx, const struct pipe_blit_info *info) +{ + struct si_context *sctx = (struct si_context *)ctx; + assert(util_blitter_is_blit_supported(sctx->blitter, info)); /* The driver doesn't decompress resources automatically while diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index dc87a831279..05668b1ae0b 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -1336,6 +1336,8 @@ void si_resource_copy_region(struct pipe_context *ctx, struct pipe_resource *dst const struct pipe_box *src_box); void si_decompress_dcc(struct si_context *sctx, struct si_texture *tex); void si_flush_implicit_resources(struct si_context *sctx); +bool si_msaa_resolve_blit_via_CB(struct pipe_context *ctx, const struct pipe_blit_info *info); +void si_gfx_blit(struct pipe_context *ctx, const struct pipe_blit_info *info); /* si_nir_optim.c */ bool si_nir_is_output_const_if_tex_is_const(nir_shader *shader, float *in, float *out, int *texunit);