mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-18 17:40:26 +01:00
etnaviv: advertise supported dmabuf modifiers
Simply advertise all supported modifiers, independent of the format. Special formats, like compressed, which don't support all those modifiers are already culled from the dmabuf format list, as we don't support the render target binding for them. 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
58c3ce071c
commit
c8a0660ab4
1 changed files with 44 additions and 0 deletions
|
|
@ -45,6 +45,8 @@
|
|||
|
||||
#include "state_tracker/drm_driver.h"
|
||||
|
||||
#include <drm_fourcc.h>
|
||||
|
||||
#define ETNA_DRM_VERSION(major, minor) ((major) << 16 | (minor))
|
||||
#define ETNA_DRM_VERSION_FENCE_FD ETNA_DRM_VERSION(1, 1)
|
||||
|
||||
|
|
@ -557,6 +559,47 @@ etna_screen_is_format_supported(struct pipe_screen *pscreen,
|
|||
return usage == allowed;
|
||||
}
|
||||
|
||||
const uint64_t supported_modifiers[] = {
|
||||
DRM_FORMAT_MOD_LINEAR,
|
||||
DRM_FORMAT_MOD_VIVANTE_TILED,
|
||||
DRM_FORMAT_MOD_VIVANTE_SUPER_TILED,
|
||||
DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED,
|
||||
DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED,
|
||||
};
|
||||
|
||||
static void
|
||||
etna_screen_query_dmabuf_modifiers(struct pipe_screen *pscreen,
|
||||
enum pipe_format format, int max,
|
||||
uint64_t *modifiers,
|
||||
unsigned int *external_only, int *count)
|
||||
{
|
||||
struct etna_screen *screen = etna_screen(pscreen);
|
||||
int i, num_modifiers = 0;
|
||||
|
||||
if (max > ARRAY_SIZE(supported_modifiers))
|
||||
max = ARRAY_SIZE(supported_modifiers);
|
||||
|
||||
if (!max) {
|
||||
modifiers = NULL;
|
||||
max = ARRAY_SIZE(supported_modifiers);
|
||||
}
|
||||
|
||||
for (i = 0; num_modifiers < max; i++) {
|
||||
/* don't advertise split tiled formats on single pipe/buffer GPUs */
|
||||
if ((screen->specs.pixel_pipes == 1 || screen->specs.single_buffer) &&
|
||||
i >= 3)
|
||||
break;
|
||||
|
||||
if (modifiers)
|
||||
modifiers[num_modifiers] = supported_modifiers[i];
|
||||
if (external_only)
|
||||
external_only[num_modifiers] = 0;
|
||||
num_modifiers++;
|
||||
}
|
||||
|
||||
*count = num_modifiers;
|
||||
}
|
||||
|
||||
static boolean
|
||||
etna_get_specs(struct etna_screen *screen)
|
||||
{
|
||||
|
|
@ -852,6 +895,7 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu,
|
|||
pscreen->get_timestamp = etna_screen_get_timestamp;
|
||||
pscreen->context_create = etna_context_create;
|
||||
pscreen->is_format_supported = etna_screen_is_format_supported;
|
||||
pscreen->query_dmabuf_modifiers = etna_screen_query_dmabuf_modifiers;
|
||||
|
||||
etna_fence_screen_init(pscreen);
|
||||
etna_query_screen_init(pscreen);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue