[Mesa-dev] [PATCH V2 09/22] i965/gen9: Set vertical alignment for the miptree

Ben Widawsky ben at bwidawsk.net
Wed May 27 12:04:12 PDT 2015


On Fri, Apr 17, 2015 at 04:51:30PM -0700, Anuj Phogat wrote:
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> ---
>  src/mesa/drivers/dri/i965/brw_tex_layout.c | 74 ++++++++++++++++++++++++++++++
>  1 file changed, 74 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_tex_layout.c b/src/mesa/drivers/dri/i965/brw_tex_layout.c
> index 20dcc21..9342101 100644
> --- a/src/mesa/drivers/dri/i965/brw_tex_layout.c
> +++ b/src/mesa/drivers/dri/i965/brw_tex_layout.c
> @@ -170,6 +170,69 @@ intel_horizontal_texture_alignment_unit(struct brw_context *brw,
>  }
>  
>  static unsigned int
> +tr_mode_vertical_texture_alignment(struct brw_context *brw,
> +                                   struct intel_mipmap_tree *mt)
> +{
> +   const unsigned *align_yf, *align_ys;
> +   /* Bits per pixel/element. */
> +   const unsigned bpp = _mesa_get_format_bytes(mt->format) * 8;
> +
> +   /* Vertical alignment tables for TRMODE_YF and TRMODE_YS. */
> +   const unsigned align_2d_yf[] = {64, 32, 32, 16, 16};
> +   const unsigned align_2d_ys[] = {256, 128, 128, 64, 64};
> +   const unsigned align_3d_yf[] = {16, 16, 16, 8, 8};
> +   const unsigned align_3d_ys[] = {32, 32, 32, 16, 16};
> +   int i = 0;
> +
> +   assert(brw->gen >= 9 &&
> +          mt->target != GL_TEXTURE_1D &&
> +          mt->target != GL_TEXTURE_1D_ARRAY);
> +
> +   /* Alignment computations below assume bpp >= 8 and a power of 2. */
> +   assert (bpp >= 8 && bpp <= 128 && (bpp & (bpp - 1)) == 0);
> +
> +   switch(mt->target) {
> +   case GL_TEXTURE_2D:
> +   case GL_TEXTURE_RECTANGLE:
> +   case GL_TEXTURE_2D_ARRAY:
> +   case GL_TEXTURE_CUBE_MAP:
> +   case GL_TEXTURE_CUBE_MAP_ARRAY:
> +   case GL_TEXTURE_2D_MULTISAMPLE:
> +   case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
> +      align_yf = align_2d_yf;
> +      align_ys = align_2d_ys;
> +      break;
> +   case GL_TEXTURE_3D:
> +      align_yf = align_3d_yf;
> +      align_ys = align_3d_ys;
> +      break;
> +   default:
> +      unreachable("not reached");
> +   }
> +
> +   /* Compute array index. */
> +   while (bpp >> (i + 4))
> +      i++;
> +
> +   if (mt->num_samples > 1) {
> +      const unsigned ms_align_div[] = {1, 2, 2, 4};
> +      int j = 0;
> +      /* num_samples must be power of 2. */
> +      assert((mt->num_samples & (mt->num_samples -1)) == 0);
> +
> +      /* Compute array index. */
> +      while (mt->num_samples >> (j + 2))
> +         j++;
> +      return mt->tr_mode == INTEL_MIPTREE_TRMODE_YF ?
> +             align_yf[i] / ms_align_div[j] :
> +             align_ys[i] / ms_align_div[j];
> +   }
> +
> +   return (mt->tr_mode == INTEL_MIPTREE_TRMODE_YF ? align_yf[i]
> +                                                  : align_ys[i]);
> +}
> +
> +static unsigned int

I think all the comments I had for horizontal alignments apply here too.

>  intel_vertical_texture_alignment_unit(struct brw_context *brw,
>                                        struct intel_mipmap_tree *mt)
>  {
> @@ -202,6 +265,17 @@ intel_vertical_texture_alignment_unit(struct brw_context *brw,
>     if (mt->format == MESA_FORMAT_S_UINT8)
>        return brw->gen >= 7 ? 8 : 4;
>  
> +   /* Vertical texture alignment is not relevant for 1D texture targets. */
> +   if (brw->gen >= 9 && (mt->target == GL_TEXTURE_1D ||
> +       mt->target == GL_TEXTURE_1D_ARRAY))
> +      return 1;

I think this hunk can go away with Neil's patches since then.

> +
> +   if (mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE) {
> +      uint32_t align = tr_mode_vertical_texture_alignment(brw, mt);
> +      /* XY_FAST_COPY_BLT doesn't support vertical alignment < 64 */
> +      return align < 64 ? 64 : align;
> +   }
> +

Like the HALIGN, I don't see this restriction, can you tell me where it is.

>     /* Broadwell only supports VALIGN of 4, 8, and 16.  The BSpec says 4
>      * should always be used, except for stencil buffers, which should be 8.
>      */

Reviewed-by: Ben Widawsky <ben at bwidawsk.net>


More information about the mesa-dev mailing list