From cef48b4cbf7d8fcda55d502e4e972cb070607221 Mon Sep 17 00:00:00 2001 From: Gong-Mi <550230171@qq.com> Date: Mon, 2 Feb 2026 01:11:08 +0800 Subject: [PATCH] ggml-vulkan: move ARM/Qualcomm mul_mat_l restriction to init block Moves the logic that disables large matrix multiplication for ARM and Qualcomm devices from ggml_vk_load_shaders to the device initialization switch block. This fixes stability issues (silent calculation errors) on Mali G720/Immortalis MC12 while adhering to the code structure requested in PR #18493 discussion. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 60b9a8638d..7b8611743d 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -3084,10 +3084,7 @@ static void ggml_vk_load_shaders(vk_device& device) { device->mul_mat_l[i] = false; } - if (device->vendor_id == VK_VENDOR_ID_ARM || device->vendor_id == VK_VENDOR_ID_QUALCOMM) { - device->mul_mat_l[i] = false; - device->mul_mat_id_l[i] = false; - } + // Disable mul_mat_id if not enough shared memory is available if (!ggml_vk_matmul_shmem_support(device, s_warptile_mmqid, true, t)) { @@ -5195,6 +5192,15 @@ static vk_device ggml_vk_get_device(size_t idx) { device->mul_mat_id_m[i] = true; device->mul_mat_id_s[i] = true; break; + case VK_VENDOR_ID_ARM: + case VK_VENDOR_ID_QUALCOMM: + device->mul_mat_l[i] = false; + device->mul_mat_id_l[i] = false; + device->mul_mat_m[i] = true; + device->mul_mat_s[i] = true; + device->mul_mat_id_m[i] = true; + device->mul_mat_id_s[i] = true; + break; case VK_VENDOR_ID_APPLE: device->mul_mat_l[i] = false; device->mul_mat_m[i] = true;