From f7463b1292316f47ffa9c2bc91f1dadea7201913 Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Fri, 14 Oct 2022 16:16:49 +0200 Subject: [PATCH] etnaviv: canonicalize modifier on import Unknown modifiers are currently squashed down to linear when transforming the modifier into our interal layout representation. However, the only real modifier that we expect to see, which isn't Vivante specific or LINEAR, is the INVALID modifier. Treat this modifier as linear and reject any other unexpected modifiers. Signed-off-by: Lucas Stach Reviewed-by: Christian Gmeiner Part-of: --- src/gallium/drivers/etnaviv/etnaviv_resource.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c index 5ae018c882a..b807e587aa7 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c @@ -51,8 +51,9 @@ static enum etna_surface_layout modifier_to_layout(uint64_t modifier) case DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED: return ETNA_LAYOUT_MULTI_SUPERTILED; case DRM_FORMAT_MOD_LINEAR: - default: return ETNA_LAYOUT_LINEAR; + default: + unreachable("unhandled modifier"); } } @@ -523,6 +524,7 @@ etna_resource_from_handle(struct pipe_screen *pscreen, struct etna_resource *rsc; struct etna_resource_level *level; struct pipe_resource *prsc; + uint64_t modifier = handle->modifier; DBG("target=%d, format=%s, %ux%ux%u, array_size=%u, last_level=%u, " "nr_samples=%u, usage=%u, bind=%x, flags=%x", @@ -547,8 +549,11 @@ etna_resource_from_handle(struct pipe_screen *pscreen, if (!rsc->bo) goto fail; + if (modifier == DRM_FORMAT_MOD_INVALID) + modifier = DRM_FORMAT_MOD_LINEAR; + rsc->seqno = 1; - rsc->layout = modifier_to_layout(handle->modifier); + rsc->layout = modifier_to_layout(modifier); if (usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH) rsc->explicit_flush = true;