From 2e2775c11b0d17472afd53b1398a3af7d9086a75 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 20 Dec 2022 15:38:57 +0100 Subject: [PATCH] zink: fix PIPE_RESOURCE_PARAM_NPLANES with format modifier Some format modifiers change the number of planes used by an image. For instance AMD DCC modifiers uses 2 or 3 planes. However the format modifier was ignored in the PIPE_RESOURCE_PARAM_NPLANES get_param hook. Fix this by using get_dmabuf_modifier_planes() instead of util_format_get_num_planes(). This fixes wlroots-based compositors under zink. Signed-off-by: Simon Ser Fixes: c025cb9ee9d7 ("zink: fix dmabuf plane returns") Reviewed-by: Erik Faye-Lund Reviewed-by: Mike Blumenkrantz Part-of: --- src/gallium/drivers/zink/zink_resource.c | 3 +-- src/gallium/drivers/zink/zink_types.h | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 5e4333f02a6..476e3014e84 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -1363,7 +1363,7 @@ zink_resource_get_param(struct pipe_screen *pscreen, struct pipe_context *pctx, switch (param) { case PIPE_RESOURCE_PARAM_NPLANES: if (screen->info.have_EXT_image_drm_format_modifier) - *value = util_format_get_num_planes(res->drm_format); + *value = screen->base.get_dmabuf_modifier_planes(&screen->base, obj->modifier, res->internal_format); else *value = 1; break; @@ -1549,7 +1549,6 @@ zink_resource_from_handle(struct pipe_screen *pscreen, struct pipe_resource *pres = resource_create(pscreen, &templ2, whandle, usage, &modifier, modifier_count, NULL); if (pres) { struct zink_resource *res = zink_resource(pres); - res->drm_format = whandle->format; if (pres->target != PIPE_BUFFER) res->valid = true; else diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 1dd29df254d..86b9f700b0b 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -1182,7 +1182,6 @@ struct zink_resource { uint8_t modifiers_count; uint64_t *modifiers; - enum pipe_format drm_format; }; static inline struct zink_resource *