From: Brian Paul Date: Wed, 8 Jun 2016 20:36:08 +0000 (-0600) Subject: gallium/util: new util_try_blit_via_copy_region() function X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5d31ea4b8faf011e855fa056186e1205bf5abcf1;p=mesa.git gallium/util: new util_try_blit_via_copy_region() function Pulled out of the util_try_blit_via_copy_region() function. Subsequent changes build on this. Reviewed-by: Marek Olšák Reviewed-by: Roland Scheidegger Reviewed-by: Charmaine Lee --- diff --git a/src/gallium/auxiliary/util/u_surface.c b/src/gallium/auxiliary/util/u_surface.c index 8408aa8e425..8d22bcfeb11 100644 --- a/src/gallium/auxiliary/util/u_surface.c +++ b/src/gallium/auxiliary/util/u_surface.c @@ -686,18 +686,9 @@ get_sample_count(const struct pipe_resource *res) return res->nr_samples ? res->nr_samples : 1; } -/** - * Try to do a blit using resource_copy_region. The function calls - * resource_copy_region if the blit description is compatible with it. - * - * It returns TRUE if the blit was done using resource_copy_region. - * - * It returns FALSE otherwise and the caller must fall back to a more generic - * codepath for the blit operation. (e.g. by using u_blitter) - */ + boolean -util_try_blit_via_copy_region(struct pipe_context *ctx, - const struct pipe_blit_info *blit) +util_can_blit_via_copy_region(const struct pipe_blit_info *blit) { unsigned mask = util_format_get_mask(blit->dst.format); @@ -748,9 +739,32 @@ util_try_blit_via_copy_region(struct pipe_context *ctx, if (blit->alpha_blend) return FALSE; - ctx->resource_copy_region(ctx, blit->dst.resource, blit->dst.level, - blit->dst.box.x, blit->dst.box.y, blit->dst.box.z, - blit->src.resource, blit->src.level, - &blit->src.box); return TRUE; } + + +/** + * Try to do a blit using resource_copy_region. The function calls + * resource_copy_region if the blit description is compatible with it. + * + * It returns TRUE if the blit was done using resource_copy_region. + * + * It returns FALSE otherwise and the caller must fall back to a more generic + * codepath for the blit operation. (e.g. by using u_blitter) + */ +boolean +util_try_blit_via_copy_region(struct pipe_context *ctx, + const struct pipe_blit_info *blit) +{ + if (util_can_blit_via_copy_region(blit)) { + ctx->resource_copy_region(ctx, blit->dst.resource, blit->dst.level, + blit->dst.box.x, blit->dst.box.y, + blit->dst.box.z, + blit->src.resource, blit->src.level, + &blit->src.box); + return TRUE; + } + else { + return FALSE; + } +} diff --git a/src/gallium/auxiliary/util/u_surface.h b/src/gallium/auxiliary/util/u_surface.h index bfd8f40d107..bda2e1e9243 100644 --- a/src/gallium/auxiliary/util/u_surface.h +++ b/src/gallium/auxiliary/util/u_surface.h @@ -98,6 +98,9 @@ util_clear_depth_stencil(struct pipe_context *pipe, unsigned dstx, unsigned dsty, unsigned width, unsigned height); +boolean +util_can_blit_via_copy_region(const struct pipe_blit_info *blit); + extern boolean util_try_blit_via_copy_region(struct pipe_context *ctx, const struct pipe_blit_info *blit);