From 6d172a7480714d3ac0dee6c10718850b4fc84e8e Mon Sep 17 00:00:00 2001 From: "Gilad S." <7817232+giladgd@users.noreply.github.com> Date: Sun, 19 Oct 2025 17:59:40 +0300 Subject: [PATCH 1/4] fix: deduplicate and deprioritize Microsoft Direct3D12 vulkan devices from the `vulkan-dozen` driver --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 21bd052255564..9eb012750a253 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -4733,7 +4733,12 @@ static void ggml_vk_instance_init() { vk::PhysicalDeviceIDProperties old_id; old_props.pNext = &old_id; devices[k].getProperties2(&old_props); - return std::equal(std::begin(old_id.deviceUUID), std::end(old_id.deviceUUID), std::begin(new_id.deviceUUID)); + + bool equals = std::equal(std::begin(old_id.deviceUUID), std::end(old_id.deviceUUID), std::begin(new_id.deviceUUID)); + equals |= old_id.deviceLUIDValid && new_id.deviceLUIDValid && + std::equal(std::begin(old_id.deviceLUID), std::end(old_id.deviceLUID), std::begin(new_id.deviceLUID)); + + return equals; } ); if (old_device == vk_instance.device_indices.end()) { @@ -4771,6 +4776,7 @@ static void ggml_vk_instance_init() { #endif break; } + driver_priorities[vk::DriverId::eMesaDozen] = 4; if (driver_priorities.count(old_driver.driverID)) { old_priority = driver_priorities[old_driver.driverID]; From 0b7454c2212b527052fe2953f32a72f366b39d90 Mon Sep 17 00:00:00 2001 From: "Gilad S." <7817232+giladgd@users.noreply.github.com> Date: Mon, 20 Oct 2025 19:28:53 +0300 Subject: [PATCH 2/4] style: indent --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 9eb012750a253..df69e046c27ae 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -4736,7 +4736,7 @@ static void ggml_vk_instance_init() { bool equals = std::equal(std::begin(old_id.deviceUUID), std::end(old_id.deviceUUID), std::begin(new_id.deviceUUID)); equals |= old_id.deviceLUIDValid && new_id.deviceLUIDValid && - std::equal(std::begin(old_id.deviceLUID), std::end(old_id.deviceLUID), std::begin(new_id.deviceLUID)); + std::equal(std::begin(old_id.deviceLUID), std::end(old_id.deviceLUID), std::begin(new_id.deviceLUID)); return equals; } From 72b1b991dc7bb258d388089c78c209cb54dd074e Mon Sep 17 00:00:00 2001 From: "Gilad S." <7817232+giladgd@users.noreply.github.com> Date: Mon, 20 Oct 2025 20:43:52 +0300 Subject: [PATCH 3/4] fix: decrease priority --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index df69e046c27ae..10190847fbd2c 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -4776,7 +4776,7 @@ static void ggml_vk_instance_init() { #endif break; } - driver_priorities[vk::DriverId::eMesaDozen] = 4; + driver_priorities[vk::DriverId::eMesaDozen] = 100; if (driver_priorities.count(old_driver.driverID)) { old_priority = driver_priorities[old_driver.driverID]; From 99052e27f82ad1e4523f4bb9d37d6e27b8a71cec Mon Sep 17 00:00:00 2001 From: "Gilad S." <7817232+giladgd@users.noreply.github.com> Date: Sat, 25 Oct 2025 19:46:54 +0300 Subject: [PATCH 4/4] fix: switch to `||` --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 10190847fbd2c..bdb24a9efcb25 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -4735,8 +4735,10 @@ static void ggml_vk_instance_init() { devices[k].getProperties2(&old_props); bool equals = std::equal(std::begin(old_id.deviceUUID), std::end(old_id.deviceUUID), std::begin(new_id.deviceUUID)); - equals |= old_id.deviceLUIDValid && new_id.deviceLUIDValid && - std::equal(std::begin(old_id.deviceLUID), std::end(old_id.deviceLUID), std::begin(new_id.deviceLUID)); + equals = equals || ( + old_id.deviceLUIDValid && new_id.deviceLUIDValid && + std::equal(std::begin(old_id.deviceLUID), std::end(old_id.deviceLUID), std::begin(new_id.deviceLUID)) + ); return equals; }