Skip to content

Commit c94702b

Browse files
committed
Make sure we only return the supported types for the GET_ROWS kernel.
Signed-off-by: Marcus Edel <[email protected]>
1 parent 2cbf514 commit c94702b

File tree

1 file changed

+45
-3
lines changed

1 file changed

+45
-3
lines changed

ggml/src/ggml-metal/ggml-metal.m

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2002,8 +2002,16 @@ static bool ggml_metal_supports_op(const struct ggml_backend_metal_device_contex
20022002
return true;
20032003
case GGML_OP_MUL_MAT:
20042004
case GGML_OP_MUL_MAT_ID:
2005-
return has_simdgroup_reduction &&
2006-
(op->src[0]->type != GGML_TYPE_F32 || op->src[1]->type == GGML_TYPE_F32);
2005+
{
2006+
const enum ggml_type src0_type = op->src[0]->type;
2007+
2008+
if (src0_type == GGML_TYPE_TQ1_0 || src0_type == GGML_TYPE_TQ2_0) {
2009+
return false;
2010+
}
2011+
2012+
return has_simdgroup_reduction &&
2013+
(src0_type != GGML_TYPE_F32 || op->src[1]->type == GGML_TYPE_F32);
2014+
}
20072015
case GGML_OP_CPY:
20082016
case GGML_OP_DUP:
20092017
case GGML_OP_CONT:
@@ -2072,7 +2080,41 @@ static bool ggml_metal_supports_op(const struct ggml_backend_metal_device_contex
20722080
case GGML_OP_DIAG_MASK_INF:
20732081
case GGML_OP_GET_ROWS:
20742082
{
2075-
return op->ne[3] == 1;
2083+
if (op->ne[3] != 1) {
2084+
return false;
2085+
}
2086+
2087+
const enum ggml_type src0_type = op->src[0]->type;
2088+
2089+
switch (src0_type) {
2090+
case GGML_TYPE_F32:
2091+
case GGML_TYPE_F16:
2092+
case GGML_TYPE_BF16:
2093+
case GGML_TYPE_Q4_0:
2094+
case GGML_TYPE_Q4_1:
2095+
case GGML_TYPE_Q5_0:
2096+
case GGML_TYPE_Q5_1:
2097+
case GGML_TYPE_Q8_0:
2098+
case GGML_TYPE_MXFP4:
2099+
case GGML_TYPE_Q2_K:
2100+
case GGML_TYPE_Q3_K:
2101+
case GGML_TYPE_Q4_K:
2102+
case GGML_TYPE_Q5_K:
2103+
case GGML_TYPE_Q6_K:
2104+
case GGML_TYPE_IQ2_XXS:
2105+
case GGML_TYPE_IQ2_XS:
2106+
case GGML_TYPE_IQ3_XXS:
2107+
case GGML_TYPE_IQ3_S:
2108+
case GGML_TYPE_IQ2_S:
2109+
case GGML_TYPE_IQ1_S:
2110+
case GGML_TYPE_IQ1_M:
2111+
case GGML_TYPE_IQ4_NL:
2112+
case GGML_TYPE_IQ4_XS:
2113+
case GGML_TYPE_I32:
2114+
return true;
2115+
default:
2116+
return false;
2117+
}
20762118
}
20772119
case GGML_OP_SET_ROWS:
20782120
{

0 commit comments

Comments
 (0)