[Mesa-dev] [PATCH 08/16] i965/wm: Use isl for determining vertical slice pitch

Pohjolainen, Topi topi.pohjolainen at gmail.com
Mon Jul 17 18:17:32 UTC 2017


On Mon, Jul 17, 2017 at 09:11:53AM -0700, Jason Ekstrand wrote:
> On Mon, Jul 17, 2017 at 6:34 AM, Topi Pohjolainen <
> topi.pohjolainen at gmail.com> wrote:
> 
> > This helps to drop dependency to miptree::total_height which is
> > used in brw_miptree_get_vertical_slice_pitch().
> >
> > This is also readily compatible once miptree itself is isl
> > based.
> >
> > Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> > ---
> >  src/mesa/drivers/dri/i965/brw_tex_layout.c       |  2 +-
> >  src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 24
> > ++++++++++++++++++++++--
> >  src/mesa/drivers/dri/i965/intel_mipmap_tree.h    |  9 ---------
> >  3 files changed, 23 insertions(+), 12 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_tex_layout.c
> > b/src/mesa/drivers/dri/i965/brw_tex_layout.c
> > index d06d654797..c76e87bc06 100644
> > --- a/src/mesa/drivers/dri/i965/brw_tex_layout.c
> > +++ b/src/mesa/drivers/dri/i965/brw_tex_layout.c
> > @@ -309,7 +309,7 @@ brw_miptree_get_horizontal_slice_pitch(const struct
> > brw_context *brw,
> >     }
> >  }
> >
> > -unsigned
> > +static unsigned
> >  brw_miptree_get_vertical_slice_pitch(const struct brw_context *brw,
> >                                       const struct intel_mipmap_tree *mt,
> >                                       unsigned level)
> > diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> > b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> > index da5c5128c1..55bb61b598 100644
> > --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> > +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> > @@ -1632,6 +1632,27 @@ update_buffer_image_param(struct brw_context *brw,
> >     param->stride[0] = _mesa_get_format_bytes(u->_ActualFormat);
> >  }
> >
> > +static unsigned
> > +get_vertical_slice_pitch(const struct brw_context *brw,
> > +                         const struct intel_mipmap_tree *mt,
> > +                         unsigned level)
> > +{
> > +   struct isl_surf surf;
> > +
> > +   intel_miptree_get_isl_surf(brw, mt, &surf);
> > +
> > +   if ((brw->gen < 9 && mt->target == GL_TEXTURE_3D) ||
> > +       (brw->gen == 4 && mt->target == GL_TEXTURE_CUBE_MAP)) {
> > +      const struct isl_extent3d image_align_sa =
> > +         isl_surf_get_image_alignment_sa(&surf);
> > +
> > +      return ALIGN_NPOT(minify(surf.phys_level0_sa.height, level),
> > +                        image_align_sa.h);
> > +   }
> > +
> > +   return surf.array_pitch_el_rows;
> > +}
> >
> 
> Why not just switch us over to using isl_surf_fill_image_param?  I was
> meaning to do that but it just never happened.

I was somewhat hesitant to do that - I was wondering what the isl_view would
need to look like for the "format == ISL_FORMAT_RAW" branch in
update_image_surface().

> 
> 
> >  static void
> >  update_texture_image_param(struct brw_context *brw,
> >                             struct gl_image_unit *u,
> > @@ -1658,8 +1679,7 @@ update_texture_image_param(struct brw_context *brw,
> >     param->stride[1] = mt->pitch / mt->cpp;
> >     param->stride[2] =
> >        brw_miptree_get_horizontal_slice_pitch(brw, mt, u->Level);
> > -   param->stride[3] =
> > -      brw_miptree_get_vertical_slice_pitch(brw, mt, u->Level);
> > +   param->stride[3] = get_vertical_slice_pitch(brw, mt, u->Level);
> >
> >     if (mt->tiling == I915_TILING_X) {
> >        /* An X tile is a rectangular block of 512x8 bytes. */
> > diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> > b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> > index 9098c39116..291050d72e 100644
> > --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> > +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> > @@ -986,15 +986,6 @@ brw_miptree_get_horizontal_slice_pitch(const struct
> > brw_context *brw,
> >                                         const struct intel_mipmap_tree *mt,
> >                                         unsigned level);
> >
> > -/**
> > - * Vertical distance from one slice to the next in the two-dimensional
> > miptree
> > - * layout.
> > - */
> > -unsigned
> > -brw_miptree_get_vertical_slice_pitch(const struct brw_context *brw,
> > -                                     const struct intel_mipmap_tree *mt,
> > -                                     unsigned level);
> > -
> >  bool
> >  brw_miptree_layout(struct brw_context *brw,
> >                     struct intel_mipmap_tree *mt,
> > --
> > 2.11.0
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >


More information about the mesa-dev mailing list