<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, May 11, 2017 at 11:00 AM, Nanley Chery <span dir="ltr"><<a href="mailto:nanleychery@gmail.com" target="_blank">nanleychery@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, May 02, 2017 at 02:48:09PM -0700, Jason Ekstrand wrote:<br>
> On Thu, Apr 27, 2017 at 11:32 AM, Nanley Chery <<a href="mailto:nanleychery@gmail.com">nanleychery@gmail.com</a>><br>
> wrote:<br>
><br>
> > Signed-off-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
> > ---<br>
> >  src/intel/isl/isl.c | 9 +++++++--<br>
> >  1 file changed, 7 insertions(+), 2 deletions(-)<br>
> ><br>
> > diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c<br>
> > index f89f351c15..ce5b35c47c 100644<br>
> > --- a/src/intel/isl/isl.c<br>
> > +++ b/src/intel/isl/isl.c<br>
> > @@ -1610,14 +1610,19 @@ isl_surf_get_ccs_surf(const struct isl_device *dev,<br>
> >        return false;<br>
> >     }<br>
> ><br>
> > +   /* Multi-LOD and multi-layer CCS isn't supported on gen7. */<br>
> > +   const uint8_t levels = ISL_DEV_GEN(dev) == 7 ? 1 : surf->levels;<br>
> > +   const uint32_t array_len = ISL_DEV_GEN(dev) == 7 ?<br>
> > +                              1 : surf->logical_level0_px.array_<wbr>len;<br>
> > +<br>
> ><br>
><br>
> The GL driver does<br>
><br>
>    if (brw->gen < 8 && (mip_mapped || arrayed))<br>
>       return false;<br>
><br>
> Which is a bit stronger condition.  I think this is probably ok though so<br>
> long as we're careful.<br>
><br>
<br>
</span>I actually prefer the above condition because it would remove the need<br>
for the helper functions.<br>
<br>
I went with the current implementation to avoid losing more pre-existing<br>
performance features than necessary. I don't know how useful it is for<br>
us to retain the feature of fast-clearing LOD0 of multi-LOD and<br>
multi-layer CCS images on gen7.<span class=""><br></span></blockquote><div><br></div><div>I'm not terribly concerned about that case.  It's kind-of a nice to support it since the hardware obviously can, but I don't think it's necessary.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
> It might be worth adding the following asserts to blorp_fast_clear and<br>
> blorp_ccs_resolve:<br>
><br>
> assert(level < surf->aux_surf->levels);<br>
> if (surf->surf->dim == ISL_SURF_DIM_3D) {<br>
>    assert(start_layer < surf->aux_surf->logical_<wbr>level0_px.depth);<br>
>    assert(start_layer + num_layers <<br>
> surf->aux_surf->logical_<wbr>level0_px.depth);<br>
> } else {<br>
>    assert(start_layer < surf->aux_surf->logical_<wbr>level0_px.array_len);<br>
>    assert(start_layer + num_layers <<br>
> surf->aux_surf->logical_<wbr>level0_px.array_len);<br>
> }<br>
><br>
> That way we'll catch it if anyone ever tries to resolve/fast-clear a<br>
> miplevel or array slice that isn't there.<br>
><br>
> --Jason<br>
><br>
><br>
<br>
</span>Adding asserts to catch this is a good idea. I've locally put some in<br>
brw_blorp_surface_info_init and ported the one from blorp_ccs_resolve to<br>
blorp_ccs_fast_clear.<br>
</blockquote></div><br></div></div>