On 21 July 2016 at 14:57, Adam Jackson <a...@redhat.com> wrote: > On Fri, 2015-07-24 at 16:20 +0200, Jonny Lamb wrote: >> This adds a new vfunc to _EGLDriver, QueryDeviceName, which should >> return a const string of the device name (usually in the format >> '/dev/dri/cardN'). >> >> The EGLDevice could perhaps be cached in the EGLDisplay but there >> usually aren't loads of devices and this lookup isn't particularly >> costly so leave it as is for now. >> >> Right now this only works with the egl_dri2 driver. > > Ancient thread I know, but this doesn't work, at least in my wayland > session. > >> static EGLBoolean >> +_eglQueryDeviceFromDisplay(_EGLDeviceInfo *info, >> + _EGLDriver *drv, >> + _EGLDisplay *disp, >> + EGLAttrib *value) >> +{ >> +#ifdef HAVE_LIBUDEV >> + const char *device_name = NULL; >> + _EGLDevice *dev; >> + UDEV_SYMBOL(const char *, udev_device_get_property_value, >> + (struct udev_device *, const char *)); >> + >> + if (dlsym_failed) >> + return EGL_FALSE; >> + >> + if (!drv->QueryDeviceName) >> + return EGL_FALSE; >> + >> + device_name = drv->QueryDeviceName(disp); > > This is /dev/dri/renderD128... > >> + mtx_lock(_eglGlobal.Mutex); >> + >> + assert(info->got_devices); >> + >> + for (dev = info->devices; dev; dev = dev->Next) { >> + const char *devname = udev_device_get_property_value( >> + dev->Info, "DEVNAME"); > > And this is /dev/dri/card0, so querying the display will always fail. > > Obviously I can paper over this when there's only one device in the > list, but the whole reason I want this is to make multi-GPU work > better. Any ideas on a better approach here? > I'd suggest opting for the drmDevice libdrm API. It can provide a list of devices with all the nodes and other misc info. Thus we could use the render/card/other node as any point as needed.
-Emil _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev