mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-17 19:00:33 +01:00
egl/surfaceless: Use EGL DeviceList instead of drmGetDevices2()
surfaceless_probe_device() lists all of the DRM devices available, but since EGL already already has created such a list use that instead. Signed-off-by: Robert Foss <rfoss@kernel.org> Reviewed-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23742>
This commit is contained in:
parent
cd52762bb6
commit
a2aea26727
1 changed files with 21 additions and 24 deletions
|
|
@ -34,6 +34,7 @@
|
|||
#include <sys/types.h>
|
||||
|
||||
#include "egl_dri2.h"
|
||||
#include "eglglobals.h"
|
||||
#include "kopper_interface.h"
|
||||
#include "loader.h"
|
||||
|
||||
|
|
@ -221,32 +222,26 @@ static const __DRIextension *swrast_loader_extensions[] = {
|
|||
static bool
|
||||
surfaceless_probe_device(_EGLDisplay *disp, bool swrast)
|
||||
{
|
||||
#define MAX_DRM_DEVICES 64
|
||||
const unsigned node_type = swrast ? DRM_NODE_PRIMARY : DRM_NODE_RENDER;
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
drmDevicePtr device, devices[MAX_DRM_DEVICES] = {NULL};
|
||||
int i, num_devices;
|
||||
_EGLDevice *dev_list = _eglGlobal.DeviceList;
|
||||
drmDevicePtr device;
|
||||
|
||||
num_devices = drmGetDevices2(0, devices, ARRAY_SIZE(devices));
|
||||
if (num_devices < 0)
|
||||
return false;
|
||||
while (dev_list) {
|
||||
if (!_eglDeviceSupports(dev_list, _EGL_DEVICE_DRM))
|
||||
goto next;
|
||||
|
||||
for (i = 0; i < num_devices; ++i) {
|
||||
device = devices[i];
|
||||
device = _eglDeviceDrm(dev_list);
|
||||
assert(device);
|
||||
|
||||
if (!(device->available_nodes & (1 << node_type)))
|
||||
continue;
|
||||
goto next;
|
||||
|
||||
dri2_dpy->fd_render_gpu = loader_open_device(device->nodes[node_type]);
|
||||
if (dri2_dpy->fd_render_gpu < 0)
|
||||
continue;
|
||||
goto next;
|
||||
|
||||
disp->Device = _eglAddDevice(dri2_dpy->fd_render_gpu, swrast);
|
||||
if (!disp->Device) {
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
continue;
|
||||
}
|
||||
disp->Device = dev_list;
|
||||
|
||||
char *driver_name = loader_get_driver_for_fd(dri2_dpy->fd_render_gpu);
|
||||
if (swrast) {
|
||||
|
|
@ -264,24 +259,26 @@ surfaceless_probe_device(_EGLDisplay *disp, bool swrast)
|
|||
dri2_dpy->driver_name = driver_name;
|
||||
}
|
||||
|
||||
if (dri2_dpy->driver_name && dri2_load_driver_dri3(disp))
|
||||
if (dri2_dpy->driver_name && dri2_load_driver_dri3(disp)) {
|
||||
if (swrast)
|
||||
dri2_dpy->loader_extensions = swrast_loader_extensions;
|
||||
else
|
||||
dri2_dpy->loader_extensions = image_loader_extensions;
|
||||
break;
|
||||
}
|
||||
|
||||
free(dri2_dpy->driver_name);
|
||||
dri2_dpy->driver_name = NULL;
|
||||
close(dri2_dpy->fd_render_gpu);
|
||||
dri2_dpy->fd_render_gpu = -1;
|
||||
|
||||
next:
|
||||
dev_list = _eglDeviceNext(dev_list);
|
||||
}
|
||||
drmFreeDevices(devices, num_devices);
|
||||
|
||||
if (i == num_devices)
|
||||
if (!dev_list)
|
||||
return false;
|
||||
|
||||
if (swrast)
|
||||
dri2_dpy->loader_extensions = swrast_loader_extensions;
|
||||
else
|
||||
dri2_dpy->loader_extensions = image_loader_extensions;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue