diff --git a/meson.build b/meson.build index ee570a8f88c3b9d9df25bc2a0549b8e93f0b5ce2..3f5e5c52633b4065bddad8051ed33fc7b5184fc4 100644 --- a/meson.build +++ b/meson.build @@ -24,7 +24,7 @@ add_project_arguments(cc.get_supported_arguments([ ]), language: 'c') dep_wayland_client = dependency('wayland-client', version: '>= 1.20.0') -dep_libdrm = dependency('libdrm', version: '>=2.4.107', required: get_option('drm')) +dep_libdrm = dependency('libdrm', version: '>=2.4.109', required: get_option('drm')) dep_libdrm_version = dep_libdrm.version() config_h = configuration_data() diff --git a/wayland-info/wayland-info.c b/wayland-info/wayland-info.c index 1346b41b58861874ca003fc95d917c95c85d3db8..0560167e0d8aedd3cb1288af724b43e3513b68fe 100644 --- a/wayland-info/wayland-info.c +++ b/wayland-info/wayland-info.c @@ -510,6 +510,34 @@ print_format_and_modifier(uint32_t format, uint64_t modifier) #endif } +static void +print_devid(dev_t devid) +{ + printf("0x%" PRIX64, (uint64_t) devid); + +#if HAVE_LIBDRM + drmDevice *dev = NULL; + if (drmGetDeviceFromDevId(devid, 0, &dev) != 0) { + perror("drmGetDeviceFromDevId failed"); + return; + } + + if (!(dev->available_nodes & (1 << DRM_NODE_PRIMARY))) { + /* Should never happen */ + fprintf(stderr, "Device has no primary node\n"); + return; + } + + printf(" (%s", dev->nodes[DRM_NODE_PRIMARY]); + if (dev->available_nodes & (1 << DRM_NODE_RENDER)) { + printf(" or %s", dev->nodes[DRM_NODE_RENDER]); + } + printf(")"); + + drmFreeDevice(&dev); +#endif +} + static void print_linux_dmabuf_info(void *data) { @@ -520,7 +548,8 @@ print_linux_dmabuf_info(void *data) print_global_info(data); if (dmabuf->main_device) { - printf("\tmain device: 0x%" PRIX64, (uint64_t) dmabuf->main_device); + printf("\tmain device: "); + print_devid(dmabuf->main_device); if (dmabuf->format_map == MAP_FAILED) { printf("\tError: failed to map format table\n"); @@ -536,8 +565,8 @@ print_linux_dmabuf_info(void *data) wl_list_for_each(tranche, &dmabuf->tranches, link) { printf("\n\ttranche"); - printf("\n\t\ttarget device: 0x%" PRIX64, - (uint64_t) tranche->target_device); + printf("\n\t\ttarget device: "); + print_devid(tranche->target_device); printf("\n\t\tflags: "); if (tranche->flags == 0) printf("none");