summaryrefslogtreecommitdiff
path: root/src/vulkan
diff options
context:
space:
mode:
authorLuna Nova <git@lunnova.dev>2023-01-15 16:23:32 -0800
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>2023-05-03 20:55:51 -0400
commit208e1824f1ddeb1eef8c65150e81230785881260 (patch)
treec51f6620d712e5354b343b3a054cf05a65c08817 /src/vulkan
parent571ce2e481f1f51d947d062918ad05e309813af0 (diff)
downloadmesa-208e1824f1ddeb1eef8c65150e81230785881260.tar.gz
device_select_layer: add MESA_VK_DEVICE_SELECT_DEBUG which logs why default selection was made
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Reviewed-by: Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19101>
Diffstat (limited to 'src/vulkan')
-rw-r--r--src/vulkan/device-select-layer/device_select_layer.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/vulkan/device-select-layer/device_select_layer.c b/src/vulkan/device-select-layer/device_select_layer.c
index fd5ea6020b0..a25d0690891 100644
--- a/src/vulkan/device-select-layer/device_select_layer.c
+++ b/src/vulkan/device-select-layer/device_select_layer.c
@@ -42,6 +42,7 @@
#include "util/hash_table.h"
#include "vk_util.h"
#include "util/simple_mtx.h"
+#include "util/u_debug.h"
struct instance_info {
PFN_vkDestroyInstance DestroyInstance;
@@ -408,6 +409,11 @@ static int find_non_cpu_skip(struct device_pci_info *pci_infos,
return -1;
}
+static bool should_debug_device_selection() {
+ return debug_get_bool_option("MESA_VK_DEVICE_SELECT_DEBUG", false) ||
+ debug_get_bool_option("DRI_PRIME_DEBUG", false);
+}
+
static uint32_t get_default_device(const struct instance_info *info,
const char *selection,
uint32_t physical_device_count,
@@ -415,6 +421,7 @@ static uint32_t get_default_device(const struct instance_info *info,
{
int default_idx = -1;
const char *dri_prime = getenv("DRI_PRIME");
+ bool debug = should_debug_device_selection();
bool dri_prime_is_one = false;
int cpu_count = 0;
if (dri_prime && !strcmp(dri_prime, "1"))
@@ -434,6 +441,8 @@ static uint32_t get_default_device(const struct instance_info *info,
if (default_idx == -1 && dri_prime && !dri_prime_is_one) {
/* Try DRI_PRIME=vendor_id:device_id */
default_idx = device_select_find_explicit_default(pci_infos, physical_device_count, dri_prime);
+ if (debug && default_idx != -1)
+ fprintf(stderr, "device-select: device_select_find_explicit_default selected %i\n", default_idx);
if (default_idx == -1) {
/* Try DRI_PRIME=pci-xxxx_yy_zz_w */
@@ -441,17 +450,33 @@ static uint32_t get_default_device(const struct instance_info *info,
fprintf(stderr, "device-select: cannot correctly use DRI_PRIME tag\n");
else
default_idx = device_select_find_dri_prime_tag_default(pci_infos, physical_device_count, dri_prime);
+
+ if (debug && default_idx != -1)
+ fprintf(stderr, "device-select: device_select_find_dri_prime_tag_default selected %i\n", default_idx);
}
}
- if (default_idx == -1 && info->has_wayland)
+ if (default_idx == -1 && info->has_wayland) {
default_idx = device_select_find_wayland_pci_default(pci_infos, physical_device_count);
- if (default_idx == -1 && info->has_xcb)
+ if (debug && default_idx != -1)
+ fprintf(stderr, "device-select: device_select_find_wayland_pci_default selected %i\n", default_idx);
+ }
+ if (default_idx == -1 && info->has_xcb) {
default_idx = device_select_find_xcb_pci_default(pci_infos, physical_device_count);
+ if (debug && default_idx != -1)
+ fprintf(stderr, "device-select: device_select_find_xcb_pci_default selected %i\n", default_idx);
+ }
if (default_idx == -1) {
if (info->has_vulkan11 && info->has_pci_bus)
default_idx = device_select_find_boot_vga_default(pci_infos, physical_device_count);
else
default_idx = device_select_find_boot_vga_vid_did(pci_infos, physical_device_count);
+ if (debug && default_idx != -1)
+ fprintf(stderr, "device-select: device_select_find_boot_vga selected %i\n", default_idx);
+ }
+ if (default_idx == -1 && cpu_count) {
+ default_idx = device_select_find_non_cpu(pci_infos, physical_device_count);
+ if (debug && default_idx != -1)
+ fprintf(stderr, "device-select: device_select_find_non_cpu selected %i\n", default_idx);
}
/* If no GPU has been selected so far, select the first non-CPU device. If none are available,
* pick the first CPU device.
@@ -459,14 +484,19 @@ static uint32_t get_default_device(const struct instance_info *info,
if (default_idx == -1) {
default_idx = device_select_find_non_cpu(pci_infos, physical_device_count);
if (default_idx != -1) {
- /* device_select_find_non_cpu picked a default, do nothing */
+ if (debug)
+ fprintf(stderr, "device-select: device_select_find_non_cpu selected %i\n", default_idx);
} else if (cpu_count) {
default_idx = 0;
}
}
/* DRI_PRIME=1 handling - pick any other device than default. */
+ if (dri_prime_is_one && debug)
+ fprintf(stderr, "device-select: DRI_PRIME=1, default_idx so far: %i\n", default_idx);
if (default_idx != -1 && dri_prime_is_one && physical_device_count > (cpu_count + 1)) {
default_idx = find_non_cpu_skip(pci_infos, physical_device_count, default_idx);
+ if (debug && default_idx != -1)
+ fprintf(stderr, "device-select: find_non_cpu_skip selected %i\n", default_idx);
}
free(pci_infos);
return default_idx == -1 ? 0 : default_idx;