[PATCH v2 08/10] etnaviv: fill in modifier in etna_resource_get_handle

Christian Gmeiner christian.gmeiner at gmail.com
Wed Jul 19 08:51:40 UTC 2017


2017-07-04 17:45 GMT+02:00 Lucas Stach <l.stach at pengutronix.de>:
> This allows the state trackers to know the tiling layout of the
> resource and pass this through the various userspace protocols.
>
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> Reviewed-by: Wladimir J. van der Laan <laanwj at gmail.com>

Reviewed-by: Christian Gmeiner <christian.gmeiner at gmail.com>

> ---
>  src/gallium/drivers/etnaviv/etnaviv_resource.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
>
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c
> index b27a1e04e6ca..d4198d8e852b 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c
> @@ -59,6 +59,24 @@ static enum etna_surface_layout modifier_to_layout(uint64_t modifier)
>     }
>  }
>
> +static uint64_t layout_to_modifier(enum etna_surface_layout layout)
> +{
> +   switch (layout) {
> +   case ETNA_LAYOUT_TILED:
> +      return DRM_FORMAT_MOD_VIVANTE_TILED;
> +   case ETNA_LAYOUT_SUPER_TILED:
> +      return DRM_FORMAT_MOD_VIVANTE_SUPER_TILED;
> +   case ETNA_LAYOUT_MULTI_TILED:
> +      return DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED;
> +   case ETNA_LAYOUT_MULTI_SUPERTILED:
> +      return DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED;
> +   case ETNA_LAYOUT_LINEAR:
> +      return DRM_FORMAT_MOD_LINEAR;
> +   default:
> +      return DRM_FORMAT_MOD_INVALID;
> +   }
> +}
> +
>  /* A tile is 4x4 pixels, having 'screen->specs.bits_per_tile' of tile status.
>   * So, in a buffer of N pixels, there are N / (4 * 4) tiles.
>   * We need N * screen->specs.bits_per_tile / (4 * 4) bits of tile status, or
> @@ -476,6 +494,7 @@ etna_resource_get_handle(struct pipe_screen *pscreen,
>        rsc = etna_resource(rsc->external);
>
>     handle->stride = rsc->levels[0].stride;
> +   handle->modifier = layout_to_modifier(rsc->layout);
>
>     if (handle->type == DRM_API_HANDLE_TYPE_SHARED) {
>        return etna_bo_get_name(rsc->bo, &handle->handle) == 0;
> --
> 2.11.0
>

greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info


More information about the etnaviv mailing list