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 <leandro.ribeiro@collabora.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11248>
This commit is contained in:
Leandro Ribeiro 2021-11-15 13:50:50 -03:00 committed by Marge Bot
parent cd39180cfa
commit a25d4dd276
3 changed files with 31 additions and 12 deletions

View File

@ -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 = ''

View File

@ -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;

View File

@ -28,6 +28,7 @@
#define LOADER_H
#include <stdbool.h>
#include <sys/stat.h>
#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);