[Mesa-dev] [PATCH v5 2/5] isl: Validate the calculated row pitch (v4)

Chad Versace chadversary at chromium.org
Tue Mar 28 16:15:39 UTC 2017


On Sat 25 Mar 2017, Jason Ekstrand wrote:
> 
> 
> On March 24, 2017 7:29:05 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.
> > v3:
> >   - Test ISL_SURF_USAGE_STORAGE_BIT too. [for jekstrand]
> >   - Drop explicity dependency on generated header. [for emil]
> > v4:
> >   - Rebase for new gen_bits_header.py script.
> >   - Replace gen_10x with gen_device_info*.
> > ---
> >  src/intel/isl/isl.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++-----
> >  1 file changed, 65 insertions(+), 6 deletions(-)
> > 
> > diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
> > index 81f40b6a6fb..4777113de84 100644



> > +   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");
> 
> We validate qpitch if anything.  But the regular pitch isn't just ignored,
> it's meaningless.  I think we can drop the finishme.

Done.

> > +   if (((surf_info->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT) ||
> > +        (surf_info->usage & ISL_SURF_USAGE_TEXTURE_BIT) ||
> > +        (surf_info->usage & ISL_SURF_USAGE_STORAGE_BIT)) &&
> > +       !pitch_in_range(row_pitch,
> > RENDER_SURFACE_STATE_SurfacePitch_bits(dev->info)))
> > +      return false;
> 
> You know... "(thing & foo) || (thing & bar)" is equivalent to "thing & (foo
> | bar)".  Not that you need to change but sometimes its a but nicer.

I know :). I think my style looks nicer, and the compiler should emit
the same code. But I changed it to use '|' locally so that it matches
the style in other Intel code.

> > +
> > +   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(dev->info)))
> > +      return false;
> > +
> > +   if ((surf_info->usage & ISL_SURF_USAGE_DEPTH_BIT) &&
> > +       !pitch_in_range(row_pitch,
> > _3DSTATE_DEPTH_BUFFER_SurfacePitch_bits(dev->info)))
> > +      return false;
> > +
> > +   if ((surf_info->usage & ISL_SURF_USAGE_HIZ_BIT) &&
> > +       !pitch_in_range(row_pitch,
> > _3DSTATE_HIER_DEPTH_BUFFER_SurfacePitch_bits(dev->info)))
> 
> On gen8+, if the surface has the TEXTURE bit set we should check it against
> AuxiliarySurfacePitch as well.

Good catch.

I've already test the branch as-is, so I hesitate to add this fixup. It
can come as an immediate follow-up patch.


More information about the mesa-dev mailing list