[Mesa-dev] [PATCH v4 06/18] intel/blorp: Add support for fast clear address.
Pohjolainen, Topi
topi.pohjolainen at gmail.com
Tue Mar 27 11:42:46 UTC 2018
On Thu, Mar 08, 2018 at 08:48:59AM -0800, Rafael Antognolli wrote:
> On gen10+, if surface->clear_color_addr is present, use it directly
> intead of copying it to the surface state.
>
> v4: Remove redundant #if clause for GEN <= 10 (Jason)
>
> Signed-off-by: Rafael Antognolli <rafael.antognolli at intel.com>
> Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
> src/intel/blorp/blorp_genX_exec.h | 13 ++++++++++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h
> index 7f5a4539e8d..28a17a7df46 100644
> --- a/src/intel/blorp/blorp_genX_exec.h
> +++ b/src/intel/blorp/blorp_genX_exec.h
> @@ -1313,11 +1313,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,
> @@ -1337,9 +1341,12 @@ blorp_emit_surface_state(struct blorp_batch *batch,
> blorp_flush_range(batch, state, GENX(RENDER_SURFACE_STATE_length) * 4);
We should move this after the reloc() call as it still updates the clear
address.
>
> 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);
In order not to loose the lower bits later on:
uint32_t *clear_addr = state + isl_dev->ss.clear_color_state_offset;
> + blorp_surface_reloc(batch, state_offset +
> + isl_dev->ss.clear_color_state_offset,
> + surface->clear_color_addr, 0);
surface->clear_color_addr, *clear_addr);
> +#elif GEN_GEN >= 7
> 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
More information about the mesa-dev
mailing list