Commit 08ffba21e for llama.cpp
commit 08ffba21e5c2f1728b6b405c05ff3913f65706d4
Author: Amadeus dyw <74057036+SG-Amadeus@users.noreply.github.com>
Date: Mon Oct 12 14:00:26 2026 +0800
vulkan: use ternary expressions to avoid switch lowering for CM2 quant block size (#30164)
* vulkan: specialize quant block size for CM2 matmul
* vulkan: use ternary expressions to avoid switch lowering for CM2 quant block size
* vulkan: clarify CM2 quant block size comment
diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp
index e3f1dd5ab..89022f047 100644
--- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp
+++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp
@@ -49,17 +49,12 @@ layout (constant_id = 6) const uint subgroup_size = 32;
#ifdef MULMAT_QUANT
uint mm_quant_k() {
- switch (MmTypeA) {
- case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: case GGML_TYPE_Q5_0: case GGML_TYPE_Q5_1:
- case GGML_TYPE_Q8_0:
- return 32u;
- case GGML_TYPE_Q1_0:
- return 128u;
- case GGML_TYPE_Q2_0:
- return 64u;
- default:
- return 256u;
- }
+ // Use ternary expressions instead of a switch to keep qk as a specialization-constant expression.
+ return (MmTypeA == GGML_TYPE_Q1_0) ? 128u :
+ (MmTypeA == GGML_TYPE_Q2_0) ? 64u :
+ ((MmTypeA == GGML_TYPE_Q4_0 || MmTypeA == GGML_TYPE_Q4_1 ||
+ MmTypeA == GGML_TYPE_Q5_0 || MmTypeA == GGML_TYPE_Q5_1 ||
+ MmTypeA == GGML_TYPE_Q8_0) ? 32u : 256u);
}
#endif