diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index 91fcc1fd2..af26e20d6 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -578,8 +578,11 @@ gbm_dri_bo_get_fd(struct gbm_bo *_bo) struct gbm_dri_bo *bo = gbm_dri_bo(_bo); int fd; - if (bo->image == NULL) - return -1; + if (bo->image == NULL) { + if (drmPrimeHandleToFD(dri->base.v0.fd, bo->handle, DRM_CLOEXEC | DRM_RDWR, &fd) != 0) + return -1; + return fd; + } if (!dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_FD, &fd)) return -1; @@ -663,8 +666,11 @@ gbm_dri_bo_get_plane_fd(struct gbm_bo *_bo, int plane) /* dumb BOs can only utilize non-planar formats */ if (!bo->image) { - errno = EINVAL; - return -1; + if (plane != 0) { + errno = EINVAL; + return -1; + } + return gbm_dri_bo_get_fd(_bo); } if (plane >= get_number_planes(dri, bo->image)) {