[Mesa-dev] [PATCH 14/27] i965: Allow aux buffers to have an offset

Kenneth Graunke kenneth at whitecape.org
Thu Dec 1 22:41:20 UTC 2016


On Thursday, December 1, 2016 2:09:55 PM PST Ben Widawsky wrote:
> From: Ben Widawsky <ben at bwidawsk.net>
> 
> Previously our aux buffers (MCS, and HiZ) never had an offset because
> they were in their own buffer object. When using the CCS lossless
> compression feature, it's desirable to store the data at an offset from
> the main framebuffer, ie. share a buffer object. This patch just makes
> having an aux offset possible.
> 
> Thanks to Ken for helping me find the most simple fix...
> 
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> ---
>  src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 3 +--
>  src/mesa/drivers/dri/i965/intel_image.h          | 3 +++
>  src/mesa/drivers/dri/i965/intel_screen.c         | 5 +++++
>  3 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> index 6c44381..69be3eb 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -143,7 +143,6 @@ brw_emit_surface_state(struct brw_context *brw,
>        aux_surf = &aux_surf_s;
>  
>        if (mt->mcs_buf) {
> -         assert(mt->mcs_buf->offset == 0);
>           aux_bo = mt->mcs_buf->bo;
>           aux_offset = mt->mcs_buf->bo->offset64 + mt->mcs_buf->offset;
>        } else {
> @@ -185,7 +184,7 @@ brw_emit_surface_state(struct brw_context *brw,
>        uint32_t *aux_addr = state + brw->isl_dev.ss.aux_addr_offset;
>        drm_intel_bo_emit_reloc(brw->batch.bo,
>                                *surf_offset + brw->isl_dev.ss.aux_addr_offset,
> -                              aux_bo, *aux_addr & 0xfff,
> +                              aux_bo, *aux_addr - aux_bo->offset64,
>                                read_domains, write_domains);
>     }
>  }

This seems like two separate patches - one above (fixing SURFACE_STATE
to actually handle non-zero aux offsets), and one below (adding offset
fields for DRI images).  Could we split it?

The one above would get a:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

I'd need to read the one below in more context.

> diff --git a/src/mesa/drivers/dri/i965/intel_image.h b/src/mesa/drivers/dri/i965/intel_image.h
> index bbda952..7b3c624 100644
> --- a/src/mesa/drivers/dri/i965/intel_image.h
> +++ b/src/mesa/drivers/dri/i965/intel_image.h
> @@ -92,6 +92,9 @@ struct __DRIimageRec {
>     /** The image was created with EGL_EXT_image_dma_buf_import. */
>     bool dma_buf_imported;
>  
> +   /** The image has some ancillary data associated with it at offset. */
> +   uint32_t aux_offset;
> +
>     /**
>      * Provided by EGL_EXT_image_dma_buf_import.
>      * \{
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
> index e0402cf..0f19a6e 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -572,6 +572,11 @@ create_image_with_modifier(struct intel_screen *screen,
>     image->tile_y = I915_TILING_Y;
>     image->modifier = modifier;
>  
> +   if (image->planar_format)
> +      assert(image->planar_format->nplanes == 1);
> +
> +   image->aux_offset = 0; /* y_tiled_height * pitch; */
> +
>     return true;
>  }
>  
> 

-------------- 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/20161201/778e45f3/attachment.sig>


More information about the mesa-dev mailing list