[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