From 910b53d4989cab654b83cb8adf73d932976c33f8 Mon Sep 17 00:00:00 2001 From: Chris Sarbora Date: Tue, 29 Jul 2025 00:35:33 -0500 Subject: [PATCH] fix dequant_funcs.comp data_a is decorated with layout specifiers, so copying it causes the destination to receive those layout specifiers as well. this is illegal for function-local arrays. spirv accepts this code for compilation, but the resulting bytecode is against the rules so spirv-opt barfs. --- src/ggml-vulkan/vulkan-shaders/dequant_funcs.comp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ggml-vulkan/vulkan-shaders/dequant_funcs.comp b/src/ggml-vulkan/vulkan-shaders/dequant_funcs.comp index 0d9739d406..b880a72918 100644 --- a/src/ggml-vulkan/vulkan-shaders/dequant_funcs.comp +++ b/src/ggml-vulkan/vulkan-shaders/dequant_funcs.comp @@ -442,8 +442,12 @@ vec2 get_dm(uint ib, uint a_offset) { #if defined(DATA_A_IQ1_M) vec2 get_dm(uint ib, uint a_offset) { - const uint16_t[4] scales = data_a[a_offset + ib].scales; - const u16vec4 s = u16vec4(scales[0], scales[1], scales[2], scales[3]) >> 12; + u16vec4 s = u16vec4( + data_a[a_offset + ib].scales[0], + data_a[a_offset + ib].scales[1], + data_a[a_offset + ib].scales[2], + data_a[a_offset + ib].scales[3] + ) >> 12; const float d = float(unpackHalf2x16(s.x | (s.y << 4) | (s.z << 8) | (s.w << 12)).x); return vec2(d, 0); }