[Mesa-dev] [PATCH 1/2] i965/gen7: Prefer vertical alignment of 4 when possible.

Kenneth Graunke kenneth at whitecape.org
Sun Nov 17 16:20:26 PST 2013


On 11/16/2013 12:01 AM, Paul Berry wrote:
> On 15 November 2013 19:26, Kenneth Graunke <kenneth at whitecape.org
> <mailto:kenneth at whitecape.org>> wrote:
> 
>     On 11/15/2013 01:18 PM, Paul Berry wrote:
>     > Gen6+ allows for color buffers to use a vertical alignment of either 4
>     > or 2.  Previously we defaulted to 2.  This may have caused problems on
>     > Gen7 because Y-tiled render targets are not allowed to use a vertical
>     > alignment of 2.
>     >
>     > This patch changes the vertical alignment to 4 on Gen7, except for the
>     > few formats where a vertical alignment of 2 is required.
>     > ---
>     >  src/mesa/drivers/dri/i965/brw_tex_layout.c | 25
>     ++++++++++++++++++++++---
>     >  1 file changed, 22 insertions(+), 3 deletions(-)
>     >
>     > diff --git a/src/mesa/drivers/dri/i965/brw_tex_layout.c
>     b/src/mesa/drivers/dri/i965/brw_tex_layout.c
>     > index d05dbeb..2c81eed 100644
>     > --- a/src/mesa/drivers/dri/i965/brw_tex_layout.c
>     > +++ b/src/mesa/drivers/dri/i965/brw_tex_layout.c
>     > @@ -105,11 +105,11 @@ intel_vertical_texture_alignment_unit(struct
>     brw_context *brw,
>     >      * | Depth Buffer                           |  2  |  2  |  2
>      |  4  |  4  |
>     >      * | Separate Stencil Buffer                | N/A | N/A | N/A
>     |  4  |  8  |
>     >      * | Multisampled (4x or 8x) render target  | N/A | N/A | N/A
>     |  4  |  4  |
>     > -    * | All Others                             |  2  |  2  |  2
>      |  2  |  2  |
>     > +    * | All Others                             |  2  |  2  |  2
>      |  *  |  *  |
>     >      *
>     +----------------------------------------------------------------------+
>     >      *
>     > -    * On SNB+, non-special cases can be overridden by setting the
>     SURFACE_STATE
>     > -    * "Surface Vertical Alignment" field to VALIGN_2 or VALIGN_4.
>     > +    * Where "*" means either VALIGN_2 or VALIGN_4 depending on
>     the setting of
>     > +    * the SURFACE_STATE "Surface Vertical Alignment" field.
>     >      */
>     >     if (_mesa_is_format_compressed(format))
>     >        return 4;
>     > @@ -128,6 +128,25 @@ intel_vertical_texture_alignment_unit(struct
>     brw_context *brw,
>     >        return 4;
>     >     }
>     >
>     > +   if (brw->gen == 7) {
>     > +      /* On Gen7, we prefer a vertical alignment of 4 when
>     possible, because
>     > +       * that allows Y tiled render targets.
>     > +       *
>     > +       * From the Ivy Bridge PRM, Vol4 Part1 2.12.2.1
>     (SURFACE_STATE for most
>     > +       * messages), on p64, under the heading "Surface Vertical
>     Alignment":
>     > +       *
>     > +       *     Value of 1 [VALIGN_4] is not supported for format
>     YCRCB_NORMAL
>     > +       *     (0x182), YCRCB_SWAPUVY (0x183), YCRCB_SWAPUV
>     (0x18f), YCRCB_SWAPY
>     > +       *     (0x190)
>     > +       *
>     > +       *     VALIGN_4 is not supported for surface format
>     R32G32B32_FLOAT.
>     > +       */
>     > +      if (base_format == GL_YCBCR_MESA || format ==
>     MESA_FORMAT_RGB_FLOAT32)
>     > +         return 2;
>     > +
>     > +      return 4;
>     > +   }
>     > +
>     >     return 2;
>     >  }
> 
>     We use Y-tiling on Gen6 as well.
> 
> 
> Yes, but the restriction that Y-tiled render targets must use a vertical
> alignment of 4 is not present on Gen6, so there would be no benefit to
> applying this logic to Gen6.

Huh.  Strange, but you appear to be correct.

Patch 1 is:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>


More information about the mesa-dev mailing list