Mesa (master): gallium/dri: Factor out DRI extension setup code

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 5 16:16:43 UTC 2021


Module: Mesa
Branch: master
Commit: 7d4c184ff926a9f9c8d54b25a0dcf4fa293bf2d8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d4c184ff926a9f9c8d54b25a0dcf4fa293bf2d8

Author: James Jones <jajones at nvidia.com>
Date:   Thu Oct 15 14:30:32 2020 -0700

gallium/dri: Factor out DRI extension setup code

Share the DRI extension setup code between
dri2_init_screen and dri_kms_init_screen. There's
currently very little difference, and the sharing
will make a subsequent change to refactor this
code to use per-screen extension lists easier.

Signed-off-by: James Jones <jajones at nvidia.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7175>

---

 src/gallium/frontends/dri/dri2.c | 93 ++++++++++++++++++++--------------------
 1 file changed, 47 insertions(+), 46 deletions(-)

diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
index 5c16f91422d..d365b851cbd 100644
--- a/src/gallium/frontends/dri/dri2.c
+++ b/src/gallium/frontends/dri/dri2.c
@@ -2160,6 +2160,51 @@ static const __DRIextension *dri_robust_screen_extensions[] = {
    NULL
 };
 
+/**
+ * Set up the DRI extension list for this screen based on its underlying
+ * gallium screen's capabilities.
+ */
+static void
+dri2_init_screen_extensions(struct dri_screen *screen,
+                            struct pipe_screen *pscreen,
+                            bool is_kms_screen)
+{
+   if (pscreen->resource_create_with_modifiers)
+      dri2ImageExtension.createImageWithModifiers =
+         dri2_create_image_with_modifiers;
+
+   if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF)) {
+      uint64_t cap;
+
+      if (drmGetCap(screen->sPriv->fd, DRM_CAP_PRIME, &cap) == 0 &&
+          (cap & DRM_PRIME_CAP_IMPORT)) {
+         dri2ImageExtension.createImageFromFds = dri2_from_fds;
+         dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
+         dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2;
+         dri2ImageExtension.createImageFromDmaBufs3 = dri2_from_dma_bufs3;
+         dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats;
+         dri2ImageExtension.queryDmaBufModifiers =
+            dri2_query_dma_buf_modifiers;
+         if (!is_kms_screen) {
+            dri2ImageExtension.queryDmaBufFormatModifierAttribs =
+               dri2_query_dma_buf_format_modifier_attribs;
+         }
+      }
+   }
+
+   screen->sPriv->extensions = dri_screen_extensions;
+
+   if (!is_kms_screen) {
+      if (pscreen->set_damage_region)
+         dri2BufferDamageExtension.set_damage_region = dri2_set_damage_region;
+
+      if (pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY)) {
+         screen->sPriv->extensions = dri_robust_screen_extensions;
+         screen->has_reset_status_query = true;
+      }
+   }
+}
+
 /**
  * This is the driver specific part of the createNewScreen entry point.
  *
@@ -2193,36 +2238,7 @@ dri2_init_screen(__DRIscreen * sPriv)
 
    screen->throttle = pscreen->get_param(pscreen, PIPE_CAP_THROTTLE);
 
-   if (pscreen->resource_create_with_modifiers)
-      dri2ImageExtension.createImageWithModifiers =
-         dri2_create_image_with_modifiers;
-
-   if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF)) {
-      uint64_t cap;
-
-      if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 &&
-          (cap & DRM_PRIME_CAP_IMPORT)) {
-         dri2ImageExtension.createImageFromFds = dri2_from_fds;
-         dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
-         dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2;
-         dri2ImageExtension.createImageFromDmaBufs3 = dri2_from_dma_bufs3;
-         dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats;
-         dri2ImageExtension.queryDmaBufModifiers =
-            dri2_query_dma_buf_modifiers;
-         dri2ImageExtension.queryDmaBufFormatModifierAttribs =
-            dri2_query_dma_buf_format_modifier_attribs;
-      }
-   }
-
-   if (pscreen->set_damage_region)
-      dri2BufferDamageExtension.set_damage_region = dri2_set_damage_region;
-
-   if (pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY)) {
-      sPriv->extensions = dri_robust_screen_extensions;
-      screen->has_reset_status_query = true;
-   }
-   else
-      sPriv->extensions = dri_screen_extensions;
+   dri2_init_screen_extensions(screen, pscreen, false);
 
    configs = dri_init_screen_helper(screen, pscreen);
    if (!configs)
@@ -2258,7 +2274,6 @@ dri_kms_init_screen(__DRIscreen * sPriv)
    const __DRIconfig **configs;
    struct dri_screen *screen;
    struct pipe_screen *pscreen = NULL;
-   uint64_t cap;
 
    screen = CALLOC_STRUCT(dri_screen);
    if (!screen)
@@ -2277,21 +2292,7 @@ dri_kms_init_screen(__DRIscreen * sPriv)
    if (!pscreen)
        goto release_pipe;
 
-   if (pscreen->resource_create_with_modifiers)
-      dri2ImageExtension.createImageWithModifiers =
-         dri2_create_image_with_modifiers;
-
-   if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 &&
-          (cap & DRM_PRIME_CAP_IMPORT)) {
-      dri2ImageExtension.createImageFromFds = dri2_from_fds;
-      dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
-      dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2;
-      dri2ImageExtension.createImageFromDmaBufs3 = dri2_from_dma_bufs3;
-      dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats;
-      dri2ImageExtension.queryDmaBufModifiers = dri2_query_dma_buf_modifiers;
-   }
-
-   sPriv->extensions = dri_screen_extensions;
+   dri2_init_screen_extensions(screen, pscreen, true);
 
    configs = dri_init_screen_helper(screen, pscreen);
    if (!configs)



More information about the mesa-commit mailing list