From a25d4dd27615ff1ff2390402de57213ca35600a1 Mon Sep 17 00:00:00 2001 From: Leandro Ribeiro Date: Mon, 15 Nov 2021 13:50:50 -0300 Subject: [PATCH] loader: add function to get render node from dev_t Add function loader_get_render_node() to help us to get a render node from dev_t. If the device does not expose a render node, this new function returns NULL. As this function uses drmGetDeviceFromDevId(), we bump libdrm minimal version to 2.4.109. Signed-off-by: Leandro Ribeiro Reviewed-by: Daniel Stone Part-of: --- meson.build | 13 +------------ src/loader/loader.c | 26 ++++++++++++++++++++++++++ src/loader/loader.h | 4 ++++ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/meson.build b/meson.build index 9b4e5e28864..d249418ea60 100644 --- a/meson.build +++ b/meson.build @@ -1584,7 +1584,7 @@ _drm_amdgpu_ver = '2.4.107' _drm_radeon_ver = '2.4.71' _drm_nouveau_ver = '2.4.102' _drm_intel_ver = '2.4.75' -_drm_ver = '2.4.81' +_drm_ver = '2.4.109' _libdrm_checks = [ ['intel', with_dri_i915 or with_gallium_i915], @@ -1594,17 +1594,6 @@ _libdrm_checks = [ ['nouveau', (with_gallium_nouveau or with_dri_nouveau)], ] -# VC4 only needs core libdrm support of this version, not a libdrm_vc4 -# library. -if with_gallium_vc4 - _drm_ver = '2.4.89' -endif - -# etnaviv only needs core libdrm -if with_gallium_etnaviv - _drm_ver = '2.4.89' -endif - # Loop over the enables versions and get the highest libdrm requirement for all # active drivers. _drm_blame = '' diff --git a/src/loader/loader.c b/src/loader/loader.c index 945c99fb4bf..c9a499c6fc2 100644 --- a/src/loader/loader.c +++ b/src/loader/loader.c @@ -178,6 +178,26 @@ loader_open_render_node(const char *name) return fd; } +char * +loader_get_render_node(dev_t device) +{ + char *render_node = NULL; + drmDevicePtr dev_ptr; + + if (drmGetDeviceFromDevId(device, 0, &dev_ptr) < 0) + return NULL; + + if (dev_ptr->available_nodes & (1 << DRM_NODE_RENDER)) { + render_node = strdup(dev_ptr->nodes[DRM_NODE_RENDER]); + if (!render_node) + log_(_LOADER_DEBUG, "MESA-LOADER: failed to allocate memory for render node\n"); + } + + drmFreeDevice(&dev_ptr); + + return render_node; +} + #ifdef USE_DRICONF static const driOptionDescription __driConfigOptionsLoader[] = { DRI_CONF_SECTION_INITIALIZATION @@ -376,6 +396,12 @@ loader_open_render_node(const char *name) return -1; } +char * +loader_get_render_node(dev_t device) +{ + return NULL; +} + int loader_get_user_preferred_fd(int default_fd, bool *different_device) { *different_device = false; diff --git a/src/loader/loader.h b/src/loader/loader.h index 8ce001cb7e6..0305e27dffa 100644 --- a/src/loader/loader.h +++ b/src/loader/loader.h @@ -28,6 +28,7 @@ #define LOADER_H #include +#include #ifdef __cplusplus extern "C" { @@ -43,6 +44,9 @@ loader_open_device(const char *); int loader_open_render_node(const char *name); +char * +loader_get_render_node(dev_t device); + bool loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id);