summaryrefslogtreecommitdiff
path: root/recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch')
-rw-r--r--recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch106
1 files changed, 0 insertions, 106 deletions
diff --git a/recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch b/recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch
deleted file mode 100644
index d252b18..0000000
--- a/recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 0f4808856ce42de4e0cf7e0c3af114165c105003 Mon Sep 17 00:00:00 2001
-From: Thierry Reding <treding@nvidia.com>
-Date: Fri, 23 Dec 2016 21:36:00 +0100
-Subject: [PATCH 3/4] loader: Automatic PRIME detection
-
-If a device doesn't support rendering and support for PRIME isn't
-enabled via the DRI_PRIME environment variable or dri.conf, attempt to
-find a render node which can be used to offload rendering.
-
-Signed-off-by: Thierry Reding <treding@nvidia.com>
----
- src/loader/loader.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 67 insertions(+), 4 deletions(-)
-
-diff --git a/src/loader/loader.c b/src/loader/loader.c
-index 5541ccc..19e73a7 100644
---- a/src/loader/loader.c
-+++ b/src/loader/loader.c
-@@ -108,6 +108,71 @@ static char *loader_get_dri_config_device_id(void)
- }
- #endif
-
-+/*
-+ * For all devices that do not support rendering, try to find a different
-+ * device that will.
-+ *
-+ * Note that the absence of a render node doesn't technically imply that
-+ * the device can't render, but in practice this should work out fine.
-+ */
-+static int drm_detect_prime_fd(int default_fd, int *different_device)
-+{
-+ int err, fd = -ENODEV;
-+ drmDevicePtr device;
-+
-+ err = drmGetDevice(default_fd, &device);
-+ if (err < 0)
-+ goto err;
-+
-+ if ((device->available_nodes & (1 << DRM_NODE_RENDER)) == 0) {
-+ unsigned int num_devices, i;
-+ drmDevicePtr *devices;
-+
-+ err = drmGetDevices(NULL, 0);
-+ if (err < 0)
-+ goto err;
-+
-+ num_devices = err;
-+
-+ devices = calloc(num_devices, sizeof(drmDevicePtr));
-+ if (!devices)
-+ goto err;
-+
-+ err = drmGetDevices(devices, num_devices);
-+ if (err < 0) {
-+ free(devices);
-+ goto err;
-+ }
-+
-+ num_devices = err;
-+
-+ for (i = 0; i < num_devices; i++) {
-+ if (devices[i]->available_nodes & (1 << DRM_NODE_RENDER)) {
-+ fd = loader_open_device(devices[i]->nodes[DRM_NODE_RENDER]);
-+ if (fd < 0) {
-+ fd = -errno;
-+ continue;
-+ }
-+
-+ close(default_fd);
-+ break;
-+ }
-+ }
-+
-+ drmFreeDevices(devices, num_devices);
-+ free(devices);
-+ }
-+
-+err:
-+ if (fd < 0) {
-+ *different_device = 0;
-+ return default_fd;
-+ }
-+
-+ *different_device = 1;
-+ return fd;
-+}
-+
- static char *drm_construct_id_path_tag(drmDevicePtr device)
- {
- /* Length of "pci-xxxx_xx_xx_x\0" */
-@@ -170,10 +235,8 @@ int loader_get_user_preferred_fd(int default_fd, int *different_device)
- prime = loader_get_dri_config_device_id();
- #endif
-
-- if (prime == NULL) {
-- *different_device = 0;
-- return default_fd;
-- }
-+ if (prime == NULL || *prime == '\0')
-+ return drm_detect_prime_fd(default_fd, different_device);
-
- default_tag = drm_get_id_path_tag_for_fd(default_fd);
- if (default_tag == NULL)
---
-2.7.4
-