[Mesa-dev] [0.5/16] i965/blorp/gen9: Do not try deferred mcs allocation for CCS_E
Kenneth Graunke
kenneth at whitecape.org
Wed Apr 19 19:13:04 UTC 2017
On Monday, February 27, 2017 10:44:42 AM PDT Topi Pohjolainen wrote:
> For lossless compression mcs is always allocated when miptree
> itself is created. The deferred logic in blorp is only meant for
> CCS_D (single sample fast clear without compression).
>
> In intel_miptree_supports_lossless_compressed() one makes a
> heuristic choice not to use compression for float types.
> Currently the deferred hook is also applied for gen9 and blorp
> clears therefore effectively revert the heuristic.
>
> This also prevents blorp from wrongly falling to meta path
> when the deferred mcs allocation fails for x-tiled miptrees.
>
> CC: Jason Ekstrand <jason at jlekstrand.net>
> CC: Ben Widawsky <ben at bwidawsk.net>
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
> src/mesa/drivers/dri/i965/brw_blorp.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c
> index 52f85ff..032fd2c 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp.c
> +++ b/src/mesa/drivers/dri/i965/brw_blorp.c
> @@ -845,11 +845,14 @@ do_single_blorp_clear(struct brw_context *brw, struct gl_framebuffer *fb,
> return true;
>
> /* If the MCS buffer hasn't been allocated yet, we need to allocate
> - * it now.
> + * it now. For SKL (that supports lossless compression) mcs is allocated
> + * by the time the miptree is created. If it is omitted there, do not
> + * try to allocate here.
> */
> if (!irb->mt->mcs_buf) {
> - assert(!intel_miptree_is_lossless_compressed(brw, irb->mt));
> - if (!intel_miptree_alloc_non_msrt_mcs(brw, irb->mt, false)) {
> + if (brw->gen >= 9) {
> + can_fast_clear = false;
> + } else if (!intel_miptree_alloc_non_msrt_mcs(brw, irb->mt, false)) {
> /* MCS allocation failed--probably this will only happen in
> * out-of-memory conditions. But in any case, try to recover
> * by falling back to a non-blorp clear technique.
>
I was a bit concerned that this might disable fast clears for formats
which can do CCS_D and not CCS_E, as you're using a simple gen >= 9
check rather than the checks we use when doing non-deferred allocation:
const bool lossless_compression_disabled = INTEL_DEBUG & DEBUG_NO_RBC;
const bool is_lossless_compressed =
unlikely(!lossless_compression_disabled) &&
brw->gen >= 9 && !mt->is_scanout &&
intel_miptree_supports_lossless_compressed(brw, mt);
But I think we already don't do CCS_D fast clears - we only do them when
CCS_E (lossless compression) is supported. So,
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Rather than all the intel_miptree_supports_* stuff, it might be nice to
check all that on creation, and store flags for "CCS_E is possible",
"CCS_D is possible", etc. We already have AUX_DISABLE_* flags, but I'm
not sure whether those have quite the same meaning...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170419/de568731/attachment.sig>
More information about the mesa-dev
mailing list