summaryrefslogtreecommitdiffstats
path: root/source/x
diff options
context:
space:
mode:
Diffstat (limited to 'source/x')
-rwxr-xr-xsource/x/mesa/mesa.SlackBuild12
-rw-r--r--source/x/mesa/patches/MESA_VK_DEVICE_SELECT.uint32_t.patch78
-rw-r--r--source/x/mesa/patches/mesa.f93b7d14d66d8ba70d44772d1a1b6696310b7d17.patch48
3 files changed, 89 insertions, 49 deletions
diff --git a/source/x/mesa/mesa.SlackBuild b/source/x/mesa/mesa.SlackBuild
index 578024903..8cbc8b6fd 100755
--- a/source/x/mesa/mesa.SlackBuild
+++ b/source/x/mesa/mesa.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -124,6 +124,7 @@ meson setup \
-Dosmesa=gallium \
-Ddri-drivers=$DRI_DRIVERS \
-Dgallium-drivers=$GALLIUM_DRIVERS \
+ -Dvulkan-device-select-layer=true \
-Dglvnd=true \
-Dllvm=enabled \
-Dshared-llvm=enabled \
@@ -131,6 +132,8 @@ meson setup \
-Degl=enabled \
-Dgles1=enabled \
-Dgles2=enabled \
+ -Dopengl=true \
+ -Dglx=dri \
.. || exit 1
"${NINJA:=ninja}" $NUMJOBS || exit 1
DESTDIR=$PKG $NINJA install || exit 1
@@ -141,6 +144,13 @@ if [ -r $PKG/etc/drirc ]; then
mv $PKG/etc/drirc $PKG/etc/drirc.new
fi
+# Add a default provider for glvnd when the vendor cannot be determined:
+( cd $PKG/usr/lib${LIBDIRSUFFIX}
+ if [ ! -r libGLX_system.so.0 ]; then
+ ln -sf libGLX_mesa.so.0 libGLX_system.so.0
+ fi
+)
+
if [ "$BUILD_DEMOS" = "YES" ]; then
# Now build/install a small subset of the demos:
export CWD SLKCFLAGS NUMJOBS PKG
diff --git a/source/x/mesa/patches/MESA_VK_DEVICE_SELECT.uint32_t.patch b/source/x/mesa/patches/MESA_VK_DEVICE_SELECT.uint32_t.patch
new file mode 100644
index 000000000..8f9bc2312
--- /dev/null
+++ b/source/x/mesa/patches/MESA_VK_DEVICE_SELECT.uint32_t.patch
@@ -0,0 +1,78 @@
+diff --git a/src/vulkan/device-select-layer/device_select.h b/src/vulkan/device-select-layer/device_select.h
+index 2335070..8debb77 100644
+--- a/src/vulkan/device-select-layer/device_select.h
++++ b/src/vulkan/device-select-layer/device_select.h
+@@ -24,10 +24,18 @@
+ #define DEVICE_SELECT_H
+
+ #include <stdbool.h>
++#include <stdint.h>
+ #include "xf86drm.h"
+
++/* We don't use `drmPciDeviceInfo` because it uses 16-bit ids,
++ * instead of Vulkan's 32-bit ones */
++struct device_info {
++ uint32_t vendor_id;
++ uint32_t device_id;
++};
++
+ struct device_pci_info {
+- drmPciDeviceInfo dev_info;
++ struct device_info dev_info;
+ drmPciBusInfo bus_info;
+ bool has_bus_info;
+ bool cpu_device;
+diff --git a/src/vulkan/device-select-layer/device_select_layer.c b/src/vulkan/device-select-layer/device_select_layer.c
+index 5b708bc..bd18511 100644
+--- a/src/vulkan/device-select-layer/device_select_layer.c
++++ b/src/vulkan/device-select-layer/device_select_layer.c
+@@ -222,7 +222,7 @@ static void print_gpu(const struct instance_info *info, unsigned index, VkPhysic
+ type = "CPU";
+ break;
+ }
+- fprintf(stderr, " GPU %d: %x:%x \"%s\" %s", index, properties.properties.vendorID,
++ fprintf(stderr, " GPU %d: 0x%04x:0x%04x \"%s\" %s", index, properties.properties.vendorID,
+ properties.properties.deviceID, properties.properties.deviceName, type);
+ if (info->has_pci_bus)
+ fprintf(stderr, " %04x:%02x:%02x.%x", ext_pci_properties.pciDomain,
+@@ -267,18 +267,18 @@ static int device_select_find_explicit_default(struct device_pci_info *pci_infos
+ uint32_t device_count,
+ const char *selection)
+ {
+- int default_idx = -1;
+- unsigned vendor_id, device_id;
++ uint32_t vendor_id, device_id;
+ int matched = sscanf(selection, "%x:%x", &vendor_id, &device_id);
+- if (matched != 2)
+- return default_idx;
++ if (matched != 2) {
++ return -1;
++ }
+
+ for (unsigned i = 0; i < device_count; ++i) {
+ if (pci_infos[i].dev_info.vendor_id == vendor_id &&
+ pci_infos[i].dev_info.device_id == device_id)
+- default_idx = i;
++ return i;
+ }
+- return default_idx;
++ return -1;
+ }
+
+ static int device_select_find_dri_prime_tag_default(struct device_pci_info *pci_infos,
+@@ -378,8 +378,14 @@ static uint32_t get_default_device(const struct instance_info *info,
+ cpu_count += fill_drm_device_info(info, &pci_infos[i], pPhysicalDevices[i]) ? 1 : 0;
+ }
+
+- if (selection)
++ if (selection) {
+ default_idx = device_select_find_explicit_default(pci_infos, physical_device_count, selection);
++ if (default_idx == -1) {
++ fprintf(stderr, "device-select: cannot find device vendorID:deviceID match "
++ "using MESA_VK_DEVICE_SELECT=%s. Use 'list' for available devices.\n", selection);
++ exit(0);
++ }
++ }
+ if (default_idx == -1 && info->has_pci_bus && dri_prime && !dri_prime_is_one)
+ default_idx = device_select_find_dri_prime_tag_default(pci_infos, physical_device_count, dri_prime);
+ if (default_idx == -1 && info->has_wayland)
diff --git a/source/x/mesa/patches/mesa.f93b7d14d66d8ba70d44772d1a1b6696310b7d17.patch b/source/x/mesa/patches/mesa.f93b7d14d66d8ba70d44772d1a1b6696310b7d17.patch
deleted file mode 100644
index bf3483a41..000000000
--- a/source/x/mesa/patches/mesa.f93b7d14d66d8ba70d44772d1a1b6696310b7d17.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From f93b7d14d66d8ba70d44772d1a1b6696310b7d17 Mon Sep 17 00:00:00 2001
-From: Witold Baryluk <witold.baryluk@gmail.com>
-Date: Mon, 7 Dec 2020 20:45:42 +0000
-Subject: [PATCH] vulkan/device_select: Store Vulkan vendorID and deviceID as
- uint32_t
-
-Vulkan uses 32-bit IDs, compared to PCI/USB 16-bit ones.
-
-Some driver vendorIDs do exceed 0xffff, including MESA (used by lavapipe).
-
-Without this, the value will be truncated, and device select layer
-will not match expected (or any) device.
-
-Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3935
-Reviewed-by: Dave Airlie <airlied@redhat.com>
-Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7977>
----
- src/vulkan/device-select-layer/device_select.h | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-diff --git a/src/vulkan/device-select-layer/device_select.h b/src/vulkan/device-select-layer/device_select.h
-index 23350707a33..248878fbc71 100644
---- a/src/vulkan/device-select-layer/device_select.h
-+++ b/src/vulkan/device-select-layer/device_select.h
-@@ -24,10 +24,18 @@
- #define DEVICE_SELECT_H
-
- #include <stdbool.h>
-+#include <stdint.h>
- #include "xf86drm.h"
-
-+/* We don't use `drmPciDeviceInfo` because it uses 16-bit ids,
-+ * instead of Vulkan's 32-bit ones. */
-+struct device_info {
-+ uint32_t vendor_id;
-+ uint32_t device_id;
-+};
-+
- struct device_pci_info {
-- drmPciDeviceInfo dev_info;
-+ struct device_info dev_info;
- drmPciBusInfo bus_info;
- bool has_bus_info;
- bool cpu_device;
---
-GitLab
-
-