[Mesa-dev] [PATCH v2 17/32] intel/blorp: Adjust the compressed copy rectangle before convert_to_single_slice

Pohjolainen, Topi topi.pohjolainen at gmail.com
Wed Nov 7 16:33:19 UTC 2018


On Fri, Oct 12, 2018 at 01:46:47PM -0500, Jason Ekstrand wrote:
> It doesn't matter for the actual copy rectangle and this makes the
> asserts a bit nicer as we don't need to bother with the intratile
> offsets because there aren't any yet.

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

> ---
>  src/intel/blorp/blorp_blit.c | 29 +++++++++++++++--------------
>  1 file changed, 15 insertions(+), 14 deletions(-)
> 
> diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c
> index 0ba08d95555..dd43b8643b9 100644
> --- a/src/intel/blorp/blorp_blit.c
> +++ b/src/intel/blorp/blorp_blit.c
> @@ -2454,22 +2454,16 @@ blorp_surf_convert_to_uncompressed(const struct isl_device *isl_dev,
>  
>     assert(fmtl->bw > 1 || fmtl->bh > 1);
>  
> -   /* This is a compressed surface.  We need to convert it to a single
> -    * slice (because compressed layouts don't perfectly match uncompressed
> -    * ones with the same bpb) and divide x, y, width, and height by the
> -    * block size.
> -    */
> -   blorp_surf_convert_to_single_slice(isl_dev, info);
> +   /* This should be the first modification made to the surface */
> +   assert(info->tile_x_sa == 0 && info->tile_y_sa == 0);
>  
>     if (width && height) {
> -#ifndef NDEBUG
> -      uint32_t right_edge_px = info->tile_x_sa + *x + *width;
> -      uint32_t bottom_edge_px = info->tile_y_sa + *y + *height;
> -      assert(*width % fmtl->bw == 0 ||
> -             right_edge_px == info->surf.logical_level0_px.width);
> -      assert(*height % fmtl->bh == 0 ||
> -             bottom_edge_px == info->surf.logical_level0_px.height);
> -#endif
> +      UNUSED const uint32_t level_width =
> +         minify(info->surf.logical_level0_px.width, info->view.base_level);
> +      UNUSED const uint32_t level_height =
> +         minify(info->surf.logical_level0_px.height, info->view.base_level);
> +      assert(*width % fmtl->bw == 0 || *x + *width == level_width);
> +      assert(*height % fmtl->bh == 0 || *y + *height == level_height);
>        *width = DIV_ROUND_UP(*width, fmtl->bw);
>        *height = DIV_ROUND_UP(*height, fmtl->bh);
>     }
> @@ -2481,6 +2475,13 @@ blorp_surf_convert_to_uncompressed(const struct isl_device *isl_dev,
>        *y /= fmtl->bh;
>     }
>  
> +   /* This is a compressed surface.  We need to convert it to a single
> +    * slice (because compressed layouts don't perfectly match uncompressed
> +    * ones with the same bpb) and divide x, y, width, and height by the
> +    * block size.
> +    */
> +   blorp_surf_convert_to_single_slice(isl_dev, info);
> +
>     info->surf.logical_level0_px.width =
>        DIV_ROUND_UP(info->surf.logical_level0_px.width, fmtl->bw);
>     info->surf.logical_level0_px.height =
> -- 
> 2.19.1
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list