diff options
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/state_trackers/dri/drm/dri2.c | 13 | ||||
-rw-r--r-- | src/gallium/targets/dri-vmwgfx/target.c | 6 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c index 8ff77b38507..2a5b7b4e4e0 100644 --- a/src/gallium/state_trackers/dri/drm/dri2.c +++ b/src/gallium/state_trackers/dri/drm/dri2.c @@ -28,6 +28,7 @@ * <[email protected]> Chia-I Wu <[email protected]> */ +#include <xf86drm.h> #include "util/u_memory.h" #include "util/u_inlines.h" #include "util/u_format.h" @@ -1051,10 +1052,18 @@ dri2_init_screen(__DRIscreen * sPriv) screen->default_throttle_frames = throttle_ret->val.val_int; } +#ifdef DRM_CAP_PRIME /* Old libdrm? */ if (dmabuf_ret && dmabuf_ret->val.val_bool) { - dri2ImageExtension.base.version = 7; - dri2ImageExtension.createImageFromFds = dri2_from_fds; + uint64_t cap; + + if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 && + (cap & DRM_PRIME_CAP_IMPORT)) { + + dri2ImageExtension.base.version = 7; + dri2ImageExtension.createImageFromFds = dri2_from_fds; + } } +#endif /* DRM_CAP_PRIME */ sPriv->extensions = dri_screen_extensions; diff --git a/src/gallium/targets/dri-vmwgfx/target.c b/src/gallium/targets/dri-vmwgfx/target.c index aaf37b0c4fc..e3fbda1d665 100644 --- a/src/gallium/targets/dri-vmwgfx/target.c +++ b/src/gallium/targets/dri-vmwgfx/target.c @@ -31,12 +31,6 @@ static const struct drm_conf_ret throttle_ret = { .val.val_int = 2, }; -/* Technically this requires kernel support that is not yet - * widespread. - * - * We could check for support in create_screen and return the correct - * value, but for now just return true in all cases. - */ static const struct drm_conf_ret share_fd_ret = { .type = DRM_CONF_BOOL, .val.val_int = true, |