types.comp 2.9 KB

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