gallium: replace DRM_CONF_SHARE_FD with PIPE_CAP_DMABUF
authorMarek Olšák <marek.olsak@amd.com>
Mon, 22 Apr 2019 21:50:00 +0000 (17:50 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 24 Apr 2019 01:20:26 +0000 (21:20 -0400)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
14 files changed:
src/gallium/auxiliary/target-helpers/drm_helper.h
src/gallium/auxiliary/util/u_screen.c
src/gallium/docs/source/screen.rst
src/gallium/include/pipe/p_defines.h
src/gallium/include/state_tracker/drm_driver.h
src/gallium/state_trackers/dri/dri2.c
src/gallium/targets/d3dadapter9/drm.c
src/gallium/targets/pipe-loader/pipe_i915.c
src/gallium/targets/pipe-loader/pipe_msm.c
src/gallium/targets/pipe-loader/pipe_nouveau.c
src/gallium/targets/pipe-loader/pipe_r300.c
src/gallium/targets/pipe-loader/pipe_r600.c
src/gallium/targets/pipe-loader/pipe_radeonsi.c
src/gallium/targets/pipe-loader/pipe_vmwgfx.c

index a89c47e4861032655512d933de1c14f491038043..101e0e2c22c5ffd3b420d0e504976525fe699ba9 100644 (file)
@@ -7,20 +7,9 @@
 #include "state_tracker/drm_driver.h"
 #include "util/xmlpool.h"
 
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_bool = true,
-};
-
 const struct drm_conf_ret *
 pipe_default_configuration_query(enum drm_conf conf)
 {
-   switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
-   default:
-      break;
-   }
    return NULL;
 }
 
index 46aae302520cdec507b3d9b7c5c589c635a55a65..dffd0436cb098fdeb2ab9b85e614d936cd73dadb 100644 (file)
@@ -355,6 +355,13 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
    case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
       return 0;
 
+   case PIPE_CAP_DMABUF:
+#ifdef PIPE_OS_LINUX
+      return 1;
+#else
+      return 0;
+#endif
+
    default:
       unreachable("bad PIPE_CAP_*");
    }
index 6018411631217f6fc2d057f9e33e5c7592ce781c..f2fa7856ad23f3f4a9baa27f0da58cb64178f4f6 100644 (file)
@@ -519,6 +519,8 @@ The integer capabilities:
 * ``PIPE_CAP_MAX_FRAMES_IN_FLIGHT``: Maximum number of frames that state
   trackers should allow to be in flight before throttling pipe_context
   execution. 0 = throttling is disabled.
+* ``PIPE_CAP_DMABUF``: Whether Linux DMABUF handles are supported by
+  resource_from_handle and resource_get_handle.
 
 .. _pipe_capf:
 
index 1760fc2f1017795a0dfcb456a300e2406c8a17f7..27118dbe4e897454f0df8c42678279d307269b95 100644 (file)
@@ -881,6 +881,7 @@ enum pipe_cap
    PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS,
    PIPE_CAP_IMAGE_LOAD_FORMATTED,
    PIPE_CAP_MAX_FRAMES_IN_FLIGHT,
