From 140ebeaad439e8af17c9b67f4f6d1da851e36455 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 1 Aug 2024 08:49:53 -0400 Subject: [PATCH] dri: guard dmabuf support by loader's dmabuf support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this is sort of already implicit through checks elsewhere Reviewed-by: Marek Olšák Part-of: --- src/gallium/frontends/dri/dri_screen.c | 15 +++++++++------ src/gallium/frontends/dri/dri_screen.h | 3 ++- src/gallium/frontends/dri/dri_util.c | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/gallium/frontends/dri/dri_screen.c b/src/gallium/frontends/dri/dri_screen.c index 24d9096c025..cb404872f3e 100644 --- a/src/gallium/frontends/dri/dri_screen.c +++ b/src/gallium/frontends/dri/dri_screen.c @@ -618,7 +618,8 @@ dri_set_background_context(struct st_context *st, const __DRIconfig ** dri_init_screen(struct dri_screen *screen, - struct pipe_screen *pscreen) + struct pipe_screen *pscreen, + bool has_multibuffer) { screen->base.screen = pscreen; screen->base.get_egl_image = dri_get_egl_image; @@ -650,11 +651,13 @@ dri_init_screen(struct dri_screen *screen, #ifdef HAVE_LIBDRM - int dmabuf_caps = pscreen->get_param(pscreen, PIPE_CAP_DMABUF); - if (dmabuf_caps & DRM_PRIME_CAP_IMPORT) - screen->dmabuf_import = true; - if (screen->dmabuf_import && dmabuf_caps & DRM_PRIME_CAP_EXPORT) - screen->has_dmabuf = true; + if (has_multibuffer) { + int dmabuf_caps = pscreen->get_param(pscreen, PIPE_CAP_DMABUF); + if (dmabuf_caps & DRM_PRIME_CAP_IMPORT) + screen->dmabuf_import = true; + if (screen->dmabuf_import && dmabuf_caps & DRM_PRIME_CAP_EXPORT) + screen->has_dmabuf = true; + } #endif return dri_fill_in_modes(screen); diff --git a/src/gallium/frontends/dri/dri_screen.h b/src/gallium/frontends/dri/dri_screen.h index 26ad0ca1baf..74a1c626322 100644 --- a/src/gallium/frontends/dri/dri_screen.h +++ b/src/gallium/frontends/dri/dri_screen.h @@ -207,7 +207,8 @@ dri_init_options(struct dri_screen *screen); const __DRIconfig ** dri_init_screen(struct dri_screen *screen, - struct pipe_screen *pscreen); + struct pipe_screen *pscreen, + bool has_multibuffer); void dri_release_screen(struct dri_screen * screen); diff --git a/src/gallium/frontends/dri/dri_util.c b/src/gallium/frontends/dri/dri_util.c index 9dbe6794068..28eeb8d5d73 100644 --- a/src/gallium/frontends/dri/dri_util.c +++ b/src/gallium/frontends/dri/dri_util.c @@ -153,7 +153,7 @@ driCreateNewScreen3(int scrn, int fd, dri_destroy_screen(screen); return NULL; } - *driver_configs = dri_init_screen(screen, pscreen); + *driver_configs = dri_init_screen(screen, pscreen, has_multibuffer); if (*driver_configs == NULL) { dri_destroy_screen(screen); return NULL;