[Mesa-dev] [PATCH v3 07/13] intel/blorp: Add suport for fast clear address.

Jason Ekstrand jason at jlekstrand.net
Tue Feb 27 01:11:39 UTC 2018


On Wed, Feb 21, 2018 at 1:45 PM, Rafael Antognolli <
rafael.antognolli at intel.com> wrote:

> On gen10+, if surface->clear_color_addr is present, use it directly
> intead of copying it to the surface state.
>
> Signed-off-by: Rafael Antognolli <rafael.antognolli at intel.com>
> ---
>  src/intel/blorp/blorp_genX_exec.h | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/src/intel/blorp/blorp_genX_exec.h
> b/src/intel/blorp/blorp_genX_exec.h
> index 737720a70c9..122dccd7ca1 100644
> --- a/src/intel/blorp/blorp_genX_exec.h
> +++ b/src/intel/blorp/blorp_genX_exec.h
> @@ -1281,11 +1281,15 @@ blorp_emit_surface_state(struct blorp_batch
> *batch,
>           write_disable_mask |= ISL_CHANNEL_ALPHA_BIT;
>     }
>
> +   const bool use_clear_address =
> +      GEN_GEN >= 10 && (surface->clear_color_addr.buffer != NULL);
> +
>     isl_surf_fill_state(batch->blorp->isl_dev, state,
>                         .surf = &surf, .view = &surface->view,
>                         .aux_surf = &surface->aux_surf, .aux_usage =
> aux_usage,
>                         .mocs = surface->addr.mocs,
>                         .clear_color = surface->clear_color,
> +                       .use_clear_address = use_clear_address,
>                         .write_disables = write_disable_mask);
>
>     blorp_surface_reloc(batch, state_offset + isl_dev->ss.addr_offset,
> @@ -1305,9 +1309,11 @@ blorp_emit_surface_state(struct blorp_batch *batch,
>     blorp_flush_range(batch, state, GENX(RENDER_SURFACE_STATE_length) *
> 4);
>
>     if (surface->clear_color_addr.buffer) {
> -#if GEN_GEN > 10
> -      unreachable("Implement indirect clear support on gen11+");
> -#elif GEN_GEN >= 7 && GEN_GEN <= 10
> +#if GEN_GEN >= 10
> +      assert((surface->clear_color_addr.offset & 0x3f) == 0);
> +      blorp_surface_reloc(batch, state_offset + isl_dev->ss.clear_value_
> offset,
> +                          surface->clear_color_addr, 0);
> +#elif GEN_GEN >= 7 && GEN_GEN < 10
>

The GEN_GEN < 10 here is redundant, I'd just drop it.  With that,

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>


>        struct blorp_address dst_addr = blorp_get_surface_base_
> address(batch);
>        dst_addr.offset += state_offset + isl_dev->ss.clear_value_offset;
>        blorp_emit_memcpy(batch, dst_addr, surface->clear_color_addr,
> --
> 2.14.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180226/7e903837/attachment.html>


More information about the mesa-dev mailing list