From a2e6a1f0dbd3e4d86dab12dd8ac0f763b0a12f3b Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sun, 15 Jan 2023 16:12:59 -0800 Subject: [PATCH] device_select_layer: pick a default device before applying DRI_PRIME This ensures DRI_PRIME works if there are multiple CPU devices available Suggested by @pepp Fixes: afa1fba1 ("vulkan/device_select: don't pick a cpu driver as the default") Reviewed-by: Mike Blumenkrantz Reviewed-by: Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: (cherry picked from commit 571ce2e481f1f51d947d062918ad05e309813af0) --- .pick_status.json | 2 +- src/vulkan/device-select-layer/device_select_layer.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 0a0864c1eed0a..ace7e911fcd06 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -6464,7 +6464,7 @@ "description": "device_select_layer: pick a default device before applying DRI_PRIME", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "afa1fba198f44b904efe6dddb323679c105dcfdf", "notes": null diff --git a/src/vulkan/device-select-layer/device_select_layer.c b/src/vulkan/device-select-layer/device_select_layer.c index cb187c240f431..868d2ea8d15f6 100644 --- a/src/vulkan/device-select-layer/device_select_layer.c +++ b/src/vulkan/device-select-layer/device_select_layer.c @@ -452,8 +452,17 @@ static uint32_t get_default_device(const struct instance_info *info, else default_idx = device_select_find_boot_vga_vid_did(pci_infos, physical_device_count); } - if (default_idx == -1 && cpu_count) + /* If no GPU has been selected so far, select the first non-CPU device. If none are available, + * pick the first CPU device. + */ + 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 */ + } else if (cpu_count) { + default_idx = 0; + } + } /* DRI_PRIME=1 handling - pick any other device than default. */ 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);