diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index ebbb412e55f..2fd8d555d60 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -3114,7 +3114,11 @@ static void ggml_vk_load_shaders(vk_device& device) { rm_stdq = 2; uint32_t rm_iq = 2 * rm_kq; - const bool use_subgroups = device->subgroup_arithmetic && device->architecture != vk_device_architecture::AMD_GCN; + const bool amd_gcn_bad_subgroup_driver = + device->architecture == vk_device_architecture::AMD_GCN && + (device->driver_id == vk::DriverId::eMesaRadv || device->driver_id == vk::DriverId::eAmdOpenSource); + + const bool use_subgroups = device->subgroup_arithmetic && !amd_gcn_bad_subgroup_driver; // Ensure a subgroup size >= 16 is available const bool use_subgroups16 = use_subgroups && subgroup_min_size_16;