[Mesa-dev] [PATCH V4 15/19] i965: take the target into account for Gen7 MSAA modes
Eric Anholt
eric at anholt.net
Thu Feb 28 15:21:23 PST 2013
Chris Forbes <chrisf at ijw.co.nz> writes:
> Gen7 has an erratum affecting the ld_mcs message, making it unsafe to
> use when the surface doesn't have an associated MCS.
>
> From the Ivy Bridge PRM, Vol4 Part1 p77 ("MCS Enable"):
>
> "If this field is disabled and the sampling engine <ld_mcs>
> message is issued on this surface, the MCS surface may be
> accessed. Software must ensure that the surface is defined
> to avoid GTT errors."
>
> To allow the shader to treat all surfaces uniformly, force UMS if the
> surface is to be used as a multisample texture, even if CMS would have
> been possible.
>
> V3: - Quoted erratum text
>
> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
> ---
> src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 22 +++++++++++++++++++---
> 1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> index 139bf0e..e22c7a0 100644
> --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> @@ -72,7 +72,7 @@ target_to_target(GLenum target)
> * created, based on the chip generation and the surface type.
> */
> static enum intel_msaa_layout
> -compute_msaa_layout(struct intel_context *intel, gl_format format)
> +compute_msaa_layout(struct intel_context *intel, gl_format format, GLenum target)
> {
> /* Prior to Gen7, all MSAA surfaces used IMS layout. */
> if (intel->gen < 7)
> @@ -101,7 +101,23 @@ compute_msaa_layout(struct intel_context *intel, gl_format format)
> assert(intel->gen == 7);
> return INTEL_MSAA_LAYOUT_UMS;
> } else {
> - return INTEL_MSAA_LAYOUT_CMS;
> + /* For now, if we're going to be texturing from this surface,
> + * force UMS, so that the shader doesn't have to do different things
> + * based on whether there's a multisample control surface needing sampled first.
> + * We can't just blindly read the MCS surface in all cases because:
> + *
> + * From the Ivy Bridge PRM, Vol4 Part1 p77 ("MCS Enable"):
> + *
> + * If this field is disabled and the sampling engine <ld_mcs> message
> + * is issued on this surface, the MCS surface may be accessed. Software
> + * must ensure that the surface is defined to avoid GTT errors.
> + */
> + if (target == GL_TEXTURE_2D_MULTISAMPLE ||
> + target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY) {
> + return INTEL_MSAA_LAYOUT_UMS;
The second "target ==" line ought to line up with the first. Other than
that, it gets my review, and I'm ready for this series to land.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130228/159f52b3/attachment.pgp>
More information about the mesa-dev
mailing list