hanzo-ml 0.11.76

Fast multi-backend tensor & ML framework for Rust (CPU/CUDA/Metal/Vulkan/ROCm) with quantization — the compute core of the Hanzo stack.
Documentation
#version 450
// IQ2_S matrix-vector (decode). GGUF IQ2_S super-block = 82 bytes: d (f16, byte 0..2) + qs[64]
// (byte 2..66: qs[0..32) grid-index low bytes, qs[32..64) sign bytes) + qh[8] (byte 66..74) +
// scales[8] (byte 74..82). 82 is not u32-aligned -> loader repacks to a padded 84-byte / 21-u32
// stride. Per 32-weight sub-block e: nibble scale sc=scales[e] (l<2 low / l>=2 high), db=
// d*(0.5+nib)*0.25; 10-bit grid index idx = qs[4e+l] | ((qh[e] << (8-2l)) & 0x300) -> 8-byte
// IQ2S_GRID entry; sign byte = qs[32+4e+l] directly. element j=lane&7: g=byte j, sign=bit j.
// Byte-exact with k_quants/iq_quants BlockIQ2s::to_float. One invocation computes one output row.
#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0) readonly buffer W { uint   w[]; };  // IQ2_S blocks, 21 u32 / 256-block
layout(set = 0, binding = 1) readonly buffer X { float  x[]; };
layout(set = 0, binding = 2) writeonly buffer Y { float y[]; };
layout(push_constant) uniform Pc { uint nout; uint k; };

const uint BLK_U32 = 21u;   // 84 bytes / 4 (82 real + 2 pad)

