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

2017-07-17 Thread Jason Ekstrand
On July 17, 2017 11:17:43 AM "Pohjolainen, Topi" 
 wrote:



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.pohjolai...@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 
> ---
>  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, );
> +
> +   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();
> +
> +  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().


Should look the same as for the other case.  Vulkan just calls it and 
doesn't care.  Take a look at anv_CreateImageView



>  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@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>



___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


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

2017-07-17 Thread Pohjolainen, Topi
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.pohjolai...@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 
> > ---
> >  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, );
> > +
> > +   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();
> > +
> > +  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@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


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

2017-07-17 Thread Jason Ekstrand
On Mon, Jul 17, 2017 at 6:34 AM, Topi Pohjolainen <
topi.pohjolai...@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 
> ---
>  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, );
> +
> +   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();
> +
> +  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.


>  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@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev