[Mesa-dev] [PATCH 01/22] intel/isl: Limit CCS to one subresource on gen7

Jason Ekstrand jason at jlekstrand.net
Tue May 2 21:48:09 UTC 2017


On Thu, Apr 27, 2017 at 11:32 AM, Nanley Chery <nanleychery at gmail.com>
wrote:

> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> ---
>  src/intel/isl/isl.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
> index f89f351c15..ce5b35c47c 100644
> --- a/src/intel/isl/isl.c
> +++ b/src/intel/isl/isl.c
> @@ -1610,14 +1610,19 @@ isl_surf_get_ccs_surf(const struct isl_device *dev,
>        return false;
>     }
>
> +   /* Multi-LOD and multi-layer CCS isn't supported on gen7. */
> +   const uint8_t levels = ISL_DEV_GEN(dev) == 7 ? 1 : surf->levels;
> +   const uint32_t array_len = ISL_DEV_GEN(dev) == 7 ?
> +                              1 : surf->logical_level0_px.array_len;
> +
>

The GL driver does

   if (brw->gen < 8 && (mip_mapped || arrayed))
      return false;

Which is a bit stronger condition.  I think this is probably ok though so
long as we're careful.

It might be worth adding the following asserts to blorp_fast_clear and
blorp_ccs_resolve:

assert(level < surf->aux_surf->levels);
if (surf->surf->dim == ISL_SURF_DIM_3D) {
   assert(start_layer < surf->aux_surf->logical_level0_px.depth);
   assert(start_layer + num_layers <
surf->aux_surf->logical_level0_px.depth);
} else {
   assert(start_layer < surf->aux_surf->logical_level0_px.array_len);
   assert(start_layer + num_layers <
surf->aux_surf->logical_level0_px.array_len);
}

That way we'll catch it if anyone ever tries to resolve/fast-clear a
miplevel or array slice that isn't there.

--Jason


>     return isl_surf_init(dev, ccs_surf,
>                          .dim = surf->dim,
>                          .format = ccs_format,
>                          .width = surf->logical_level0_px.width,
>                          .height = surf->logical_level0_px.height,
>                          .depth = surf->logical_level0_px.depth,
> -                        .levels = surf->levels,
> -                        .array_len = surf->logical_level0_px.array_len,
> +                        .levels = levels,
> +                        .array_len = array_len,
>                          .samples = 1,
>                          .usage = ISL_SURF_USAGE_CCS_BIT,
>                          .tiling_flags = ISL_TILING_CCS_BIT);
> --
> 2.12.2
>
> _______________________________________________
> 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/20170502/acb33d16/attachment.html>


More information about the mesa-dev mailing list