// IQ2S_GRID: 1024 u64 entries (2 u32 each); signs are direct bytes (no KSIGNS)
const uint IQ2S_GRID[2048] = uint[2048](
    0x08080808u, 0x08080808u, 0x0808082bu, 0x08080808u, 0x08081919u, 0x08080808u, 0x08082b08u, 0x08080808u, 0x08082b2bu,
    0x08080808u, 0x08190819u, 0x08080808u, 0x08191908u, 0x08080808u, 0x0819192bu, 0x08080808u, 0x08192b19u, 0x08080808u,
    0x082b0808u, 0x08080808u, 0x082b082bu, 0x08080808u, 0x082b1919u, 0x08080808u, 0x082b2b08u, 0x08080808u, 0x19080819u,
    0x08080808u, 0x19081908u, 0x08080808u, 0x1908192bu, 0x08080808u, 0x19082b19u, 0x08080808u, 0x19190808u, 0x08080808u,
    0x1919082bu, 0x08080808u, 0x19191919u, 0x08080808u, 0x19192b08u, 0x08080808u, 0x192b0819u, 0x08080808u, 0x192b1908u,
    0x08080808u, 0x192b192bu, 0x08080808u, 0x192b2b19u, 0x08080808u, 0x2b080808u, 0x08080808u, 0x2b08082bu, 0x08080808u,
    0x2b081919u, 0x08080808u, 0x2b082b08u, 0x08080808u, 0x2b190819u, 0x08080808u, 0x2b191908u, 0x08080808u, 0x2b2b0808u,
    0x08080808u, 0x2b2b1919u, 0x08080808u, 0x2b2b2b2bu, 0x08080808u, 0x08080819u, 0x08080819u, 0x08081908u, 0x08080819u,
    0x0808192bu, 0x08080819u, 0x08082b19u, 0x08080819u, 0x08190808u, 0x08080819u, 0x0819082bu, 0x08080819u, 0x08191919u,
    0x08080819u, 0x08192b08u, 0x08080819u, 0x082b0819u, 0x08080819u, 0x082b1908u, 0x08080819u, 0x19080808u, 0x08080819u,
    0x1908082bu, 0x08080819u, 0x19081919u, 0x08080819u, 0x19082b08u, 0x08080819u, 0x19190819u, 0x08080819u, 0x19191908u,
    0x08080819u, 0x1919192bu, 0x08080819u, 0x19192b19u, 0x08080819u, 0x192b0808u, 0x08080819u, 0x192b1919u, 0x08080819u,
    0x192b2b08u, 0x08080819u, 0x2b080819u, 0x08080819u, 0x2b081908u, 0x08080819u, 0x2b190808u, 0x08080819u, 0x2b19082bu,
    0x08080819u, 0x2b191919u, 0x08080819u, 0x2b2b0819u, 0x08080819u, 0x2b2b1908u, 0x08080819u, 0x08080808u, 0x0808082bu,
    0x0808082bu, 0x0808082bu, 0x08081919u, 0x0808082bu, 0x08082b08u, 0x0808082bu, 0x08190819u, 0x0808082bu, 0x08191908u,
    0x0808082bu, 0x082b0808u, 0x0808082bu, 0x082b2b2bu, 0x0808082bu, 0x19080819u, 0x0808082bu, 0x19081908u, 0x0808082bu,
    0x1908192bu, 0x0808082bu, 0x19082b19u, 0x0808082bu, 0x19190808u, 0x0808082bu, 0x19191919u, 0x0808082bu, 0x2b080808u,
    0x0808082bu, 0x2b081919u, 0x0808082bu, 0x2b082b2bu, 0x0808082bu, 0x2b191908u, 0x0808082bu, 0x2b2b082bu, 0x0808082bu,
    0x08080819u, 0x08081908u, 0x08081908u, 0x08081908u, 0x0808192bu, 0x08081908u, 0x08082b19u, 0x08081908u, 0x08190808u,
    0x08081908u, 0x0819082bu, 0x08081908u, 0x08191919u, 0x08081908u, 0x08192b08u, 0x08081908u, 0x082b0819u, 0x08081908u,
    0x082b1908u, 0x08081908u, 0x082b192bu, 0x08081908u, 0x082b2b19u, 0x08081908u, 0x19080808u, 0x08081908u, 0x1908082bu,
    0x08081908u, 0x19081919u, 0x08081908u, 0x19082b08u, 0x08081908u, 0x19082b2bu, 0x08081908u, 0x19190819u, 0x08081908u,
    0x19191908u, 0x08081908u, 0x1919192bu, 0x08081908u, 0x19192b19u, 0x08081908u, 0x192b0808u, 0x08081908u, 0x192b082bu,
    0x08081908u, 0x192b1919u, 0x08081908u, 0x2b080819u, 0x08081908u, 0x2b081908u, 0x08081908u, 0x2b08192bu, 0x08081908u,
    0x2b082b19u, 0x08081908u, 0x2b190808u, 0x08081908u, 0x2b191919u, 0x08081908u, 0x2b192b08u, 0x08081908u, 0x2b2b0819u,
    0x08081908u, 0x2b2b1908u, 0x08081908u, 0x08080808u, 0x08081919u, 0x0808082bu, 0x08081919u, 0x08081919u, 0x08081919u,
    0x08082b08u, 0x08081919u, 0x08082b2bu, 0x08081919u, 0x08190819u, 0x08081919u, 0x08191908u, 0x08081919u, 0x0819192bu,
    0x08081919u, 0x08192b19u, 0x08081919u, 0x082b0808u, 0x08081919u, 0x082b1919u, 0x08081919u, 0x082b2b08u, 0x08081919u,
    0x19080819u, 0x08081919u, 0x19081908u, 0x08081919u, 0x1908192bu, 0x08081919u, 0x19082b19u, 0x08081919u, 0x19190808u,
    0x08081919u, 0x1919082bu, 0x08081919u, 0x19191919u, 0x08081919u, 0x19192b08u, 0x08081919u, 0x192b0819u, 0x08081919u,
    0x192b1908u, 0x08081919u, 0x2b080808u, 0x08081919u, 0x2b08082bu, 0x08081919u, 0x2b081919u, 0x08081919u, 0x2b082b08u,
    0x08081919u, 0x2b190819u, 0x08081919u, 0x2b191908u, 0x08081919u, 0x2b2b0808u, 0x08081919u, 0x08080819u, 0x0808192bu,
    0x08081908u, 0x0808192bu, 0x0808192bu, 0x0808192bu, 0x08082b19u, 0x0808192bu, 0x08190808u, 0x0808192bu, 0x08191919u,
    0x0808192bu, 0x19080808u, 0x0808192bu, 0x19081919u, 0x0808192bu, 0x19082b08u, 0x0808192bu, 0x19190819u, 0x0808192bu,
    0x19191908u, 0x0808192bu, 0x192b0808u, 0x0808192bu, 0x2b080819u, 0x0808192bu, 0x2b081908u, 0x0808192bu, 0x2b190808u,
    0x0808192bu, 0x08080808u, 0x08082b08u, 0x0808082bu, 0x08082b08u, 0x08081919u, 0x08082b08u, 0x08082b08u, 0x08082b08u,
    0x08190819u, 0x08082b08u, 0x08191908u, 0x08082b08u, 0x0819192bu, 0x08082b08u, 0x08192b19u, 0x08082b08u, 0x082b0808u,
    0x08082b08u, 0x082b1919u, 0x08082b08u, 0x082b2b2bu, 0x08082b08u, 0x19080819u, 0x08082b08u, 0x19081908u, 0x08082b08u,
    0x1908192bu, 0x08082b08u, 0x19082b19u, 0x08082b08u, 0x19190808u, 0x08082b08u, 0x1919082bu, 0x08082b08u, 0x19191919u,
    0x08082b08u, 0x19192b08u, 0x08082b08u, 0x192b0819u, 0x08082b08u, 0x192b1908u, 0x08082b08u, 0x2b080808u, 0x08082b08u,
    0x2b081919u, 0x08082b08u, 0x2b191908u, 0x08082b08u, 0x2b2b2b2bu, 0x08082b08u, 0x08080819u, 0x08082b19u, 0x08081908u,
    0x08082b19u, 0x08190808u, 0x08082b19u, 0x0819082bu, 0x08082b19u, 0x08191919u, 0x08082b19u, 0x08192b08u, 0x08082b19u,
    0x082b0819u, 0x08082b19u, 0x19080808u, 0x08082b19u, 0x19081919u, 0x08082b19u, 0x19082b08u, 0x08082b19u, 0x19190819u,
    0x08082b19u, 0x19191908u, 0x08082b19u, 0x192b0808u, 0x08082b19u, 0x2b080819u, 0x08082b19u, 0x2b190808u, 0x08082b19u,
    0x08080808u, 0x08082b2bu, 0x08190819u, 0x08082b2bu, 0x08191908u, 0x08082b2bu, 0x082b082bu, 0x08082b2bu, 0x082b2b08u,
    0x08082b2bu, 0x082b2b2bu, 0x08082b2bu, 0x19190808u, 0x08082b2bu, 0x2b192b19u, 0x08082b2bu, 0x08080819u, 0x08190808u,
    0x08081908u, 0x08190808u, 0x0808192bu, 0x08190808u, 0x08082b19u, 0x08190808u, 0x08190808u, 0x08190808u, 0x0819082bu,
    0x08190808u, 0x08191919u, 0x08190808u, 0x08192b08u, 0x08190808u, 0x082b0819u, 0x08190808u, 0x082b1908u, 0x08190808u,
    0x082b192bu, 0x08190808u, 0x19080808u, 0x08190808u, 0x1908082bu, 0x08190808u, 0x19081919u, 0x08190808u, 0x19082b08u,
    0x08190808u, 0x19190819u, 0x08190808u, 0x19191908u, 0x08190808u, 0x1919192bu, 0x08190808u, 0x19192b19u, 0x08190808u,
    0x192b0808u, 0x08190808u, 0x192b082bu, 0x08190808u, 0x192b1919u, 0x08190808u, 0x192b2b08u, 0x08190808u, 0x2b080819u,
    0x08190808u, 0x2b081908u, 0x08190808u, 0x2b08192bu, 0x08190808u, 0x2b190808u, 0x08190808u, 0x2b191919u, 0x08190808u,
    0x2b192b08u, 0x08190808u, 0x2b2b0819u, 0x08190808u, 0x2b2b1908u, 0x08190808u, 0x08080808u, 0x08190819u, 0x0808082bu,
    0x08190819u, 0x08081919u, 0x08190819u, 0x08082b08u, 0x08190819u, 0x08082b2bu, 0x08190819u, 0x08190819u, 0x08190819u,
    0x08191908u, 0x08190819u, 0x0819192bu, 0x08190819u, 0x08192b19u, 0x08190819u, 0x082b0808u, 0x08190819u, 0x082b082bu,
    0x08190819u, 0x082b1919u, 0x08190819u, 0x082b2b08u, 0x08190819u, 0x19080819u, 0x08190819u, 0x19081908u, 0x08190819u,
    0x1908192bu, 0x08190819u, 0x19082b19u, 0x08190819u, 0x19190808u, 0x08190819u, 0x1919082bu, 0x08190819u, 0x19191919u,
    0x08190819u, 0x19192b08u, 0x08190819u, 0x192b0819u, 0x08190819u, 0x192b1908u, 0x08190819u, 0x2b080808u, 0x08190819u,
    0x2b08082bu, 0x08190819u, 0x2b081919u, 0x08190819u, 0x2b082b08u, 0x08190819u, 0x2b190819u, 0x08190819u, 0x2b191908u,
    0x08190819u, 0x08080819u, 0x0819082bu, 0x08081908u, 0x0819082bu, 0x08082b19u, 0x0819082bu, 0x08190808u, 0x0819082bu,
    0x08191919u, 0x0819082bu, 0x082b0819u, 0x0819082bu, 0x082b1908u, 0x0819082bu, 0x19080808u, 0x0819082bu, 0x19081919u,
    0x0819082bu, 0x19190819u, 0x0819082bu, 0x19191908u, 0x0819082bu, 0x2b080819u, 0x0819082bu, 0x2b081908u, 0x0819082bu,
    0x2b190808u, 0x0819082bu, 0x08080808u, 0x08191908u, 0x0808082bu, 0x08191908u, 0x08081919u, 0x08191908u, 0x08082b08u,
    0x08191908u, 0x08190819u, 0x08191908u, 0x08191908u, 0x08191908u, 0x0819192bu, 0x08191908u, 0x08192b19u, 0x08191908u,
    0x082b0808u, 0x08191908u, 0x082b1919u, 0x08191908u, 0x082b2b08u, 0x08191908u, 0x19080819u, 0x08191908u, 0x19081908u,
    0x08191908u, 0x1908192bu, 0x08191908u, 0x19082b19u, 0x08191908u, 0x19190808u, 0x08191908u, 0x1919082bu, 0x08191908u,
    0x19191919u, 0x08191908u, 0x19192b08u, 0x08191908u, 0x192b0819u, 0x08191908u, 0x192b1908u, 0x08191908u, 0x2b080808u,
    0x08191908u, 0x2b08082bu, 0x08191908u, 0x2b081919u, 0x08191908u, 0x2b082b08u, 0x08191908u, 0x2b190819u, 0x08191908u,
    0x2b191908u, 0x08191908u, 0x2b2b0808u, 0x08191908u, 0x08080819u, 0x08191919u, 0x08081908u, 0x08191919u, 0x0808192bu,
    0x08191919u, 0x08082b19u, 0x08191919u, 0x08190808u, 0x08191919u, 0x0819082bu, 0x08191919u, 0x08191919u, 0x08191919u,
    0x08192b08u, 0x08191919u, 0x082b0819u, 0x08191919u, 0x082b1908u, 0x08191919u, 0x19080808u, 0x08191919u, 0x1908082bu,
    0x08191919u, 0x19081919u, 0x08191919u, 0x19082b08u, 0x08191919u, 0x19190819u, 0x08191919u, 0x19191908u, 0x08191919u,
    0x192b0808u, 0x08191919u, 0x2b080819u, 0x08191919u, 0x2b081908u, 0x08191919u, 0x2b190808u, 0x08191919u, 0x08080808u,
    0x0819192bu, 0x08081919u, 0x0819192bu, 0x08082b08u, 0x0819192bu, 0x08190819u, 0x0819192bu, 0x08191908u, 0x0819192bu,
    0x082b0808u, 0x0819192bu, 0x19080819u, 0x0819192bu, 0x19081908u, 0x0819192bu, 0x19190808u, 0x0819192bu, 0x2b080808u,
    0x0819192bu, 0x2b2b2b2bu, 0x0819192bu, 0x08080819u, 0x08192b08u, 0x08081908u, 0x08192b08u, 0x0808192bu, 0x08192b08u,
    0x08082b19u, 0x08192b08u, 0x08190808u, 0x08192b08u, 0x08191919u, 0x08192b08u, 0x08192b08u, 0x08192b08u, 0x082b0819u,
    0x08192b08u, 0x19080808u, 0x08192b08u, 0x1908082bu, 0x08192b08u, 0x19081919u, 0x08192b08u, 0x19082b08u, 0x08192b08u,
    0x19190819u, 0x08192b08u, 0x19191908u, 0x08192b08u, 0x192b0808u, 0x08192b08u, 0x2b080819u, 0x08192b08u, 0x2b081908u,
    0x08192b08u, 0x08080808u, 0x08192b19u, 0x0808082bu, 0x08192b19u, 0x08081919u, 0x08192b19u, 0x08082b08u, 0x08192b19u,
    0x08190819u, 0x08192b19u, 0x08191908u, 0x08192b19u, 0x082b0808u, 0x08192b19u, 0x19080819u, 0x08192b19u, 0x19081908u,
    0x08192b19u, 0x19190808u, 0x08192b19u, 0x192b2b19u, 0x08192b19u, 0x2b2b082bu, 0x08192b19u, 0x08081908u, 0x08192b2bu,
    0x08190808u, 0x08192b2bu, 0x19080808u, 0x08192b2bu, 0x1919192bu, 0x08192b2bu, 0x08080808u, 0x082b0808u, 0x0808082bu,
    0x082b0808u, 0x08081919u, 0x082b0808u, 0x08082b08u, 0x082b0808u, 0x08190819u, 0x082b0808u, 0x08191908u, 0x082b0808u,
    0x0819192bu, 0x082b0808u, 0x08192b19u, 0x082b0808u, 0x082b0808u, 0x082b0808u, 0x082b1919u, 0x082b0808u, 0x082b2b2bu,
    0x082b0808u, 0x19080819u, 0x082b0808u, 0x19081908u, 0x082b0808u, 0x19190808u, 0x082b0808u, 0x1919082bu, 0x082b0808u,
    0x19191919u, 0x082b0808u, 0x192b1908u, 0x082b0808u, 0x2b080808u, 0x082b0808u, 0x2b082b2bu, 0x082b0808u, 0x2b191908u,
    0x082b0808u, 0x2b2b2b2bu, 0x082b0808u, 0x08080819u, 0x082b0819u, 0x08081908u, 0x082b0819u, 0x08190808u, 0x082b0819u,
    0x0819082bu, 0x082b0819u, 0x08191919u, 0x082b0819u, 0x082b0819u, 0x082b0819u, 0x19080808u, 0x082b0819u, 0x1908082bu,
    0x082b0819u, 0x19081919u, 0x082b0819u, 0x19190819u, 0x082b0819u, 0x19191908u, 0x082b0819u, 0x192b0808u, 0x082b0819u,
    0x2b080819u, 0x082b0819u, 0x2b081908u, 0x082b0819u, 0x2b190808u, 0x082b0819u, 0x08080808u, 0x082b082bu, 0x08082b2bu,
    0x082b082bu, 0x082b082bu, 0x082b082bu, 0x082b2b08u, 0x082b082bu, 0x082b2b2bu, 0x082b082bu, 0x19081908u, 0x082b082bu,
    0x19190808u, 0x082b082bu, 0x2b082b08u, 0x082b082bu, 0x2b082b2bu, 0x082b082bu, 0x2b2b2b08u, 0x082b082bu, 0x08080819u,
    0x082b1908u, 0x08081908u, 0x082b1908u, 0x0808192bu, 0x082b1908u, 0x08082b19u, 0x082b1908u, 0x08190808u, 0x082b1908u,
    0x08191919u, 0x082b1908u, 0x08192b08u, 0x082b1908u, 0x082b0819u, 0x082b1908u, 0x082b1908u, 0x082b1908u, 0x19080808u,
    0x082b1908u, 0x1908082bu, 0x082b1908u, 0x19081919u, 0x082b1908u, 0x19082b08u, 0x082b1908u, 0x19190819u, 0x082b1908u,
    0x19191908u, 0x082b1908u, 0x192b0808u, 0x082b1908u, 0x2b080819u, 0x082b1908u, 0x2b081908u, 0x082b1908u, 0x2b190808u,
    0x082b1908u, 0x08080808u, 0x082b1919u, 0x08081919u, 0x082b1919u, 0x08082b08u, 0x082b1919u, 0x08190819u, 0x082b1919u,
    0x08191908u, 0x082b1919u, 0x082b0808u, 0x082b1919u, 0x19080819u, 0x082b1919u, 0x19081908u, 0x082b1919u, 0x19190808u,
    0x082b1919u, 0x192b192bu, 0x082b1919u, 0x2b080808u, 0x082b1919u, 0x08080819u, 0x082b192bu, 0x08081908u, 0x082b192bu,
    0x08190808u, 0x082b192bu, 0x19080808u, 0x082b192bu, 0x19192b19u, 0x082b192bu, 0x08080808u, 0x082b2b08u, 0x08081919u,
    0x082b2b08u, 0x08190819u, 0x082b2b08u, 0x08191908u, 0x082b2b08u, 0x19080819u, 0x082b2b08u, 0x19081908u, 0x082b2b08u,
    0x19190808u, 0x082b2b08u, 0x2b082b2bu, 0x082b2b08u, 0x2b2b2b2bu, 0x082b2b08u, 0x08080819u, 0x082b2b19u, 0x08081908u,
    0x082b2b19u, 0x08190808u, 0x082b2b19u, 0x2b191919u, 0x082b2b19u, 0x08082b2bu, 0x082b2b2bu, 0x082b082bu, 0x082b2b2bu,
    0x192b1908u, 0x082b2b2bu, 0x2b082b08u, 0x082b2b2bu, 0x2b082b2bu, 0x082b2b2bu, 0x08080819u, 0x19080808u, 0x08081908u,
    0x19080808u, 0x0808192bu, 0x19080808u, 0x08082b19u, 0x19080808u, 0x08190808u, 0x19080808u, 0x0819082bu, 0x19080808u,
    0x08191919u, 0x19080808u, 0x08192b08u, 0x19080808u, 0x08192b2bu, 0x19080808u, 0x082b0819u, 0x19080808u, 0x082b1908u,
    0x19080808u, 0x082b192bu, 0x19080808u, 0x19080808u, 0x19080808u, 0x1908082bu, 0x19080808u, 0x19081919u, 0x19080808u,
    0x19082b08u, 0x19080808u, 0x19082b2bu, 0x19080808u, 0x19190819u, 0x19080808u, 0x19191908u, 0x19080808u, 0x1919192bu,
    0x19080808u, 0x19192b19u, 0x19080808u, 0x192b0808u, 0x19080808u, 0x192b082bu, 0x19080808u, 0x192b1919u, 0x19080808u,
    0x2b080819u, 0x19080808u, 0x2b081908u, 0x19080808u, 0x2b190808u, 0x19080808u, 0x2b191919u, 0x19080808u, 0x2b192b08u,
    0x19080808u, 0x2b2b0819u, 0x19080808u, 0x2b2b1908u, 0x19080808u, 0x08080808u, 0x19080819u, 0x0808082bu, 0x19080819u,
    0x08081919u, 0x19080819u, 0x08082b08u, 0x19080819u, 0x08190819u, 0x19080819u, 0x08191908u, 0x19080819u, 0x0819192bu,
    0x19080819u, 0x08192b19u, 0x19080819u, 0x082b0808u, 0x19080819u, 0x082b082bu, 0x19080819u, 0x082b1919u, 0x19080819u,
    0x19080819u, 0x19080819u, 0x19081908u, 0x19080819u, 0x1908192bu, 0x19080819u, 0x19082b19u, 0x19080819u, 0x19190808u,
    0x19080819u, 0x1919082bu, 0x19080819u, 0x19191919u, 0x19080819u, 0x19192b08u, 0x19080819u, 0x192b0819u, 0x19080819u,
    0x192b1908u, 0x19080819u, 0x2b080808u, 0x19080819u, 0x2b08082bu, 0x19080819u, 0x2b081919u, 0x19080819u, 0x2b082b08u,
    0x19080819u, 0x2b190819u, 0x19080819u, 0x2b191908u, 0x19080819u, 0x2b2b0808u, 0x19080819u, 0x08080819u, 0x1908082bu,
    0x08081908u, 0x1908082bu, 0x08190808u, 0x1908082bu, 0x0819082bu, 0x1908082bu, 0x08191919u, 0x1908082bu, 0x08192b08u,
    0x1908082bu, 0x082b1908u, 0x1908082bu, 0x19080808u, 0x1908082bu, 0x19081919u, 0x1908082bu, 0x19082b08u, 0x1908082bu,
    0x19190819u, 0x1908082bu, 0x19191908u, 0x1908082bu, 0x192b0808u, 0x1908082bu, 0x2b080819u, 0x1908082bu, 0x2b081908u,
    0x1908082bu, 0x08080808u, 0x19081908u, 0x0808082bu, 0x19081908u, 0x08081919u, 0x19081908u, 0x08082b08u, 0x19081908u,
    0x08082b2bu, 0x19081908u, 0x08190819u, 0x19081908u, 0x08191908u, 0x19081908u, 0x0819192bu, 0x19081908u, 0x08192b19u,
    0x19081908u, 0x082b0808u, 0x19081908u, 0x082b082bu, 0x19081908u, 0x082b1919u, 0x19081908u, 0x082b2b08u, 0x19081908u,
    0x19080819u, 0x19081908u, 0x19081908u, 0x19081908u, 0x1908192bu, 0x19081908u, 0x19082b19u, 0x19081908u, 0x19190808u,
    0x19081908u, 0x1919082bu, 0x19081908u, 0x19191919u, 0x19081908u, 0x19192b08u, 0x19081908u, 0x192b0819u, 0x19081908u,
    0x192b1908u, 0x19081908u, 0x2b080808u, 0x19081908u, 0x2b08082bu, 0x19081908u, 0x2b081919u, 0x19081908u, 0x2b082b08u,
    0x19081908u, 0x2b190819u, 0x19081908u, 0x2b191908u, 0x19081908u, 0x2b2b0808u, 0x19081908u, 0x08080819u, 0x19081919u,
    0x08081908u, 0x19081919u, 0x0808192bu, 0x19081919u, 0x08082b19u, 0x19081919u, 0x08190808u, 0x19081919u, 0x0819082bu,
    0x19081919u, 0x08191919u, 0x19081919u, 0x08192b08u, 0x19081919u, 0x082b0819u, 0x19081919u, 0x082b1908u, 0x19081919u,
    0x19080808u, 0x19081919u, 0x1908082bu, 0x19081919u, 0x19081919u, 0x19081919u, 0x19082b08u, 0x19081919u, 0x19190819u,
    0x19081919u, 0x19191908u, 0x19081919u, 0x192b0808u, 0x19081919u, 0x192b2b2bu, 0x19081919u, 0x2b080819u, 0x19081919u,
    0x2b081908u, 0x19081919u, 0x2b190808u, 0x19081919u, 0x08080808u, 0x1908192bu, 0x0808082bu, 0x1908192bu, 0x08081919u,
    0x1908192bu, 0x08082b08u, 0x1908192bu, 0x08190819u, 0x1908192bu, 0x08191908u, 0x1908192bu, 0x082b0808u, 0x1908192bu,
    0x19080819u, 0x1908192bu, 0x19081908u, 0x1908192bu, 0x19190808u, 0x1908192bu, 0x2b080808u, 0x1908192bu, 0x2b2b1919u,
    0x1908192bu, 0x08080819u, 0x19082b08u, 0x08081908u, 0x19082b08u, 0x08082b19u, 0x19082b08u, 0x08190808u, 0x19082b08u,
    0x0819082bu, 0x19082b08u, 0x08191919u, 0x19082b08u, 0x08192b08u, 0x19082b08u, 0x082b0819u, 0x19082b08u, 0x082b1908u,
    0x19082b08u, 0x19080808u, 0x19082b08u, 0x1908082bu, 0x19082b08u, 0x19081919u, 0x19082b08u, 0x19082b08u, 0x19082b08u,
    0x19190819u, 0x19082b08u, 0x19191908u, 0x19082b08u, 0x192b0808u, 0x19082b08u, 0x2b081908u, 0x19082b08u, 0x2b190808u,
    0x19082b08u, 0x08080808u, 0x19082b19u, 0x0808082bu, 0x19082b19u, 0x08081919u, 0x19082b19u, 0x08082b08u, 0x19082b19u,
    0x08190819u, 0x19082b19u, 0x08191908u, 0x19082b19u, 0x082b0808u, 0x19082b19u, 0x19080819u, 0x19082b19u, 0x19081908u,
    0x19082b19u, 0x19190808u, 0x19082b19u, 0x2b080808u, 0x19082b19u, 0x2b19192bu, 0x19082b19u, 0x08080819u, 0x19082b2bu,
    0x08081908u, 0x19082b2bu, 0x08190808u, 0x19082b2bu, 0x19080808u, 0x19082b2bu, 0x08080808u, 0x19190808u, 0x0808082bu,
    0x19190808u, 0x08081919u, 0x19190808u, 0x08082b08u, 0x19190808u, 0x08190819u, 0x19190808u, 0x08191908u, 0x19190808u,
    0x0819192bu, 0x19190808u, 0x08192b19u, 0x19190808u, 0x082b0808u, 0x19190808u, 0x082b082bu, 0x19190808u, 0x082b1919u,
    0x19190808u, 0x082b2b08u, 0x19190808u, 0x19080819u, 0x19190808u, 0x19081908u, 0x19190808u, 0x1908192bu, 0x19190808u,
    0x19082b19u, 0x19190808u, 0x19190808u, 0x19190808u, 0x1919082bu, 0x19190808u, 0x19191919u, 0x19190808u, 0x19192b08u,
    0x19190808u, 0x192b0819u, 0x19190808u, 0x192b1908u, 0x19190808u, 0x2b080808u, 0x19190808u, 0x2b08082bu, 0x19190808u,
    0x2b081919u, 0x19190808u, 0x2b082b08u, 0x19190808u, 0x2b190819u, 0x19190808u, 0x2b191908u, 0x19190808u, 0x08080819u,
    0x19190819u, 0x08081908u, 0x19190819u, 0x0808192bu, 0x19190819u, 0x08082b19u, 0x19190819u, 0x08190808u, 0x19190819u,
    0x0819082bu, 0x19190819u, 0x08191919u, 0x19190819u, 0x08192b08u, 0x19190819u, 0x082b0819u, 0x19190819u, 0x082b1908u,
    0x19190819u, 0x19080808u, 0x19190819u, 0x1908082bu, 0x19190819u, 0x19081919u, 0x19190819u, 0x19082b08u, 0x19190819u,
    0x19190819u, 0x19190819u, 0x19191908u, 0x19190819u, 0x192b0808u, 0x19190819u, 0x2b080819u, 0x19190819u, 0x2b081908u,
    0x19190819u, 0x2b190808u, 0x19190819u, 0x08080808u, 0x1919082bu, 0x08081919u, 0x1919082bu, 0x08082b08u, 0x1919082bu,
    0x08190819u, 0x1919082bu, 0x08191908u, 0x1919082bu, 0x082b0808u, 0x1919082bu, 0x19080819u, 0x1919082bu, 0x19081908u,
    0x1919082bu, 0x19190808u, 0x1919082bu, 0x192b2b19u, 0x1919082bu, 0x2b080808u, 0x1919082bu, 0x08080819u, 0x19191908u,
    0x08081908u, 0x19191908u, 0x0808192bu, 0x19191908u, 0x08082b19u, 0x19191908u, 0x08190808u, 0x19191908u, 0x0819082bu,
    0x19191908u, 0x08191919u, 0x19191908u, 0x08192b08u, 0x19191908u, 0x082b0819u, 0x19191908u, 0x082b1908u, 0x19191908u,
    0x19080808u, 0x19191908u, 0x1908082bu, 0x19191908u, 0x19081919u, 0x19191908u, 0x19082b08u, 0x19191908u, 0x19190819u,
    0x19191908u, 0x19191908u, 0x19191908u, 0x192b0808u, 0x19191908u, 0x2b080819u, 0x19191908u, 0x2b081908u, 0x19191908u,
    0x2b190808u, 0x19191908u, 0x08080808u, 0x19191919u, 0x0808082bu, 0x19191919u, 0x08081919u, 0x19191919u, 0x08082b08u,
    0x19191919u, 0x08190819u, 0x19191919u, 0x08191908u, 0x19191919u, 0x082b0808u, 0x19191919u, 0x19080819u, 0x19191919u,
    0x19081908u, 0x19191919u, 0x19190808u, 0x19191919u, 0x2b080808u, 0x19191919u, 0x08080819u, 0x1919192bu, 0x08081908u,
    0x1919192bu, 0x08190808u, 0x1919192bu, 0x082b192bu, 0x1919192bu, 0x19080808u, 0x1919192bu, 0x08080808u, 0x19192b08u,
    0x0808082bu, 0x19192b08u, 0x08081919u, 0x19192b08u, 0x08082b08u, 0x19192b08u, 0x08190819u, 0x19192b08u, 0x08191908u,
    0x19192b08u, 0x082b0808u, 0x19192b08u, 0x19080819u, 0x19192b08u, 0x19081908u, 0x19192b08u, 0x19190808u, 0x19192b08u,
    0x19192b2bu, 0x19192b08u, 0x2b080808u, 0x19192b08u, 0x08080819u, 0x19192b19u, 0x08081908u, 0x19192b19u, 0x08190808u,
    0x19192b19u, 0x19080808u, 0x19192b19u, 0x08080808u, 0x19192b2bu, 0x08192b19u, 0x19192b2bu, 0x2b081919u, 0x19192b2bu,
    0x2b2b2b08u, 0x19192b2bu, 0x08080819u, 0x192b0808u, 0x08081908u, 0x192b0808u, 0x0808192bu, 0x192b0808u, 0x08190808u,
    0x192b0808u, 0x0819082bu, 0x192b0808u, 0x08191919u, 0x192b0808u, 0x08192b08u, 0x192b0808u, 0x082b0819u, 0x192b0808u,
    0x082b1908u, 0x192b0808u, 0x19080808u, 0x192b0808u, 0x19081919u, 0x192b0808u, 0x19082b08u, 0x192b0808u, 0x19190819u,
    0x192b0808u, 0x19191908u, 0x192b0808u, 0x192b0808u, 0x192b0808u, 0x2b081908u, 0x192b0808u, 0x2b190808u, 0x192b0808u,
    0x08080808u, 0x192b0819u, 0x0808082bu, 0x192b0819u, 0x08081919u, 0x192b0819u, 0x08082b08u, 0x192b0819u, 0x08190819u,
    0x192b0819u, 0x08191908u, 0x192b0819u, 0x082b0808u, 0x192b0819u, 0x19080819u, 0x192b0819u, 0x19081908u, 0x192b0819u,
    0x19190808u, 0x192b0819u, 0x2b080808u, 0x192b0819u, 0x2b192b19u, 0x192b0819u, 0x08081908u, 0x192b082bu, 0x08190808u,
    0x192b082bu, 0x19080808u, 0x192b082bu, 0x1919192bu, 0x192b082bu, 0x2b2b0819u, 0x192b082bu, 0x08080808u, 0x192b1908u,
    0x08081919u, 0x192b1908u, 0x08082b08u, 0x192b1908u, 0x08190819u, 0x192b1908u, 0x08191908u, 0x192b1908u, 0x082b0808u,
    0x192b1908u, 0x19080819u, 0x192b1908u, 0x19081908u, 0x192b1908u, 0x19190808u, 0x192b1908u, 0x2b080808u, 0x192b1908u,
    0x08080819u, 0x192b1919u, 0x08081908u, 0x192b1919u, 0x08190808u, 0x192b1919u, 0x19080808u, 0x192b1919u, 0x19082b2bu,
    0x192b1919u, 0x192b2b08u, 0x192b1919u, 0x2b19082bu, 0x192b1919u, 0x08080808u, 0x192b192bu, 0x2b191908u, 0x192b192bu,
    0x08080819u, 0x192b2b08u, 0x08081908u, 0x192b2b08u, 0x08190808u, 0x192b2b08u, 0x192b1919u, 0x192b2b08u, 0x2b192b08u,
    0x192b2b08u, 0x08080808u, 0x192b2b19u, 0x082b2b2bu, 0x192b2b19u, 0x1908082bu, 0x192b2b2bu, 0x2b2b0819u, 0x192b2b2bu,
    0x08080808u, 0x2b080808u, 0x0808082bu, 0x2b080808u, 0x08081919u, 0x2b080808u, 0x08082b08u, 0x2b080808u, 0x08190819u,
    0x2b080808u, 0x08191908u, 0x2b080808u, 0x08192b19u, 0x2b080808u, 0x082b0808u, 0x2b080808u, 0x082b1919u, 0x2b080808u,
    0x19080819u, 0x2b080808u, 0x19081908u, 0x2b080808u, 0x19190808u, 0x2b080808u, 0x1919082bu, 0x2b080808u, 0x19191919u,
    0x2b080808u, 0x19192b08u, 0x2b080808u, 0x192b0819u, 0x2b080808u, 0x2b080808u, 0x2b080808u, 0x2b081919u, 0x2b080808u,
    0x2b190819u, 0x2b080808u, 0x2b191908u, 0x2b080808u, 0x08080819u, 0x2b080819u, 0x08081908u, 0x2b080819u, 0x08082b19u,
    0x2b080819u, 0x08190808u, 0x2b080819u, 0x0819082bu, 0x2b080819u, 0x08191919u, 0x2b080819u, 0x08192b08u, 0x2b080819u,
    0x082b0819u, 0x2b080819u, 0x082b1908u, 0x2b080819u, 0x19080808u, 0x2b080819u, 0x1908082bu, 0x2b080819u, 0x19081919u,
    0x2b080819u, 0x19082b08u, 0x2b080819u, 0x19190819u, 0x2b080819u, 0x19191908u, 0x2b080819u, 0x2b080819u, 0x2b080819u,
    0x2b081908u, 0x2b080819u, 0x2b190808u, 0x2b080819u, 0x2b2b2b19u, 0x2b080819u, 0x08080808u, 0x2b08082bu, 0x08081919u,
    0x2b08082bu, 0x08082b2bu, 0x2b08082bu, 0x08190819u, 0x2b08082bu, 0x08191908u, 0x2b08082bu, 0x19080819u, 0x2b08082bu,
    0x19081908u, 0x2b08082bu, 0x19190808u, 0x2b08082bu, 0x08080819u, 0x2b081908u, 0x08081908u, 0x2b081908u, 0x0808192bu,
    0x2b081908u, 0x08082b19u, 0x2b081908u, 0x08190808u, 0x2b081908u, 0x0819082bu, 0x2b081908u, 0x08191919u, 0x2b081908u,
    0x08192b08u, 0x2b081908u, 0x082b0819u, 0x2b081908u, 0x19080808u, 0x2b081908u, 0x1908082bu, 0x2b081908u, 0x19081919u,
    0x2b081908u, 0x19082b08u, 0x2b081908u, 0x19190819u, 0x2b081908u, 0x19191908u, 0x2b081908u, 0x192b0808u, 0x2b081908u,
    0x2b080819u, 0x2b081908u, 0x2b081908u, 0x2b081908u, 0x2b190808u, 0x2b081908u, 0x08080808u, 0x2b081919u, 0x0808082bu,
    0x2b081919u, 0x08081919u, 0x2b081919u, 0x08082b08u, 0x2b081919u, 0x08190819u, 0x2b081919u, 0x08191908u, 0x2b081919u,
    0x082b0808u, 0x2b081919u, 0x19080819u, 0x2b081919u, 0x19081908u, 0x2b081919u, 0x19190808u, 0x2b081919u, 0x2b080808u,
    0x2b081919u, 0x2b082b2bu, 0x2b081919u, 0x08080819u, 0x2b08192bu, 0x08081908u, 0x2b08192bu, 0x08190808u, 0x2b08192bu,
    0x082b2b19u, 0x2b08192bu, 0x19080808u, 0x2b08192bu, 0x08080808u, 0x2b082b08u, 0x08081919u, 0x2b082b08u, 0x08190819u,
    0x2b082b08u, 0x08191908u, 0x2b082b08u, 0x19080819u, 0x2b082b08u, 0x19081908u, 0x2b082b08u, 0x19190808u, 0x2b082b08u,
    0x2b2b082bu, 0x2b082b08u, 0x08080819u, 0x2b082b19u, 0x08081908u, 0x2b082b19u, 0x19080808u, 0x2b082b19u, 0x192b1919u,
    0x2b082b19u, 0x082b082bu, 0x2b082b2bu, 0x19192b08u, 0x2b082b2bu, 0x19192b2bu, 0x2b082b2bu, 0x2b08082bu, 0x2b082b2bu,
    0x2b2b082bu, 0x2b082b2bu, 0x08080819u, 0x2b190808u, 0x08081908u, 0x2b190808u, 0x08082b19u, 0x2b190808u, 0x08190808u,
    0x2b190808u, 0x0819082bu, 0x2b190808u, 0x08191919u, 0x2b190808u, 0x08192b08u, 0x2b190808u, 0x082b1908u, 0x2b190808u,
    0x19080808u, 0x2b190808u, 0x1908082bu, 0x2b190808u, 0x19081919u, 0x2b190808u, 0x19082b08u, 0x2b190808u, 0x19190819u,
    0x2b190808u, 0x19191908u, 0x2b190808u, 0x192b0808u, 0x2b190808u, 0x2b080819u, 0x2b190808u, 0x2b081908u, 0x2b190808u,
    0x2b190808u, 0x2b190808u, 0x08080808u, 0x2b190819u, 0x08081919u, 0x2b190819u, 0x08190819u, 0x2b190819u, 0x08191908u,
    0x2b190819u, 0x19080819u, 0x2b190819u, 0x19081908u, 0x2b190819u, 0x19190808u, 0x2b190819u, 0x19192b2bu, 0x2b190819u,
    0x08080819u, 0x2b19082bu, 0x08081908u, 0x2b19082bu, 0x08190808u, 0x2b19082bu, 0x19080808u, 0x2b19082bu, 0x2b2b192bu,
    0x2b19082bu, 0x08080808u, 0x2b191908u, 0x0808082bu, 0x2b191908u, 0x08081919u, 0x2b191908u, 0x08082b08u, 0x2b191908u,
    0x08190819u, 0x2b191908u, 0x08191908u, 0x2b191908u, 0x082b0808u, 0x2b191908u, 0x19080819u, 0x2b191908u, 0x19081908u,
    0x2b191908u, 0x19190808u, 0x2b191908u, 0x2b080808u, 0x2b191908u, 0x2b19192bu, 0x2b191908u, 0x08080819u, 0x2b191919u,
    0x08081908u, 0x2b191919u, 0x08190808u, 0x2b191919u, 0x19080808u, 0x2b191919u, 0x2b192b08u, 0x2b191919u, 0x2b2b0819u,
    0x2b191919u, 0x08080808u, 0x2b19192bu, 0x1908192bu, 0x2b19192bu, 0x192b1908u, 0x2b19192bu, 0x08080819u, 0x2b192b08u,
    0x08081908u, 0x2b192b08u, 0x08190808u, 0x2b192b08u, 0x082b192bu, 0x2b192b08u, 0x19080808u, 0x2b192b08u, 0x2b2b2b19u,
    0x2b192b08u, 0x08080808u, 0x2b192b19u, 0x19082b19u, 0x2b192b19u, 0x1919082bu, 0x2b192b19u, 0x2b190808u, 0x2b192b2bu,
    0x08080808u, 0x2b2b0808u, 0x08081919u, 0x2b2b0808u, 0x08082b2bu, 0x2b2b0808u, 0x08191908u, 0x2b2b0808u, 0x082b082bu,
    0x2b2b0808u, 0x082b2b2bu, 0x2b2b0808u, 0x19080819u, 0x2b2b0808u, 0x19081908u, 0x2b2b0808u, 0x19190808u, 0x2b2b0808u,
    0x2b2b082bu, 0x2b2b0808u, 0x2b2b2b2bu, 0x2b2b0808u, 0x19080808u, 0x2b2b0819u, 0x192b1919u, 0x2b2b0819u, 0x0808082bu,
    0x2b2b082bu, 0x08082b2bu, 0x2b2b082bu, 0x082b082bu, 0x2b2b082bu, 0x082b2b08u, 0x2b2b082bu, 0x082b2b2bu, 0x2b2b082bu,
    0x2b08082bu, 0x2b2b082bu, 0x2b082b08u, 0x2b2b082bu, 0x2b082b2bu, 0x2b2b082bu, 0x2b2b2b08u, 0x2b2b082bu, 0x08080819u,
    0x2b2b1908u, 0x08081908u, 0x2b2b1908u, 0x08190808u, 0x2b2b1908u, 0x19080808u, 0x2b2b1908u, 0x2b082b19u, 0x2b2b1908u,
    0x2b2b1908u, 0x2b2b1908u, 0x08080808u, 0x2b2b1919u, 0x08192b19u, 0x2b2b1919u, 0x19190819u, 0x2b2b192bu, 0x08082b2bu,
    0x2b2b2b08u, 0x082b2b08u, 0x2b2b2b08u, 0x2b2b082bu, 0x2b2b2b08u, 0x19191908u, 0x2b2b2b19u, 0x2b08192bu, 0x2b2b2b19u,
    0x08082b08u, 0x2b2b2b2bu, 0x08082b2bu, 0x2b2b2b2bu, 0x082b0808u, 0x2b2b2b2bu, 0x082b082bu, 0x2b2b2b2bu, 0x082b2b08u,
    0x2b2b2b2bu, 0x2b082b08u, 0x2b2b2b2bu, 0x2b2b2b2bu, 0x2b2b2b2bu
);


