diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c index 54e30948000..b97c526aedd 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c @@ -172,10 +172,14 @@ pipe_loader_drm_probe_fd_nodup(struct pipe_loader_device **dev, int fd, bool zin if (strcmp(ddev->base.driver_name, "vgem") == 0) goto fail; - /* kmsro supports lots of drivers, try as a fallback */ - if (!ddev->dd && !zink) + /* kmsro supports lots of drivers, try as a fallback for primary nodes */ + if (!ddev->dd && !zink && drmGetNodeTypeFromFd(fd) == DRM_NODE_PRIMARY) ddev->dd = get_driver_descriptor("kmsro"); + /* Try zink for unknown render nodes */ + if (!ddev->dd && drmGetNodeTypeFromFd(fd) == DRM_NODE_RENDER) + ddev->dd = get_driver_descriptor("zink"); + if (!ddev->dd) goto fail;