[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