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:
parent
cd39180cfa
commit
a25d4dd276
13
meson.build
13
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 = ''
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue