From ec86cffd8eec12d657afec63d5da1ad84b43d510 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Thu, 14 Jan 2021 20:36:17 +0000 Subject: Thu Jan 14 20:36:17 UTC 2021 a/gptfdisk-1.0.6-x86_64-1.txz: Upgraded. a/usb_modeswitch-2.6.1-x86_64-1.txz: Upgraded. ap/nano-5.5-x86_64-1.txz: Upgraded. l/Mako-1.1.4-x86_64-1.txz: Upgraded. l/gst-plugins-base-1.18.3-x86_64-1.txz: Upgraded. l/gst-plugins-good-1.18.3-x86_64-1.txz: Upgraded. l/gst-plugins-libav-1.18.3-x86_64-1.txz: Upgraded. l/gstreamer-1.18.3-x86_64-1.txz: Upgraded. l/system-config-printer-1.5.15-x86_64-1.txz: Upgraded. l/wavpack-5.4.0-x86_64-1.txz: Upgraded. WavPack 5.4.0 fixes an issue where a specially crafted WAV file could cause the wavpack command-line program to crash with an out-of-bounds write. For more information, see: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-35738 (* Security fix *) l/xapian-core-1.4.18-x86_64-1.txz: Upgraded. tcl/tk-8.6.11.1-x86_64-1.txz: Upgraded. x/mesa-20.3.3-x86_64-1.txz: Upgraded. Added options: -Dvulkan-device-select-layer=true -Dopengl=true -Dglx=dri Add a symlink for libGLX_system.so.0. Use a more complete patch for converting from drmPciDeviceInfo to uint32_t in device_select.h and device_select_layer.c. xfce/thunar-4.16.2-x86_64-1.txz: Upgraded. --- source/x/mesa/mesa.SlackBuild | 12 +++- .../patches/MESA_VK_DEVICE_SELECT.uint32_t.patch | 78 ++++++++++++++++++++++ ....f93b7d14d66d8ba70d44772d1a1b6696310b7d17.patch | 48 ------------- 3 files changed, 89 insertions(+), 49 deletions(-) create mode 100644 source/x/mesa/patches/MESA_VK_DEVICE_SELECT.uint32_t.patch delete mode 100644 source/x/mesa/patches/mesa.f93b7d14d66d8ba70d44772d1a1b6696310b7d17.patch (limited to 'source/x/mesa') diff --git a/source/x/mesa/mesa.SlackBuild b/source/x/mesa/mesa.SlackBuild index 57802490..8cbc8b6f 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 00000000..8f9bc231 --- /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 ++#include + #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 bf3483a4..00000000 --- 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 -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 -Part-of: ---- - 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 -+#include - #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 - - -- cgit v1.2.3