mirror of
git://slackware.nl/current.git
synced 2024-12-28 09:59:53 +01:00
ec86cffd8e
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.
78 lines
3.1 KiB
Diff
78 lines
3.1 KiB
Diff
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)
|