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>
This commit is contained in:
parent
eebf6ee6e9
commit
d06cfaf4fc
|
@ -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.
|
/* 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.
|
* 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
|
* 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);
|
rsc = etna_resource(rsc->external);
|
||||||
|
|
||||||
handle->stride = rsc->levels[0].stride;
|
handle->stride = rsc->levels[0].stride;
|
||||||
|
handle->modifier = layout_to_modifier(rsc->layout);
|
||||||
|
|
||||||
if (handle->type == DRM_API_HANDLE_TYPE_SHARED) {
|
if (handle->type == DRM_API_HANDLE_TYPE_SHARED) {
|
||||||
return etna_bo_get_name(rsc->bo, &handle->handle) == 0;
|
return etna_bo_get_name(rsc->bo, &handle->handle) == 0;
|
||||||
|
|
Loading…
Reference in New Issue