uint byte_u(uint base, uint b) {
    return (w[base + (b >> 2u)] >> ((b & 3u) * 8u)) & 0xFFu;
}

void main() {
    uint n = gl_GlobalInvocationID.x;
    if (n >= nout) {
        return;
    }
    uint nblocks = k / 256u;
    uint rowbase = n * nblocks * BLK_U32;
    float acc = 0.0;
    for (uint blk = 0u; blk < nblocks; blk++) {
        uint base = rowbase + blk * BLK_U32;
        float d = float(unpackHalf2x16(w[base]).x);
        uint xblk = blk * 256u;
        for (uint e = 0u; e < 8u; e++) {
            uint sc = byte_u(base, 74u + e);    // scales[e]
            uint qh_e = byte_u(base, 66u + e);  // qh[e]
            for (uint l = 0u; l < 4u; l++) {
                uint nib = (l < 2u) ? (sc & 0xFu) : (sc >> 4u);
                float db = d * (0.5 + float(nib)) * 0.25;
                uint idx = byte_u(base, 2u + 4u * e + l)
                         | ((qh_e << (8u - 2u * l)) & 0x300u);
                uint glo = IQ2S_GRID[2u * idx];
                uint ghi = IQ2S_GRID[2u * idx + 1u];
                uint signs = byte_u(base, 34u + 4u * e + l);  // qs[32 + 4e + l]
                uint xoff = xblk + e * 32u + l * 8u;
                for (uint j = 0u; j < 8u; j++) {
                    uint g = (j < 4u) ? ((glo >> (8u * j)) & 0xFFu)
                                      : ((ghi >> (8u * (j - 4u))) & 0xFFu);
                    float sign = ((signs >> j) & 1u) != 0u ? -1.0 : 1.0;
                    acc += db * float(g) * sign * x[xoff + j];
                }
            }
        }
    }
    y[n] = acc;
}