[Mesa-dev] [PATCH 6/9] isl: Validate the calculated row pitch (v2)

Jason Ekstrand jason at jlekstrand.net
Fri Mar 24 21:37:50 UTC 2017


On Fri, Mar 24, 2017 at 11:10 AM, Chad Versace <chadversary at chromium.org>
wrote:

> On Thu 23 Mar 2017, Jason Ekstrand wrote:
> > On Wed, Mar 22, 2017 at 6:04 PM, Chad Versace <chadversary at chromium.org>
> > wrote:
> >
> > > Validate that isl_surf::row_pitch fits in the below bitfields,
> > > if applicable based on isl_surf::usage.
> > >
> > >     RENDER_SURFACE_STATE::SurfacePitch
> > >     RENDER_SURFACE_STATE::AuxiliarySurfacePitch
> > >     3DSTATE_DEPTH_BUFFER::SurfacePitch
> > >     3DSTATE_HIER_DEPTH_BUFFER::SurfacePitch
> > >
> > > v2: Add a Makefile dependency on generated header genX_bits.h.
> > > ---
> > >  src/intel/Makefile.isl.am |  3 ++
> > >  src/intel/isl/isl.c       | 72 ++++++++++++++++++++++++++++++
> > > +++++++++++++----
> > >  2 files changed, 69 insertions(+), 6 deletions(-)
>
>
>
>
> > > +
> > > +   if (row_pitch == 0)
> > > +      return false;
> > > +
> > > +   if (dim_layout == ISL_DIM_LAYOUT_GEN9_1D) {
> > > +      /* SurfacePitch is ignored for this layout.How should we
> validate
> > > it? */
> > > +      isl_finishme("validate row pitch for ISL_DIM_LAYOUT_GEN9_1D");
> > > +      goto done;
> > > +   }
> > > +
> > > +   if (((surf_info->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT) ||
> > > +        (surf_info->usage & ISL_SURF_USAGE_TEXTURE_BIT)) &&
> > >
> >
> > We also want to handle STORAGE_BIT
>
> Done. I added it locally.
>
> > > +       !pitch_in_range(row_pitch, RENDER_SURFACE_STATE_
> > > SurfacePitch_bits(gen_10x)))
> > > +      return false;
> > > +
> > > +   if (((surf_info->usage & ISL_SURF_USAGE_CCS_BIT) ||
> > > +        (surf_info->usage & ISL_SURF_USAGE_MCS_BIT)) &&
> > > +       !pitch_in_range(row_pitch_tiles, RENDER_SURFACE_STATE_
> > > AuxiliarySurfacePitch_bits(gen_10x)))
> > > +      return false;
> > > +
> > > +   if ((surf_info->usage & ISL_SURF_USAGE_DEPTH_BIT) &&
> > > +       !pitch_in_range(row_pitch, _3DSTATE_DEPTH_BUFFER_
> > > SurfacePitch_bits(gen_10x)))
> > > +      return false;
> > > +
> > > +   if ((surf_info->usage & ISL_SURF_USAGE_HIZ_BIT) &&
> > > +       !pitch_in_range(row_pitch, _3DSTATE_HIER_DEPTH_BUFFER_
> > > SurfacePitch_bits(gen_10x)))
> > > +      return false;
> > > +
> > > +   if (surf_info->usage & ISL_SURF_USAGE_STENCIL_BIT)
> > > +      isl_finishme("validate row pitch of stencil surfaces");
> > >
> >
> > How hard is this?  I assume it's not trivial or you would have done it.
>
> It's not trivial. There's corner cases, especially for older gens.  But
> it's not *too* hard. It's just that I have no confidence that I could
> write it correctly on the first try.
>
> I wanted to land all the obvious pitch validations asap. Where obvious
> means:
>
>    if ((usage & bits) && !pitch_in_range())
>       return false;
>
> Since stencil pitch validation is the only non-obvious validation,
> I wanted to do it as a follow-up. Because there WILL be errors in v1 of
> the patch. And I didn't want this patch to be blocked while I debugged
> the stencil validation failures and argued over the corner cases.
>

Fine with me.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170324/a3378e62/attachment-0001.html>


More information about the mesa-dev mailing list