[Mesa-dev] [PATCH 09/15] i965: Prepare slice copy for isl based miptrees

Jason Ekstrand jason at jlekstrand.net
Thu Jun 15 18:39:44 UTC 2017


On Tue, Jun 13, 2017 at 7:50 AM, Topi Pohjolainen <
topi.pohjolainen at gmail.com> wrote:

> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 28
> +++++++++++++++++++++------
>  1 file changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index f44bac988f..c81d345fbc 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -1294,7 +1294,8 @@ intel_miptree_copy_slice_sw(struct brw_context *brw,
>  {
>     void *src, *dst;
>     ptrdiff_t src_stride, dst_stride;
> -   int cpp = dst_mt->cpp;
> +   const unsigned cpp = dst_mt->surf.size > 0 ?
> +      (isl_format_get_layout(dst_mt->surf.format)->bpb / 8) :
> dst_mt->cpp;
>
>     intel_miptree_map(brw, src_mt,
>                       src_level, src_layer,
> @@ -1355,13 +1356,28 @@ intel_miptree_copy_slice(struct brw_context *brw,
>                           unsigned dst_level, unsigned dst_layer)
>
>  {
> -   uint32_t width = minify(src_mt->physical_width0,
> -                           src_level - src_mt->first_level);
> -   uint32_t height = minify(src_mt->physical_height0,
> -                            src_level - src_mt->first_level);
>     mesa_format format = src_mt->format;
> +   uint32_t width, height;
> +
> +   if (src_mt->surf.size > 0) {
> +      width = minify(src_mt->surf.phys_level0_sa.width,
> +                     src_level - src_mt->first_level);
> +      height = minify(src_mt->surf.phys_level0_sa.height,
> +                      src_level - src_mt->first_level);
> +
> +      const unsigned level_depth = src_mt->surf.dim == ISL_SURF_DIM_3D ?
>

This needs a MAYBE_UNUSED or else we'll get warnings in release builds.
Another option would be to do

if (src_mt->surf.dim == ISL_SURF_DIM_3D)
   assert(src_layer < minify());
else
   assert(src_layer < src_mt->surf.phys_level0_sa.array_len);

I think that would actually be better.


> +         minify(src_mt->surf.phys_level0_sa.depth,
> +                src_level - src_mt->first_level) :
> +         src_mt->surf.phys_level0_sa.array_len;
> +      assert(src_layer < level_depth);
> +   } else {
> +      width = minify(src_mt->physical_width0,
> +                     src_level - src_mt->first_level);
> +      height = minify(src_mt->physical_height0,
> +                      src_level - src_mt->first_level);
> +      assert(src_layer < src_mt->level[src_level].depth);
> +   }
>
> -   assert(src_layer < src_mt->level[src_level].depth);
>     assert(src_mt->format == dst_mt->format);
>
>     if (dst_mt->compressed) {
> --
> 2.11.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170615/cb1954d8/attachment.html>


More information about the mesa-dev mailing list