summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaarten Lankhorst <dev@mblankhorst.nl>2015-03-20 23:17:13 +0100
committerMaarten Lankhorst <dev@mblankhorst.nl>2015-03-20 23:17:44 +0100
commit91e51a7571e6e8cb9338fc168f817f56438b1901 (patch)
treeb4704aedd8242eb8cbb0c1a4c88c8cb734d23d6c
parentd29d8baad4d845ec9d3d1d1bc8d1c1e1f6f6f086 (diff)
Use drmGetRenderDeviceNameFromFd to obtain the dri3 node.
-rw-r--r--configure.ac2
-rw-r--r--src/nouveau_dri2.c16
2 files changed, 8 insertions, 10 deletions
diff --git a/configure.ac b/configure.ac
index ccf320a..03563c1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -80,7 +80,7 @@ XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto)
XORG_DRIVER_CHECK_EXT(DRI2, [dri2proto >= 2.6])
# Checks for pkg-config packages
-PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.17])
+PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.60])
PKG_CHECK_MODULES(LIBDRM_NOUVEAU, [libdrm_nouveau >= 2.4.25])
AC_SUBST(LIBDRM_NOUVEAU_CFLAGS)
AC_SUBST(LIBDRM_NOUVEAU_LIBS)
diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c
index e3445b2..f22e319 100644
--- a/src/nouveau_dri2.c
+++ b/src/nouveau_dri2.c
@@ -1121,20 +1121,18 @@ nouveau_dri3_screen_init(ScreenPtr screen)
ScrnInfoPtr pScrn = xf86ScreenToScrn(screen);
NVPtr pNv = NVPTR(pScrn);
struct stat master, render;
- char buf[32];
+ char *buf;
if (is_render_node(pNv->dev->fd, &master))
return TRUE;
- sprintf(buf, "/dev/dri/renderD%d", (int)((master.st_rdev & 0x3f) | 0x80));
-
- if (stat(buf, &render) == 0 &&
- master.st_mode == render.st_mode &&
- (render.st_rdev & ~0x80) == master.st_rdev)
- pNv->render_node = strdup(buf);
-
- if (pNv->render_node)
+ buf = drmGetRenderDeviceNameFromFd(pNv->dev->fd);
+ if (buf && stat(buf, &render) == 0 &&
+ master.st_mode == render.st_mode) {
+ pNv->render_node = buf;
return dri3_screen_init(screen, &nouveau_dri3_screen_info);
+ } else
+ free(buf);
#endif
return TRUE;