diff options
author | Lucas Stach <l.stach@pengutronix.de> | 2017-06-22 13:56:24 +0200 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2017-07-19 16:26:50 +0200 |
commit | d06cfaf4fc21d45d09045af9ea2a248ef3968767 (patch) | |
tree | ec178a947610f7a587a582c8094690764f1973bc | |
parent | eebf6ee6e9eacce014b855c0e067ce1f1b9ff4d6 (diff) |
etnaviv: fill in modifier in etna_resource_get_handle
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@pengutronix.de>
Reviewed-by: Wladimir J. van der Laan <laanwj@gmail.com>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
-rw-r--r-- | src/gallium/drivers/etnaviv/etnaviv_resource.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c index c7eef96a6e..63ed8bacf0 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 @@ -480,6 +498,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; |