/ 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