Module: Mesa
Branch: main
Commit: 2e2775c11b0d17472afd53b1398a3af7d9086a75
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2e2775c11b0d17472afd53b1398a3af7d9086a75

Author: Simon Ser <[email protected]>
Date:   Tue Dec 20 15:38:57 2022 +0100

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 <[email protected]>
Fixes: c025cb9ee9d7 ("zink: fix dmabuf plane returns")
Reviewed-by: Erik Faye-Lund <[email protected]>
Reviewed-by: Mike Blumenkrantz <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20395>

---

 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 *

Reply via email to