i965: Fix vertical alignment for multisampled buffers.
authorPaul Berry <stereotype441@gmail.com>
Tue, 12 Nov 2013 18:55:18 +0000 (10:55 -0800)
committerPaul Berry <stereotype441@gmail.com>
Fri, 15 Nov 2013 16:54:15 +0000 (08:54 -0800)
commitb4c3b833ec8ec6787658ea90365ff565cd8846c7
treea7488b09e0da6899d665f97cca4166b396fd9acd
parent46e9f78efcb6ccc25ea59d83624aaa5077254a85
i965: Fix vertical alignment for multisampled buffers.

From the Sandy Bridge PRM, Vol 1 Part 1 7.18.3.4 (Alignment Unit
Size):

    j [vertical alignment] = 4 for any render target surface is
    multisampled (4x)

From the Ivy Bridge PRM, Vol 4 Part 1 2.12.2.1 (SURFACE_STATE for most
messages), under the "Surface Vertical Alignment" heading:

    This field is intended to be set to VALIGN_4 if the surface was
    rendered as a depth buffer, for a multisampled (4x) render target,
    or for a multisampled (8x) render target, since these surfaces
    support only alignment of 4.

Back in 2012 when we added multisampling support to the i965 driver,
we forgot to update the logic for computing the vertical alignment, so
we were often using a vertical alignment of 2 for multisampled
buffers, leading to subtle rendering errors.

Note that the specs also require a vertical alignment of 4 for all
Y-tiled render target surfaces; I plan to address that in a separate
patch.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=53077
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_tex_layout.c