[Mesa-dev] [PATCH 1/5] i965/gen9: Don't disallow fast clear for MSRT formats matching render

Ian Romanick idr at freedesktop.org
Tue Dec 1 11:26:24 PST 2015


s/Don't disallow/Allow/ reads much, much better.  The original wording
made my head hurt. :)

On 11/19/2015 07:25 AM, Neil Roberts wrote:
> Previously fast clear was disallowed on Gen9 for MSRTs with the claim
> that some formats don't work but we didn't understand why. On further
> investigation it seems the formats that don't work are the ones where
> the render surface format is being overriden to a different format
> than the one used for texturing. The one used for texturing is not
> actually a renderable format. It arguably makes sense that the sampler
> hardware doesn't handle the fast color correctly in these cases
> because it shouldn't be possible to end up with a fast cleared surface
> that is non-renderable.
> 
> This patch changes the limitation to prevent fast clear for surfaces
> where the format for rendering is overriden.
> ---
>  src/mesa/drivers/dri/i965/brw_meta_fast_clear.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
> index 1f8bfdf..f2e894a 100644
> --- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
> +++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
> @@ -48,6 +48,7 @@
>  #include "brw_defines.h"
>  #include "brw_context.h"
>  #include "brw_draw.h"
> +#include "brw_state.h"
>  #include "intel_fbo.h"
>  #include "intel_batchbuffer.h"
>  
> @@ -549,11 +550,17 @@ brw_meta_fast_clear(struct brw_context *brw, struct gl_framebuffer *fb,
>        if (brw->gen < 7)
>           clear_type = REP_CLEAR;
>  
> -      /* Certain formats have unresolved issues with sampling from the MCS
> -       * buffer on Gen9. This disables fast clears altogether for MSRTs until
> -       * we can figure out what's going on.
> +      /* If we're mapping the render format to a different format than the
> +       * format we use for texturing then it is a bit questionable whether it
> +       * should be possible to use a fast clear. Although we only actually
> +       * render using a renderable format, without the override workaround it
> +       * wouldn't be possible to have a non-renderable surface in a fast clear
> +       * state so the hardware probably legitimately doesn't need to support
> +       * this case. At least on Gen9 this really does seem to cause problems.
>         */
> -      if (brw->gen >= 9 && irb->mt->num_samples > 1)
> +      if (brw->gen >= 9 &&
> +          brw_format_for_mesa_format(irb->mt->format) !=
> +          brw->render_target_format[irb->mt->format])
>           clear_type = REP_CLEAR;
>  
>        if (irb->mt->fast_clear_state == INTEL_FAST_CLEAR_STATE_NO_MCS)
> 



More information about the mesa-dev mailing list