+   PIPE_CAP_DMABUF,
 };
 
 /**
index 8094734b67268845135d420b6569c645d8f24ee5..3f52f1be885ead6fba175c01ed9cb226654f23a2 100644 (file)
@@ -15,8 +15,6 @@ struct pipe_resource;
  * Configuration queries.
  */
 enum drm_conf {
-   /* Can this driver, running on this kernel, import and export dma-buf fds? */
-   DRM_CONF_SHARE_FD, /* DRM_CONF_BOOL. */
    /* XML string describing the available config options. */
    DRM_CONF_XML_OPTIONS, /* DRM_CONF_POINTER */
    DRM_CONF_MAX
@@ -26,8 +24,6 @@ enum drm_conf {
  * Type of configuration answer
  */
 enum drm_conf_type {
-   DRM_CONF_BOOL,
-   DRM_CONF_FLOAT,
    DRM_CONF_POINTER
 };
 
@@ -37,8 +33,6 @@ enum drm_conf_type {
 struct drm_conf_ret {
    enum drm_conf_type type;
    union {
-      bool val_bool;
-      float val_float;
       void *val_pointer;
    } val;
 };
index 2a4a6ac6dad5dbe6d80772a6eb335409883693ad..f7672bcae06b295fe4698ca122092e8f332d0bda 100644 (file)
@@ -1908,7 +1908,6 @@ dri2_init_screen(__DRIscreen * sPriv)
    const __DRIconfig **configs;
    struct dri_screen *screen;
    struct pipe_screen *pscreen = NULL;
-   const struct drm_conf_ret *dmabuf_ret;
 
    screen = CALLOC_STRUCT(dri_screen);
    if (!screen)
@@ -1932,13 +1931,11 @@ dri2_init_screen(__DRIscreen * sPriv)
    screen->default_throttle_frames =
       pscreen->get_param(pscreen, PIPE_CAP_MAX_FRAMES_IN_FLIGHT);
 
-   dmabuf_ret = pipe_loader_configuration(screen->dev, DRM_CONF_SHARE_FD);
-
    if (pscreen->resource_create_with_modifiers)
       dri2ImageExtension.createImageWithModifiers =
          dri2_create_image_with_modifiers;
 
-   if (dmabuf_ret && dmabuf_ret->val.val_bool) {
+   if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF)) {
       uint64_t cap;
 
       if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 &&
index 1c8460f7f033cddb81d5af5ef7fff3e29dd2eaa9..4418ceb93d6c9b034b81748077f34c18f3c9ff36 100644 (file)
@@ -205,7 +205,6 @@ drm_create_adapter( int fd,
     struct d3dadapter9drm_context *ctx = CALLOC_STRUCT(d3dadapter9drm_context);
     HRESULT hr;
     bool different_device;
-    const struct drm_conf_ret *dmabuf_ret = NULL;
     driOptionCache defaultInitOptions;
     driOptionCache userInitOptions;
     int throttling_value_user = -2;
@@ -235,8 +234,7 @@ drm_create_adapter( int fd,
         return D3DERR_DRIVERINTERNALERROR;
     }
 
-    dmabuf_ret = pipe_loader_configuration(ctx->dev, DRM_CONF_SHARE_FD);
-    if (!dmabuf_ret || !dmabuf_ret->val.val_bool) {
+    if (!ctx->base.hal->get_param(ctx->base.hal, PIPE_CAP_DMABUF)) {
         ERR("The driver is not capable of dma-buf sharing."
             "Abandon to load nine state tracker\n");
         drm_destroy(&ctx->base);
index 841990e0e23a35f19123a600283b4b59b8b7a444..6142985844529d16120db92fcdd455036df2d0ce 100644 (file)
@@ -23,19 +23,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return screen;
 }
 
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_bool = true,
-};
-
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
-   switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
-   default:
-      break;
-   }
    return NULL;
 }
 
index eb38be586aca2ab9a56ea5777ebbaae3e00033f1..004db95e78a43fd38724f9e85beb2e51dc250858 100644 (file)
@@ -17,19 +17,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return screen;
 }
 
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_bool = true,
-};
-
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
-   switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
-   default:
-      break;
-   }
    return NULL;
 }
 
index ead5a18273850af4182f8a6552035a5fa4f7efa6..9adba1c85c05b449167a1eafc5684e15f398f389 100644 (file)
@@ -17,19 +17,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return screen;
 }
 
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_bool = true,
-};
-
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
-   switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
-   default:
-      break;
-   }
    return NULL;
 }
 
index 2a03580223d41159f567ad730d3920b9cdd374fa..1c42f4e36ad2382df07cbb06e73a60b540c8b1e5 100644 (file)
@@ -13,19 +13,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return sws ? debug_screen_wrap(sws->screen) : NULL;
 }
 
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_bool = true,
-};
-
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
-   switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
-   default:
-      break;
-   }
    return NULL;
 }
 
index a35e0a6179fa1ff9a72ed66991b21a40320f5b60..f5f1c446e2dce406725cd681f0fe2d486007b07e 100644 (file)
@@ -13,19 +13,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_bool = true,
-};
-
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
-   switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
-   default:
-      break;
-   }
    return NULL;
 }
 
index 947c9e1990e0bd2c203953ef92e19417e23ddff4..09c06b380d6d33d14584081d549a8731cd428f21 100644 (file)
@@ -20,11 +20,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_bool = true,
-};
-
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
    static const struct drm_conf_ret xml_options_ret = {
@@ -34,8 +29,6 @@ static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
    };
 
    switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
    case DRM_CONF_XML_OPTIONS:
       return &xml_options_ret;
    default:
index 3b8c748594cb654c77cf76d7f550e494fa178b1c..c4484e03344a5531aa84bc28cdd149c10d1d2ea5 100644 (file)
@@ -23,19 +23,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
    return screen;
 }
 
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_bool = true,
-};
-
 static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
 {
-   switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
-   default:
-      break;
-   }
    return NULL;
 }