<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Oct 30, 2017 at 10:37 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"><div class="HOEnZb"><div class="h5">On Fri, Oct 27, 2017 at 05:14:16PM -0700, Jason Ekstrand wrote:<br>
> On Fri, Oct 27, 2017 at 3:16 PM, Nanley Chery <<a href="mailto:nanleychery@gmail.com">nanleychery@gmail.com</a>> wrote:<br>
><br>
> > On Fri, Oct 27, 2017 at 12:52:30PM -0700, Jason Ekstrand wrote:<br>
> > > On Fri, Oct 27, 2017 at 12:24 PM, Nanley Chery <<a href="mailto:nanleychery@gmail.com">nanleychery@gmail.com</a>><br>
> > > wrote:<br>
> > ><br>
> > > > Only use CCS_E to render to a texture that is CCS_E-compatible with the<br>
> > > > original texture's miptree (linear) format. This prevents render<br>
> > > > operations from writing data that can't be decoded with the original<br>
> > > > miptree format.<br>
> > > ><br>
> > > > On Gen10, with the new CCS_E-enabled formats handled, this enables the<br>
> > > > driver to pass the arb_texture_view-rendering-<wbr>formats piglit test.<br>
> > > ><br>
> > > > Cc: <<a href="mailto:mesa-stable@lists.freedesktop.org">mesa-stable@lists.<wbr>freedesktop.org</a>><br>
> > > > Signed-off-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
> > > > ---<br>
> > > >  src/mesa/drivers/dri/i965/<wbr>intel_mipmap_tree.c | 28<br>
> > > > +++++++++++++++++++++++++--<br>
> > > >  1 file changed, 26 insertions(+), 2 deletions(-)<br>
> > > ><br>
> > > > diff --git a/src/mesa/drivers/dri/i965/<wbr>intel_mipmap_tree.c<br>
> > > > b/src/mesa/drivers/dri/i965/<wbr>intel_mipmap_tree.c<br>
> > > > index a850f4d17b..59c57c227b 100644<br>
> > > > --- a/src/mesa/drivers/dri/i965/<wbr>intel_mipmap_tree.c<br>
> > > > +++ b/src/mesa/drivers/dri/i965/<wbr>intel_mipmap_tree.c<br>
> > > > @@ -241,6 +241,27 @@ intel_miptree_supports_hiz(<wbr>const struct<br>
> > brw_context<br>
> > > > *brw,<br>
> > > >     }<br>
> > > >  }<br>
> > > ><br>
> > > > +/**<br>
> > > > + * Return true if the format that will be used to access the miptree<br>
> > is<br>
> > > > + * CCS_E-compatible with the miptree's linear/non-sRGB format.<br>
> > > > + *<br>
> > > > + * Why use the linear format? Well, although the miptree may be<br>
> > specified<br>
> > > > with<br>
> > > > + * an sRGB format, the usage of that color space/format can be<br>
> > toggled.<br>
> > > > Since<br>
> > > > + * our HW tends to support more linear formats than sRGB ones, we use<br>
> > this<br>
> > > > + * format variant for check for CCS_E compatibility.<br>
> > > > + */<br>
> > > > +static bool<br>
> > > > +format_ccs_e_compat_with_<wbr>miptree(const struct gen_device_info<br>
> > *devinfo,<br>
> > > > +                                 const struct intel_mipmap_tree *mt,<br>
> > > > +                                 enum isl_format access_format)<br>
> > > > +{<br>
> > > > +   assert(mt->aux_usage == ISL_AUX_USAGE_CCS_E);<br>
> > > > +<br>
> > > > +   mesa_format linear_format = _mesa_get_srgb_format_linear(<br>
> > mt->format);<br>
> > > > +   enum isl_format isl_format = brw_isl_format_for_mesa_<br>
> > > > format(linear_format);<br>
> > > > +   return isl_formats_are_ccs_e_<wbr>compatible(devinfo, isl_format,<br>
> > > > access_format);<br>
> > > > +}<br>
> > > > +<br>
> > > >  static bool<br>
> > > >  intel_miptree_supports_ccs_e(<wbr>struct brw_context *brw,<br>
> > > >                               const struct intel_mipmap_tree *mt)<br>
> > > > @@ -2662,8 +2683,11 @@ intel_miptree_render_aux_<wbr>usage(struct<br>
> > brw_context<br>
> > > > *brw,<br>
> > > >        return mt->mcs_buf ? ISL_AUX_USAGE_CCS_D : ISL_AUX_USAGE_NONE;<br>
> > > ><br>
> > > >     case ISL_AUX_USAGE_CCS_E: {<br>
> > > > -      /* If the format supports CCS_E, then we can just use it */<br>
> > > > -      if (isl_format_supports_ccs_e(&<wbr>brw->screen->devinfo,<br>
> > > > render_format))<br>
> > > > +      /* If the format supports CCS_E and is compatible with the<br>
> > miptree,<br>
> > > > +       * then we can use it.<br>
> > > > +       */<br>
> > > > +      if (format_ccs_e_compat_with_<wbr>miptree(&brw->screen->devinfo,<br>
> > > > +                                           mt, render_format))<br>
> > > ><br>
> > ><br>
> > > You don't need the helper if you just use mt->surf.format.  That's what<br>
> > > can_texture_with_ccs does.<br>
> > ><br>
> > ><br>
> ><br>
> > Isn't using mt->surf.format making the code more restrictive than<br>
> > necessary? That field may give you the sRGB format of the surface, but<br>
> > the helper would always give you the linear variant. Therefore the<br>
> > helper allows for CCS_E to be used in more cases.<br>
> ><br>
><br>
> You're right.  I completely missed that.  In that case, we probably want to<br>
> use your helper for can_texture_with_ccs as well.  Maybe two patches: one<br>
> which adds the helper and makes can_texture_with_ccs use it and a second to<br>
> add the render target stuff?  Or you can keep this one as-is and do<br>
> can_texture_with_ccs as a follow-on, I don't really care.<br>
<br>
</div></div>I'm assuming I have your Rb? I'm thinking of keeping this one as-is. I<br>
tried modifying can_texture_with_ccs to use the helper before sending<br>
the patch out, but it caused one GLES3.1 test to fail and I couldn't<br>
figure out why (on jenkins, nchery build#249).<br>
<br>
dEQP-GLES31.functional.srgb_<wbr>texture_decode.skip_decode.<wbr>srgba8.texel_fetch<br>
<br>
Since this patch is needed for correctness and the other is more of a<br>
performance enhancement, I figured we could get to it later. Any ideas<br>
would be appreciated though.<br>
</blockquote></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">Yuck... Yeah, I think this is probably fine.  It might be good to move the format_ccs_e_compat_with_miptree helper up a little higher so we can use it with texturing and maybe leave a Todo.  But yeah, R-B.</div><div class="gmail_extra"><br></div><div class="gmail_extra">--Jason<br></div></div>