/ vulkan-shaders / types.comp
types.comp
1 #if !defined(DATA_A_F32) && !defined(DATA_A_F16) 2 #extension GL_EXT_shader_explicit_arithmetic_types_int8 : require 3 #endif 4 5 #if defined(DATA_A_F32) 6 #define QUANT_K 1 7 #define QUANT_R 1 8 9 #ifndef LOAD_VEC_A 10 #define A_TYPE float 11 #elif LOAD_VEC_A == 4 12 #define A_TYPE vec4 13 #elif LOAD_VEC_A == 8 14 #define A_TYPE mat2x4 15 #endif 16 #endif 17 18 #if defined(DATA_A_F16) 19 #define QUANT_K 1 20 #define QUANT_R 1 21 22 #ifndef LOAD_VEC_A 23 #define A_TYPE float16_t 24 #elif LOAD_VEC_A == 4 25 #define A_TYPE f16vec4 26 #elif LOAD_VEC_A == 8 27 #define A_TYPE f16mat2x4 28 #endif 29 #endif 30 31 #if defined(DATA_A_Q4_0) 32 #extension GL_EXT_shader_16bit_storage : require 33 #define QUANT_K 32 34 #define QUANT_R 2 35 36 struct block_q4_0 37 { 38 float16_t d; 39 uint8_t qs[16]; 40 }; 41 42 #define A_TYPE block_q4_0 43 #endif 44 45 #if defined(DATA_A_Q4_1) 46 #extension GL_EXT_shader_16bit_storage : require 47 #define QUANT_K 32 48 #define QUANT_R 2 49 50 struct block_q4_1 51 { 52 float16_t d; 53 float16_t m; 54 uint8_t qs[16]; 55 }; 56 57 #define A_TYPE block_q4_1 58 #endif 59 60 #if defined(DATA_A_Q5_0) 61 #extension GL_EXT_shader_16bit_storage : require 62 #extension GL_EXT_shader_explicit_arithmetic_types_int16 : require 63 #define QUANT_K 32 64 #define QUANT_R 2 65 66 struct block_q5_0 67 { 68 float16_t d; 69 uint16_t qh[2]; 70 uint8_t qs[16]; 71 }; 72 73 #define A_TYPE block_q5_0 74 #endif 75 76 #if defined(DATA_A_Q5_1) 77 #extension GL_EXT_shader_16bit_storage : require 78 #extension GL_EXT_shader_explicit_arithmetic_types_int16 : require 79 #define QUANT_K 32 80 #define QUANT_R 2 81 82 struct block_q5_1 83 { 84 float16_t d; 85 float16_t m; 86 uint qh; 87 uint8_t qs[16]; 88 }; 89 90 #define A_TYPE block_q5_1 91 #endif 92 93 #if defined(DATA_A_Q8_0) 94 #extension GL_EXT_shader_16bit_storage : require 95 #define QUANT_K 32 96 #define QUANT_R 1 97 98 struct block_q8_0 99 { 100 float16_t d; 101 int8_t qs[32]; 102 }; 103 104 #define A_TYPE block_q8_0 105 #endif 106 107 // K-quants 108 #if defined(DATA_A_Q2_K) 109 #extension GL_EXT_shader_16bit_storage : require 110 #define QUANT_K 256 111 112 struct block_q2_K 113 { 114 uint8_t scales[QUANT_K/16]; 115 uint8_t qs[QUANT_K/4]; 116 f16vec2 d; 117 }; 118 119 #define A_TYPE block_q2_K 120 #endif 121 122 #if defined(DATA_A_Q3_K) 123 #extension GL_EXT_shader_16bit_storage : require 124 #define QUANT_K 256 125 126 struct block_q3_K 127 { 128 uint8_t hmask[QUANT_K/8]; 129 uint8_t qs[QUANT_K/4]; 130 uint8_t scales[12]; 131 float16_t d; 132 }; 133 134 #define A_TYPE block_q3_K 135 #endif 136 137 #if defined(DATA_A_Q4_K) 138 #extension GL_EXT_shader_16bit_storage : require 139 #define QUANT_K 256 140 141 struct block_q4_K 142 { 143 f16vec2 d; 144 uint8_t scales[3*QUANT_K/64]; 145 uint8_t qs[QUANT_K/2]; 146 }; 147 148 #define A_TYPE block_q4_K 149 #endif 150 151 #if defined(DATA_A_Q5_K) 152 #extension GL_EXT_shader_16bit_storage : require 153 #define QUANT_K 256 154 155 struct block_q5_K 156 { 157 f16vec2 d; 158 uint8_t scales[12]; 159 uint8_t qh[QUANT_K/8]; 160 uint8_t qs[QUANT_K/2]; 161 }; 162 163 #define A_TYPE block_q5_K 164 #endif 165 166 #if defined(DATA_A_Q6_K) 167 #extension GL_EXT_shader_16bit_storage : require 168 #define QUANT_K 256 169 170 struct block_q6_K 171 { 172 uint8_t ql[QUANT_K/2]; 173 uint8_t qh[QUANT_K/4]; 174 int8_t scales[QUANT_K/16]; 175 float16_t d; 176 }; 177 178 #define A_TYPE block_q6_K 179 #endif