loader: simplify loader_get_user_preferred_fd()
Reoder the function a bit to make the code-flow more obvious and short. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Eric Engestrom <eric@engestrom.ch> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4084>
This commit is contained in:
parent
25b2b32588
commit
164f4a9a4a
|
@ -300,8 +300,7 @@ int loader_get_user_preferred_fd(int default_fd, bool *different_device)
|
||||||
const char *dri_prime = getenv("DRI_PRIME");
|
const char *dri_prime = getenv("DRI_PRIME");
|
||||||
char *default_tag, *prime = NULL;
|
char *default_tag, *prime = NULL;
|
||||||
drmDevicePtr devices[MAX_DRM_DEVICES];
|
drmDevicePtr devices[MAX_DRM_DEVICES];
|
||||||
int i, num_devices, fd;
|
int i, num_devices, fd = -1;
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
if (dri_prime)
|
if (dri_prime)
|
||||||
prime = strdup(dri_prime);
|
prime = strdup(dri_prime);
|
||||||
|
@ -320,44 +319,34 @@ int loader_get_user_preferred_fd(int default_fd, bool *different_device)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
num_devices = drmGetDevices2(0, devices, MAX_DRM_DEVICES);
|
num_devices = drmGetDevices2(0, devices, MAX_DRM_DEVICES);
|
||||||
if (num_devices < 0)
|
if (num_devices <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* two format are supported:
|
for (i = 0; i < num_devices; i++) {
|
||||||
|
if (!(devices[i]->available_nodes & 1 << DRM_NODE_RENDER))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* two formats of DRI_PRIME are supported:
|
||||||
* "1": choose any other card than the card used by default.
|
* "1": choose any other card than the card used by default.
|
||||||
* id_path_tag: (for example "pci-0000_02_00_0") choose the card
|
* id_path_tag: (for example "pci-0000_02_00_0") choose the card
|
||||||
* with this id_path_tag.
|
* with this id_path_tag.
|
||||||
*/
|
*/
|
||||||
if (!strcmp(prime,"1")) {
|
if (!strcmp(prime,"1")) {
|
||||||
/* Hmm... detection for 2-7 seems to be broken. Oh well ...
|
if (drm_device_matches_tag(devices[i], default_tag))
|
||||||
* Pick the first render device that is not our own.
|
continue;
|
||||||
*/
|
|
||||||
for (i = 0; i < num_devices; i++) {
|
|
||||||
if (devices[i]->available_nodes & 1 << DRM_NODE_RENDER &&
|
|
||||||
!drm_device_matches_tag(devices[i], default_tag)) {
|
|
||||||
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < num_devices; i++) {
|
if (!drm_device_matches_tag(devices[i], prime))
|
||||||
if (devices[i]->available_nodes & 1 << DRM_NODE_RENDER &&
|
continue;
|
||||||
drm_device_matches_tag(devices[i], prime)) {
|
|
||||||
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found) {
|
|
||||||
drmFreeDevices(devices, num_devices);
|
|
||||||
goto err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = loader_open_device(devices[i]->nodes[DRM_NODE_RENDER]);
|
fd = loader_open_device(devices[i]->nodes[DRM_NODE_RENDER]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
drmFreeDevices(devices, num_devices);
|
drmFreeDevices(devices, num_devices);
|
||||||
|
|
||||||
|
if (i == num_devices)
|
||||||
|
goto err;
|
||||||
|
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue