ktx-parse.cjs 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035
  1. ///////////////////////////////////////////////////
  2. // KTX2 Header.
  3. ///////////////////////////////////////////////////
  4. const KHR_SUPERCOMPRESSION_NONE = 0;
  5. const KHR_SUPERCOMPRESSION_BASISLZ = 1;
  6. const KHR_SUPERCOMPRESSION_ZSTD = 2;
  7. const KHR_SUPERCOMPRESSION_ZLIB = 3; ///////////////////////////////////////////////////
  8. // Data Format Descriptor (DFD).
  9. ///////////////////////////////////////////////////
  10. const KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0;
  11. const KHR_DF_VENDORID_KHRONOS = 0;
  12. const KHR_DF_VERSION = 2;
  13. const KHR_DF_MODEL_UNSPECIFIED = 0;
  14. const KHR_DF_MODEL_RGBSDA = 1; // ...
  15. const KHR_DF_MODEL_ETC1 = 160;
  16. const KHR_DF_MODEL_ETC2 = 161;
  17. const KHR_DF_MODEL_ASTC = 162;
  18. const KHR_DF_MODEL_ETC1S = 163;
  19. const KHR_DF_MODEL_UASTC = 166;
  20. const KHR_DF_FLAG_ALPHA_STRAIGHT = 0;
  21. const KHR_DF_FLAG_ALPHA_PREMULTIPLIED = 1;
  22. const KHR_DF_TRANSFER_UNSPECIFIED = 0;
  23. const KHR_DF_TRANSFER_LINEAR = 1;
  24. const KHR_DF_TRANSFER_SRGB = 2;
  25. const KHR_DF_TRANSFER_ITU = 3;
  26. const KHR_DF_TRANSFER_NTSC = 4;
  27. const KHR_DF_TRANSFER_SLOG = 5;
  28. const KHR_DF_TRANSFER_SLOG2 = 6;
  29. const KHR_DF_TRANSFER_BT1886 = 7;
  30. const KHR_DF_TRANSFER_HLG_OETF = 8;
  31. const KHR_DF_TRANSFER_HLG_EOTF = 9;
  32. const KHR_DF_TRANSFER_PQ_EOTF = 10;
  33. const KHR_DF_TRANSFER_PQ_OETF = 11;
  34. const KHR_DF_TRANSFER_DCIP3 = 12;
  35. const KHR_DF_TRANSFER_PAL_OETF = 13;
  36. const KHR_DF_TRANSFER_PAL625_EOTF = 14;
  37. const KHR_DF_TRANSFER_ST240 = 15;
  38. const KHR_DF_TRANSFER_ACESCC = 16;
  39. const KHR_DF_TRANSFER_ACESCCT = 17;
  40. const KHR_DF_TRANSFER_ADOBERGB = 18;
  41. const KHR_DF_PRIMARIES_UNSPECIFIED = 0;
  42. const KHR_DF_PRIMARIES_BT709 = 1;
  43. const KHR_DF_PRIMARIES_BT601_EBU = 2;
  44. const KHR_DF_PRIMARIES_BT601_SMPTE = 3;
  45. const KHR_DF_PRIMARIES_BT2020 = 4;
  46. const KHR_DF_PRIMARIES_CIEXYZ = 5;
  47. const KHR_DF_PRIMARIES_ACES = 6;
  48. const KHR_DF_PRIMARIES_ACESCC = 7;
  49. const KHR_DF_PRIMARIES_NTSC1953 = 8;
  50. const KHR_DF_PRIMARIES_PAL525 = 9;
  51. const KHR_DF_PRIMARIES_DISPLAYP3 = 10;
  52. const KHR_DF_PRIMARIES_ADOBERGB = 11;
  53. const KHR_DF_CHANNEL_RGBSDA_RED = 0;
  54. const KHR_DF_CHANNEL_RGBSDA_GREEN = 1;
  55. const KHR_DF_CHANNEL_RGBSDA_BLUE = 2;
  56. const KHR_DF_CHANNEL_RGBSDA_STENCIL = 13;
  57. const KHR_DF_CHANNEL_RGBSDA_DEPTH = 14;
  58. const KHR_DF_CHANNEL_RGBSDA_ALPHA = 15;
  59. const KHR_DF_SAMPLE_DATATYPE_FLOAT = 0x80;
  60. const KHR_DF_SAMPLE_DATATYPE_SIGNED = 0x40;
  61. const KHR_DF_SAMPLE_DATATYPE_EXPONENT = 0x20;
  62. const KHR_DF_SAMPLE_DATATYPE_LINEAR = 0x10; ///////////////////////////////////////////////////
  63. // VK FORMAT.
  64. ///////////////////////////////////////////////////
  65. const VK_FORMAT_UNDEFINED = 0;
  66. const VK_FORMAT_R4G4_UNORM_PACK8 = 1;
  67. const VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2;
  68. const VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3;
  69. const VK_FORMAT_R5G6B5_UNORM_PACK16 = 4;
  70. const VK_FORMAT_B5G6R5_UNORM_PACK16 = 5;
  71. const VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6;
  72. const VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7;
  73. const VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8;
  74. const VK_FORMAT_R8_UNORM = 9;
  75. const VK_FORMAT_R8_SNORM = 10;
  76. const VK_FORMAT_R8_UINT = 13;
  77. const VK_FORMAT_R8_SINT = 14;
  78. const VK_FORMAT_R8_SRGB = 15;
  79. const VK_FORMAT_R8G8_UNORM = 16;
  80. const VK_FORMAT_R8G8_SNORM = 17;
  81. const VK_FORMAT_R8G8_UINT = 20;
  82. const VK_FORMAT_R8G8_SINT = 21;
  83. const VK_FORMAT_R8G8_SRGB = 22;
  84. const VK_FORMAT_R8G8B8_UNORM = 23;
  85. const VK_FORMAT_R8G8B8_SNORM = 24;
  86. const VK_FORMAT_R8G8B8_UINT = 27;
  87. const VK_FORMAT_R8G8B8_SINT = 28;
  88. const VK_FORMAT_R8G8B8_SRGB = 29;
  89. const VK_FORMAT_B8G8R8_UNORM = 30;
  90. const VK_FORMAT_B8G8R8_SNORM = 31;
  91. const VK_FORMAT_B8G8R8_UINT = 34;
  92. const VK_FORMAT_B8G8R8_SINT = 35;
  93. const VK_FORMAT_B8G8R8_SRGB = 36;
  94. const VK_FORMAT_R8G8B8A8_UNORM = 37;
  95. const VK_FORMAT_R8G8B8A8_SNORM = 38;
  96. const VK_FORMAT_R8G8B8A8_UINT = 41;
  97. const VK_FORMAT_R8G8B8A8_SINT = 42;
  98. const VK_FORMAT_R8G8B8A8_SRGB = 43;
  99. const VK_FORMAT_B8G8R8A8_UNORM = 44;
  100. const VK_FORMAT_B8G8R8A8_SNORM = 45;
  101. const VK_FORMAT_B8G8R8A8_UINT = 48;
  102. const VK_FORMAT_B8G8R8A8_SINT = 49;
  103. const VK_FORMAT_B8G8R8A8_SRGB = 50;
  104. const VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58;
  105. const VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59;
  106. const VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62;
  107. const VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63;
  108. const VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64;
  109. const VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65;
  110. const VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68;
  111. const VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69;
  112. const VK_FORMAT_R16_UNORM = 70;
  113. const VK_FORMAT_R16_SNORM = 71;
  114. const VK_FORMAT_R16_UINT = 74;
  115. const VK_FORMAT_R16_SINT = 75;
  116. const VK_FORMAT_R16_SFLOAT = 76;
  117. const VK_FORMAT_R16G16_UNORM = 77;
  118. const VK_FORMAT_R16G16_SNORM = 78;
  119. const VK_FORMAT_R16G16_UINT = 81;
  120. const VK_FORMAT_R16G16_SINT = 82;
  121. const VK_FORMAT_R16G16_SFLOAT = 83;
  122. const VK_FORMAT_R16G16B16_UNORM = 84;
  123. const VK_FORMAT_R16G16B16_SNORM = 85;
  124. const VK_FORMAT_R16G16B16_UINT = 88;
  125. const VK_FORMAT_R16G16B16_SINT = 89;
  126. const VK_FORMAT_R16G16B16_SFLOAT = 90;
  127. const VK_FORMAT_R16G16B16A16_UNORM = 91;
  128. const VK_FORMAT_R16G16B16A16_SNORM = 92;
  129. const VK_FORMAT_R16G16B16A16_UINT = 95;
  130. const VK_FORMAT_R16G16B16A16_SINT = 96;
  131. const VK_FORMAT_R16G16B16A16_SFLOAT = 97;
  132. const VK_FORMAT_R32_UINT = 98;
  133. const VK_FORMAT_R32_SINT = 99;
  134. const VK_FORMAT_R32_SFLOAT = 100;
  135. const VK_FORMAT_R32G32_UINT = 101;
  136. const VK_FORMAT_R32G32_SINT = 102;
  137. const VK_FORMAT_R32G32_SFLOAT = 103;
  138. const VK_FORMAT_R32G32B32_UINT = 104;
  139. const VK_FORMAT_R32G32B32_SINT = 105;
  140. const VK_FORMAT_R32G32B32_SFLOAT = 106;
  141. const VK_FORMAT_R32G32B32A32_UINT = 107;
  142. const VK_FORMAT_R32G32B32A32_SINT = 108;
  143. const VK_FORMAT_R32G32B32A32_SFLOAT = 109;
  144. const VK_FORMAT_R64_UINT = 110;
  145. const VK_FORMAT_R64_SINT = 111;
  146. const VK_FORMAT_R64_SFLOAT = 112;
  147. const VK_FORMAT_R64G64_UINT = 113;
  148. const VK_FORMAT_R64G64_SINT = 114;
  149. const VK_FORMAT_R64G64_SFLOAT = 115;
  150. const VK_FORMAT_R64G64B64_UINT = 116;
  151. const VK_FORMAT_R64G64B64_SINT = 117;
  152. const VK_FORMAT_R64G64B64_SFLOAT = 118;
  153. const VK_FORMAT_R64G64B64A64_UINT = 119;
  154. const VK_FORMAT_R64G64B64A64_SINT = 120;
  155. const VK_FORMAT_R64G64B64A64_SFLOAT = 121;
  156. const VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122;
  157. const VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123;
  158. const VK_FORMAT_D16_UNORM = 124;
  159. const VK_FORMAT_X8_D24_UNORM_PACK32 = 125;
  160. const VK_FORMAT_D32_SFLOAT = 126;
  161. const VK_FORMAT_S8_UINT = 127;
  162. const VK_FORMAT_D16_UNORM_S8_UINT = 128;
  163. const VK_FORMAT_D24_UNORM_S8_UINT = 129;
  164. const VK_FORMAT_D32_SFLOAT_S8_UINT = 130;
  165. const VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131;
  166. const VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132;
  167. const VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133;
  168. const VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134;
  169. const VK_FORMAT_BC2_UNORM_BLOCK = 135;
  170. const VK_FORMAT_BC2_SRGB_BLOCK = 136;
  171. const VK_FORMAT_BC3_UNORM_BLOCK = 137;
  172. const VK_FORMAT_BC3_SRGB_BLOCK = 138;
  173. const VK_FORMAT_BC4_UNORM_BLOCK = 139;
  174. const VK_FORMAT_BC4_SNORM_BLOCK = 140;
  175. const VK_FORMAT_BC5_UNORM_BLOCK = 141;
  176. const VK_FORMAT_BC5_SNORM_BLOCK = 142;
  177. const VK_FORMAT_BC6H_UFLOAT_BLOCK = 143;
  178. const VK_FORMAT_BC6H_SFLOAT_BLOCK = 144;
  179. const VK_FORMAT_BC7_UNORM_BLOCK = 145;
  180. const VK_FORMAT_BC7_SRGB_BLOCK = 146;
  181. const VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147;
  182. const VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148;
  183. const VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149;
  184. const VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150;
  185. const VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151;
  186. const VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152;
  187. const VK_FORMAT_EAC_R11_UNORM_BLOCK = 153;
  188. const VK_FORMAT_EAC_R11_SNORM_BLOCK = 154;
  189. const VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155;
  190. const VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156;
  191. const VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157;
  192. const VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158;
  193. const VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159;
  194. const VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160;
  195. const VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161;
  196. const VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162;
  197. const VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163;
  198. const VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164;
  199. const VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165;
  200. const VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166;
  201. const VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167;
  202. const VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168;
  203. const VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169;
  204. const VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170;
  205. const VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171;
  206. const VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172;
  207. const VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173;
  208. const VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174;
  209. const VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175;
  210. const VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176;
  211. const VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177;
  212. const VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178;
  213. const VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179;
  214. const VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180;
  215. const VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181;
  216. const VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182;
  217. const VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183;
  218. const VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184;
  219. const VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007;
  220. const VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008;
  221. const VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009;
  222. const VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010;
  223. const VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011;
  224. const VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017;
  225. const VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018;
  226. const VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019;
  227. const VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020;
  228. const VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021;
  229. const VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000;
  230. const VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001;
  231. const VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002;
  232. const VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003;
  233. const VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004;
  234. const VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005;
  235. const VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006;
  236. const VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007;
  237. const VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000;
  238. const VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001;
  239. const VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002;
  240. const VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003;
  241. const VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004;
  242. const VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005;
  243. const VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006;
  244. const VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007;
  245. const VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008;
  246. const VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009;
  247. const VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010;
  248. const VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011;
  249. const VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012;
  250. const VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013;
  251. const VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000;
  252. const VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001;
  253. /**
  254. * Represents an unpacked KTX 2.0 texture container. Data for individual mip levels are stored in
  255. * the `.levels` array, typically compressed in Basis Universal formats. Additional properties
  256. * provide metadata required to process, transcode, and upload these textures.
  257. */
  258. class KTX2Container {
  259. constructor() {
  260. this.vkFormat = VK_FORMAT_UNDEFINED;
  261. this.typeSize = 1;
  262. this.pixelWidth = 0;
  263. this.pixelHeight = 0;
  264. this.pixelDepth = 0;
  265. this.layerCount = 0;
  266. this.faceCount = 1;
  267. this.supercompressionScheme = KHR_SUPERCOMPRESSION_NONE;
  268. this.levels = [];
  269. this.dataFormatDescriptor = [{
  270. vendorId: KHR_DF_VENDORID_KHRONOS,
  271. descriptorType: KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,
  272. descriptorBlockSize: 0,
  273. versionNumber: KHR_DF_VERSION,
  274. colorModel: KHR_DF_MODEL_UNSPECIFIED,
  275. colorPrimaries: KHR_DF_PRIMARIES_BT709,
  276. transferFunction: KHR_DF_TRANSFER_SRGB,
  277. flags: KHR_DF_FLAG_ALPHA_STRAIGHT,
  278. texelBlockDimension: [0, 0, 0, 0],
  279. bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0],
  280. samples: []
  281. }];
  282. this.keyValue = {};
  283. this.globalData = null;
  284. }
  285. }
  286. class BufferReader {
  287. constructor(data, byteOffset, byteLength, littleEndian) {
  288. this._dataView = void 0;
  289. this._littleEndian = void 0;
  290. this._offset = void 0;
  291. this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength);
  292. this._littleEndian = littleEndian;
  293. this._offset = 0;
  294. }
  295. _nextUint8() {
  296. const value = this._dataView.getUint8(this._offset);
  297. this._offset += 1;
  298. return value;
  299. }
  300. _nextUint16() {
  301. const value = this._dataView.getUint16(this._offset, this._littleEndian);
  302. this._offset += 2;
  303. return value;
  304. }
  305. _nextUint32() {
  306. const value = this._dataView.getUint32(this._offset, this._littleEndian);
  307. this._offset += 4;
  308. return value;
  309. }
  310. _nextUint64() {
  311. const left = this._dataView.getUint32(this._offset, this._littleEndian);
  312. const right = this._dataView.getUint32(this._offset + 4, this._littleEndian); // TODO(cleanup): Just test this...
  313. // const value = this._littleEndian ? left + (2 ** 32 * right) : (2 ** 32 * left) + right;
  314. const value = left + 2 ** 32 * right;
  315. this._offset += 8;
  316. return value;
  317. }
  318. _nextInt32() {
  319. const value = this._dataView.getInt32(this._offset, this._littleEndian);
  320. this._offset += 4;
  321. return value;
  322. }
  323. _skip(bytes) {
  324. this._offset += bytes;
  325. return this;
  326. }
  327. _scan(maxByteLength, term) {
  328. if (term === void 0) {
  329. term = 0x00;
  330. }
  331. const byteOffset = this._offset;
  332. let byteLength = 0;
  333. while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) {
  334. byteLength++;
  335. this._offset++;
  336. }
  337. if (byteLength < maxByteLength) this._offset++;
  338. return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);
  339. }
  340. }
  341. ///////////////////////////////////////////////////
  342. // Common.
  343. ///////////////////////////////////////////////////
  344. const KTX_WRITER = "KTX-Parse v" + "0.5.0";
  345. const NUL = new Uint8Array([0x00]); ///////////////////////////////////////////////////
  346. // KTX2 Header.
  347. ///////////////////////////////////////////////////
  348. const KTX2_ID = [// '´', 'K', 'T', 'X', '2', '0', 'ª', '\r', '\n', '\x1A', '\n'
  349. 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
  350. const HEADER_BYTE_LENGTH = 68; // 13 * 4 + 2 * 8
  351. /** Encodes text to an ArrayBuffer. */
  352. function encodeText(text) {
  353. if (typeof TextEncoder !== 'undefined') {
  354. return new TextEncoder().encode(text);
  355. }
  356. return Buffer.from(text);
  357. }
  358. /** Decodes an ArrayBuffer to text. */
  359. function decodeText(buffer) {
  360. if (typeof TextDecoder !== 'undefined') {
  361. return new TextDecoder().decode(buffer);
  362. }
  363. return Buffer.from(buffer).toString('utf8');
  364. }
  365. /** Concatenates N ArrayBuffers. */
  366. function concat(buffers) {
  367. let totalByteLength = 0;
  368. for (const buffer of buffers) {
  369. totalByteLength += buffer.byteLength;
  370. }
  371. const result = new Uint8Array(totalByteLength);
  372. let byteOffset = 0;
  373. for (const buffer of buffers) {
  374. result.set(new Uint8Array(buffer), byteOffset);
  375. byteOffset += buffer.byteLength;
  376. }
  377. return result;
  378. }
  379. /**
  380. * Parses a KTX 2.0 file, returning an unpacked {@link KTX2Container} instance with all associated
  381. * data. The container's mip levels and other binary data are pointers into the original file, not
  382. * copies, so the original file should not be overwritten after reading.
  383. *
  384. * @param data Bytes of KTX 2.0 file, as Uint8Array or Buffer.
  385. */
  386. function read(data) {
  387. ///////////////////////////////////////////////////
  388. // KTX 2.0 Identifier.
  389. ///////////////////////////////////////////////////
  390. const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length);
  391. if (id[0] !== KTX2_ID[0] || // '´'
  392. id[1] !== KTX2_ID[1] || // 'K'
  393. id[2] !== KTX2_ID[2] || // 'T'
  394. id[3] !== KTX2_ID[3] || // 'X'
  395. id[4] !== KTX2_ID[4] || // ' '
  396. id[5] !== KTX2_ID[5] || // '2'
  397. id[6] !== KTX2_ID[6] || // '0'
  398. id[7] !== KTX2_ID[7] || // 'ª'
  399. id[8] !== KTX2_ID[8] || // '\r'
  400. id[9] !== KTX2_ID[9] || // '\n'
  401. id[10] !== KTX2_ID[10] || // '\x1A'
  402. id[11] !== KTX2_ID[11] // '\n'
  403. ) {
  404. throw new Error('Missing KTX 2.0 identifier.');
  405. }
  406. const container = new KTX2Container(); ///////////////////////////////////////////////////
  407. // Header.
  408. ///////////////////////////////////////////////////
  409. const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT;
  410. const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true);
  411. container.vkFormat = headerReader._nextUint32();
  412. container.typeSize = headerReader._nextUint32();
  413. container.pixelWidth = headerReader._nextUint32();
  414. container.pixelHeight = headerReader._nextUint32();
  415. container.pixelDepth = headerReader._nextUint32();
  416. container.layerCount = headerReader._nextUint32();
  417. container.faceCount = headerReader._nextUint32();
  418. const levelCount = headerReader._nextUint32();
  419. container.supercompressionScheme = headerReader._nextUint32();
  420. const dfdByteOffset = headerReader._nextUint32();
  421. const dfdByteLength = headerReader._nextUint32();
  422. const kvdByteOffset = headerReader._nextUint32();
  423. const kvdByteLength = headerReader._nextUint32();
  424. const sgdByteOffset = headerReader._nextUint64();
  425. const sgdByteLength = headerReader._nextUint64(); ///////////////////////////////////////////////////
  426. // Level Index.
  427. ///////////////////////////////////////////////////
  428. const levelByteLength = levelCount * 3 * 8;
  429. const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true);
  430. for (let i = 0; i < levelCount; i++) {
  431. container.levels.push({
  432. levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()),
  433. uncompressedByteLength: levelReader._nextUint64()
  434. });
  435. } ///////////////////////////////////////////////////
  436. // Data Format Descriptor (DFD).
  437. ///////////////////////////////////////////////////
  438. const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true);
  439. const dfd = {
  440. vendorId: dfdReader._skip(4
  441. /* totalSize */
  442. )._nextUint16(),
  443. descriptorType: dfdReader._nextUint16(),
  444. versionNumber: dfdReader._nextUint16(),
  445. descriptorBlockSize: dfdReader._nextUint16(),
  446. colorModel: dfdReader._nextUint8(),
  447. colorPrimaries: dfdReader._nextUint8(),
  448. transferFunction: dfdReader._nextUint8(),
  449. flags: dfdReader._nextUint8(),
  450. texelBlockDimension: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],
  451. bytesPlane: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],
  452. samples: []
  453. };
  454. const sampleStart = 6;
  455. const sampleWords = 4;
  456. const numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;
  457. for (let i = 0; i < numSamples; i++) {
  458. const sample = {
  459. bitOffset: dfdReader._nextUint16(),
  460. bitLength: dfdReader._nextUint8(),
  461. channelType: dfdReader._nextUint8(),
  462. samplePosition: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],
  463. sampleLower: -Infinity,
  464. sampleUpper: Infinity
  465. };
  466. if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {
  467. sample.sampleLower = dfdReader._nextInt32();
  468. sample.sampleUpper = dfdReader._nextInt32();
  469. } else {
  470. sample.sampleLower = dfdReader._nextUint32();
  471. sample.sampleUpper = dfdReader._nextUint32();
  472. }
  473. dfd.samples[i] = sample;
  474. }
  475. container.dataFormatDescriptor.length = 0;
  476. container.dataFormatDescriptor.push(dfd); ///////////////////////////////////////////////////
  477. // Key/Value Data (KVD).
  478. ///////////////////////////////////////////////////
  479. const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);
  480. while (kvdReader._offset < kvdByteLength) {
  481. const keyValueByteLength = kvdReader._nextUint32();
  482. const keyData = kvdReader._scan(keyValueByteLength);
  483. const key = decodeText(keyData);
  484. const valueData = kvdReader._scan(keyValueByteLength - keyData.byteLength);
  485. container.keyValue[key] = key.match(/^ktx/i) ? decodeText(valueData) : valueData; // 4-byte alignment.
  486. if (kvdReader._offset % 4) kvdReader._skip(4 - kvdReader._offset % 4);
  487. } ///////////////////////////////////////////////////
  488. // Supercompression Global Data (SGD).
  489. ///////////////////////////////////////////////////
  490. if (sgdByteLength <= 0) return container;
  491. const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);
  492. const endpointCount = sgdReader._nextUint16();
  493. const selectorCount = sgdReader._nextUint16();
  494. const endpointsByteLength = sgdReader._nextUint32();
  495. const selectorsByteLength = sgdReader._nextUint32();
  496. const tablesByteLength = sgdReader._nextUint32();
  497. const extendedByteLength = sgdReader._nextUint32();
  498. const imageDescs = [];
  499. for (let i = 0; i < levelCount; i++) {
  500. imageDescs.push({
  501. imageFlags: sgdReader._nextUint32(),
  502. rgbSliceByteOffset: sgdReader._nextUint32(),
  503. rgbSliceByteLength: sgdReader._nextUint32(),
  504. alphaSliceByteOffset: sgdReader._nextUint32(),
  505. alphaSliceByteLength: sgdReader._nextUint32()
  506. });
  507. }
  508. const endpointsByteOffset = sgdByteOffset + sgdReader._offset;
  509. const selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
  510. const tablesByteOffset = selectorsByteOffset + selectorsByteLength;
  511. const extendedByteOffset = tablesByteOffset + tablesByteLength;
  512. const endpointsData = new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength);
  513. const selectorsData = new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength);
  514. const tablesData = new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength);
  515. const extendedData = new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength);
  516. container.globalData = {
  517. endpointCount,
  518. selectorCount,
  519. imageDescs,
  520. endpointsData,
  521. selectorsData,
  522. tablesData,
  523. extendedData
  524. };
  525. return container;
  526. }
  527. const DEFAULT_OPTIONS = {
  528. keepWriter: false
  529. };
  530. /**
  531. * Serializes a {@link KTX2Container} instance to a KTX 2.0 file. Mip levels and other binary data
  532. * are copied into the resulting Uint8Array, so the original container can safely be edited or
  533. * destroyed after it is serialized.
  534. *
  535. * Options:
  536. * - keepWriter: If true, 'KTXWriter' key/value field is written as provided by the container.
  537. * Otherwise, a string for the current ktx-parse version is generated. Default: false.
  538. *
  539. * @param container
  540. * @param options
  541. */
  542. function write(container, options) {
  543. if (options === void 0) {
  544. options = {};
  545. }
  546. options = { ...DEFAULT_OPTIONS,
  547. ...options
  548. }; ///////////////////////////////////////////////////
  549. // Supercompression Global Data (SGD).
  550. ///////////////////////////////////////////////////
  551. let sgdBuffer = new ArrayBuffer(0);
  552. if (container.globalData) {
  553. const sgdHeaderBuffer = new ArrayBuffer(20 + container.globalData.imageDescs.length * 5 * 4);
  554. const sgdHeaderView = new DataView(sgdHeaderBuffer);
  555. sgdHeaderView.setUint16(0, container.globalData.endpointCount, true);
  556. sgdHeaderView.setUint16(2, container.globalData.selectorCount, true);
  557. sgdHeaderView.setUint32(4, container.globalData.endpointsData.byteLength, true);
  558. sgdHeaderView.setUint32(8, container.globalData.selectorsData.byteLength, true);
  559. sgdHeaderView.setUint32(12, container.globalData.tablesData.byteLength, true);
  560. sgdHeaderView.setUint32(16, container.globalData.extendedData.byteLength, true);
  561. for (let i = 0; i < container.globalData.imageDescs.length; i++) {
  562. const imageDesc = container.globalData.imageDescs[i];
  563. sgdHeaderView.setUint32(20 + i * 5 * 4 + 0, imageDesc.imageFlags, true);
  564. sgdHeaderView.setUint32(20 + i * 5 * 4 + 4, imageDesc.rgbSliceByteOffset, true);
  565. sgdHeaderView.setUint32(20 + i * 5 * 4 + 8, imageDesc.rgbSliceByteLength, true);
  566. sgdHeaderView.setUint32(20 + i * 5 * 4 + 12, imageDesc.alphaSliceByteOffset, true);
  567. sgdHeaderView.setUint32(20 + i * 5 * 4 + 16, imageDesc.alphaSliceByteLength, true);
  568. }
  569. sgdBuffer = concat([sgdHeaderBuffer, container.globalData.endpointsData, container.globalData.selectorsData, container.globalData.tablesData, container.globalData.extendedData]);
  570. } ///////////////////////////////////////////////////
  571. // Key/Value Data (KVD).
  572. ///////////////////////////////////////////////////
  573. const keyValueData = [];
  574. let keyValue = container.keyValue;
  575. if (!options.keepWriter) {
  576. keyValue = { ...container.keyValue,
  577. KTXwriter: KTX_WRITER
  578. };
  579. }
  580. for (const key in keyValue) {
  581. const value = keyValue[key];
  582. const keyData = encodeText(key);
  583. const valueData = typeof value === 'string' ? encodeText(value) : value;
  584. const kvByteLength = keyData.byteLength + 1 + valueData.byteLength + 1;
  585. const kvPadding = kvByteLength % 4 ? 4 - kvByteLength % 4 : 0; // align(4)
  586. keyValueData.push(concat([new Uint32Array([kvByteLength]), keyData, NUL, valueData, NUL, new Uint8Array(kvPadding).fill(0x00) // align(4)
  587. ]));
  588. }
  589. const kvdBuffer = concat(keyValueData); ///////////////////////////////////////////////////
  590. // Data Format Descriptor (DFD).
  591. ///////////////////////////////////////////////////
  592. if (container.dataFormatDescriptor.length !== 1 || container.dataFormatDescriptor[0].descriptorType !== KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT) {
  593. throw new Error('Only BASICFORMAT Data Format Descriptor output supported.');
  594. }
  595. const dfd = container.dataFormatDescriptor[0];
  596. const dfdBuffer = new ArrayBuffer(28 + dfd.samples.length * 16);
  597. const dfdView = new DataView(dfdBuffer);
  598. const descriptorBlockSize = 24 + dfd.samples.length * 16;
  599. dfdView.setUint32(0, dfdBuffer.byteLength, true);
  600. dfdView.setUint16(4, dfd.vendorId, true);
  601. dfdView.setUint16(6, dfd.descriptorType, true);
  602. dfdView.setUint16(8, dfd.versionNumber, true);
  603. dfdView.setUint16(10, descriptorBlockSize, true);
  604. dfdView.setUint8(12, dfd.colorModel);
  605. dfdView.setUint8(13, dfd.colorPrimaries);
  606. dfdView.setUint8(14, dfd.transferFunction);
  607. dfdView.setUint8(15, dfd.flags);
  608. if (!Array.isArray(dfd.texelBlockDimension)) {
  609. throw new Error('texelBlockDimension is now an array. For dimensionality `d`, set `d - 1`.');
  610. }
  611. dfdView.setUint8(16, dfd.texelBlockDimension[0]);
  612. dfdView.setUint8(17, dfd.texelBlockDimension[1]);
  613. dfdView.setUint8(18, dfd.texelBlockDimension[2]);
  614. dfdView.setUint8(19, dfd.texelBlockDimension[3]);
  615. for (let i = 0; i < 8; i++) dfdView.setUint8(20 + i, dfd.bytesPlane[i]);
  616. for (let i = 0; i < dfd.samples.length; i++) {
  617. const sample = dfd.samples[i];
  618. const sampleByteOffset = 28 + i * 16;
  619. if (sample.channelID) {
  620. throw new Error('channelID has been renamed to channelType.');
  621. }
  622. dfdView.setUint16(sampleByteOffset + 0, sample.bitOffset, true);
  623. dfdView.setUint8(sampleByteOffset + 2, sample.bitLength);
  624. dfdView.setUint8(sampleByteOffset + 3, sample.channelType);
  625. dfdView.setUint8(sampleByteOffset + 4, sample.samplePosition[0]);
  626. dfdView.setUint8(sampleByteOffset + 5, sample.samplePosition[1]);
  627. dfdView.setUint8(sampleByteOffset + 6, sample.samplePosition[2]);
  628. dfdView.setUint8(sampleByteOffset + 7, sample.samplePosition[3]);
  629. if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {
  630. dfdView.setInt32(sampleByteOffset + 8, sample.sampleLower, true);
  631. dfdView.setInt32(sampleByteOffset + 12, sample.sampleUpper, true);
  632. } else {
  633. dfdView.setUint32(sampleByteOffset + 8, sample.sampleLower, true);
  634. dfdView.setUint32(sampleByteOffset + 12, sample.sampleUpper, true);
  635. }
  636. } ///////////////////////////////////////////////////
  637. // Data alignment.
  638. ///////////////////////////////////////////////////
  639. const dfdByteOffset = KTX2_ID.length + HEADER_BYTE_LENGTH + container.levels.length * 3 * 8;
  640. const kvdByteOffset = dfdByteOffset + dfdBuffer.byteLength;
  641. let sgdByteOffset = sgdBuffer.byteLength > 0 ? kvdByteOffset + kvdBuffer.byteLength : 0;
  642. if (sgdByteOffset % 8) sgdByteOffset += 8 - sgdByteOffset % 8; // align(8)
  643. ///////////////////////////////////////////////////
  644. // Level Index.
  645. ///////////////////////////////////////////////////
  646. const levelData = [];
  647. const levelIndex = new DataView(new ArrayBuffer(container.levels.length * 3 * 8));
  648. let levelDataByteOffset = (sgdByteOffset || kvdByteOffset + kvdBuffer.byteLength) + sgdBuffer.byteLength;
  649. for (let i = 0; i < container.levels.length; i++) {
  650. const level = container.levels[i];
  651. levelData.push(level.levelData);
  652. levelIndex.setBigUint64(i * 24 + 0, BigInt(levelDataByteOffset), true);
  653. levelIndex.setBigUint64(i * 24 + 8, BigInt(level.levelData.byteLength), true);
  654. levelIndex.setBigUint64(i * 24 + 16, BigInt(level.uncompressedByteLength), true);
  655. levelDataByteOffset += level.levelData.byteLength;
  656. } ///////////////////////////////////////////////////
  657. // Header.
  658. ///////////////////////////////////////////////////
  659. const headerBuffer = new ArrayBuffer(HEADER_BYTE_LENGTH);
  660. const headerView = new DataView(headerBuffer);
  661. headerView.setUint32(0, container.vkFormat, true);
  662. headerView.setUint32(4, container.typeSize, true);
  663. headerView.setUint32(8, container.pixelWidth, true);
  664. headerView.setUint32(12, container.pixelHeight, true);
  665. headerView.setUint32(16, container.pixelDepth, true);
  666. headerView.setUint32(20, container.layerCount, true);
  667. headerView.setUint32(24, container.faceCount, true);
  668. headerView.setUint32(28, container.levels.length, true);
  669. headerView.setUint32(32, container.supercompressionScheme, true);
  670. headerView.setUint32(36, dfdByteOffset, true);
  671. headerView.setUint32(40, dfdBuffer.byteLength, true);
  672. headerView.setUint32(44, kvdByteOffset, true);
  673. headerView.setUint32(48, kvdBuffer.byteLength, true);
  674. headerView.setBigUint64(52, BigInt(sgdBuffer.byteLength > 0 ? sgdByteOffset : 0), true);
  675. headerView.setBigUint64(60, BigInt(sgdBuffer.byteLength), true); ///////////////////////////////////////////////////
  676. // Compose.
  677. ///////////////////////////////////////////////////
  678. return new Uint8Array(concat([new Uint8Array(KTX2_ID).buffer, headerBuffer, levelIndex.buffer, dfdBuffer, kvdBuffer, sgdByteOffset > 0 ? new ArrayBuffer(sgdByteOffset - (kvdByteOffset + kvdBuffer.byteLength)) // align(8)
  679. : new ArrayBuffer(0), sgdBuffer, ...levelData]));
  680. }
  681. exports.KHR_DF_CHANNEL_RGBSDA_ALPHA = KHR_DF_CHANNEL_RGBSDA_ALPHA;
  682. exports.KHR_DF_CHANNEL_RGBSDA_BLUE = KHR_DF_CHANNEL_RGBSDA_BLUE;
  683. exports.KHR_DF_CHANNEL_RGBSDA_DEPTH = KHR_DF_CHANNEL_RGBSDA_DEPTH;
  684. exports.KHR_DF_CHANNEL_RGBSDA_GREEN = KHR_DF_CHANNEL_RGBSDA_GREEN;
  685. exports.KHR_DF_CHANNEL_RGBSDA_RED = KHR_DF_CHANNEL_RGBSDA_RED;
  686. exports.KHR_DF_CHANNEL_RGBSDA_STENCIL = KHR_DF_CHANNEL_RGBSDA_STENCIL;
  687. exports.KHR_DF_FLAG_ALPHA_PREMULTIPLIED = KHR_DF_FLAG_ALPHA_PREMULTIPLIED;
  688. exports.KHR_DF_FLAG_ALPHA_STRAIGHT = KHR_DF_FLAG_ALPHA_STRAIGHT;
  689. exports.KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT;
  690. exports.KHR_DF_MODEL_ASTC = KHR_DF_MODEL_ASTC;
  691. exports.KHR_DF_MODEL_ETC1 = KHR_DF_MODEL_ETC1;
  692. exports.KHR_DF_MODEL_ETC1S = KHR_DF_MODEL_ETC1S;
  693. exports.KHR_DF_MODEL_ETC2 = KHR_DF_MODEL_ETC2;
  694. exports.KHR_DF_MODEL_RGBSDA = KHR_DF_MODEL_RGBSDA;
  695. exports.KHR_DF_MODEL_UASTC = KHR_DF_MODEL_UASTC;
  696. exports.KHR_DF_MODEL_UNSPECIFIED = KHR_DF_MODEL_UNSPECIFIED;
  697. exports.KHR_DF_PRIMARIES_ACES = KHR_DF_PRIMARIES_ACES;
  698. exports.KHR_DF_PRIMARIES_ACESCC = KHR_DF_PRIMARIES_ACESCC;
  699. exports.KHR_DF_PRIMARIES_ADOBERGB = KHR_DF_PRIMARIES_ADOBERGB;
  700. exports.KHR_DF_PRIMARIES_BT2020 = KHR_DF_PRIMARIES_BT2020;
  701. exports.KHR_DF_PRIMARIES_BT601_EBU = KHR_DF_PRIMARIES_BT601_EBU;
  702. exports.KHR_DF_PRIMARIES_BT601_SMPTE = KHR_DF_PRIMARIES_BT601_SMPTE;
  703. exports.KHR_DF_PRIMARIES_BT709 = KHR_DF_PRIMARIES_BT709;
  704. exports.KHR_DF_PRIMARIES_CIEXYZ = KHR_DF_PRIMARIES_CIEXYZ;
  705. exports.KHR_DF_PRIMARIES_DISPLAYP3 = KHR_DF_PRIMARIES_DISPLAYP3;
  706. exports.KHR_DF_PRIMARIES_NTSC1953 = KHR_DF_PRIMARIES_NTSC1953;
  707. exports.KHR_DF_PRIMARIES_PAL525 = KHR_DF_PRIMARIES_PAL525;
  708. exports.KHR_DF_PRIMARIES_UNSPECIFIED = KHR_DF_PRIMARIES_UNSPECIFIED;
  709. exports.KHR_DF_SAMPLE_DATATYPE_EXPONENT = KHR_DF_SAMPLE_DATATYPE_EXPONENT;
  710. exports.KHR_DF_SAMPLE_DATATYPE_FLOAT = KHR_DF_SAMPLE_DATATYPE_FLOAT;
  711. exports.KHR_DF_SAMPLE_DATATYPE_LINEAR = KHR_DF_SAMPLE_DATATYPE_LINEAR;
  712. exports.KHR_DF_SAMPLE_DATATYPE_SIGNED = KHR_DF_SAMPLE_DATATYPE_SIGNED;
  713. exports.KHR_DF_TRANSFER_ACESCC = KHR_DF_TRANSFER_ACESCC;
  714. exports.KHR_DF_TRANSFER_ACESCCT = KHR_DF_TRANSFER_ACESCCT;
  715. exports.KHR_DF_TRANSFER_ADOBERGB = KHR_DF_TRANSFER_ADOBERGB;
  716. exports.KHR_DF_TRANSFER_BT1886 = KHR_DF_TRANSFER_BT1886;
  717. exports.KHR_DF_TRANSFER_DCIP3 = KHR_DF_TRANSFER_DCIP3;
  718. exports.KHR_DF_TRANSFER_HLG_EOTF = KHR_DF_TRANSFER_HLG_EOTF;
  719. exports.KHR_DF_TRANSFER_HLG_OETF = KHR_DF_TRANSFER_HLG_OETF;
  720. exports.KHR_DF_TRANSFER_ITU = KHR_DF_TRANSFER_ITU;
  721. exports.KHR_DF_TRANSFER_LINEAR = KHR_DF_TRANSFER_LINEAR;
  722. exports.KHR_DF_TRANSFER_NTSC = KHR_DF_TRANSFER_NTSC;
  723. exports.KHR_DF_TRANSFER_PAL625_EOTF = KHR_DF_TRANSFER_PAL625_EOTF;
  724. exports.KHR_DF_TRANSFER_PAL_OETF = KHR_DF_TRANSFER_PAL_OETF;
  725. exports.KHR_DF_TRANSFER_PQ_EOTF = KHR_DF_TRANSFER_PQ_EOTF;
  726. exports.KHR_DF_TRANSFER_PQ_OETF = KHR_DF_TRANSFER_PQ_OETF;
  727. exports.KHR_DF_TRANSFER_SLOG = KHR_DF_TRANSFER_SLOG;
  728. exports.KHR_DF_TRANSFER_SLOG2 = KHR_DF_TRANSFER_SLOG2;
  729. exports.KHR_DF_TRANSFER_SRGB = KHR_DF_TRANSFER_SRGB;
  730. exports.KHR_DF_TRANSFER_ST240 = KHR_DF_TRANSFER_ST240;
  731. exports.KHR_DF_TRANSFER_UNSPECIFIED = KHR_DF_TRANSFER_UNSPECIFIED;
  732. exports.KHR_DF_VENDORID_KHRONOS = KHR_DF_VENDORID_KHRONOS;
  733. exports.KHR_DF_VERSION = KHR_DF_VERSION;
  734. exports.KHR_SUPERCOMPRESSION_BASISLZ = KHR_SUPERCOMPRESSION_BASISLZ;
  735. exports.KHR_SUPERCOMPRESSION_NONE = KHR_SUPERCOMPRESSION_NONE;
  736. exports.KHR_SUPERCOMPRESSION_ZLIB = KHR_SUPERCOMPRESSION_ZLIB;
  737. exports.KHR_SUPERCOMPRESSION_ZSTD = KHR_SUPERCOMPRESSION_ZSTD;
  738. exports.KTX2Container = KTX2Container;
  739. exports.VK_FORMAT_A1R5G5B5_UNORM_PACK16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16;
  740. exports.VK_FORMAT_A2B10G10R10_SINT_PACK32 = VK_FORMAT_A2B10G10R10_SINT_PACK32;
  741. exports.VK_FORMAT_A2B10G10R10_SNORM_PACK32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32;
  742. exports.VK_FORMAT_A2B10G10R10_UINT_PACK32 = VK_FORMAT_A2B10G10R10_UINT_PACK32;
  743. exports.VK_FORMAT_A2B10G10R10_UNORM_PACK32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
  744. exports.VK_FORMAT_A2R10G10B10_SINT_PACK32 = VK_FORMAT_A2R10G10B10_SINT_PACK32;
  745. exports.VK_FORMAT_A2R10G10B10_SNORM_PACK32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32;
  746. exports.VK_FORMAT_A2R10G10B10_UINT_PACK32 = VK_FORMAT_A2R10G10B10_UINT_PACK32;
  747. exports.VK_FORMAT_A2R10G10B10_UNORM_PACK32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32;
  748. exports.VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT;
  749. exports.VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT;
  750. exports.VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT;
  751. exports.VK_FORMAT_ASTC_10x10_SRGB_BLOCK = VK_FORMAT_ASTC_10x10_SRGB_BLOCK;
  752. exports.VK_FORMAT_ASTC_10x10_UNORM_BLOCK = VK_FORMAT_ASTC_10x10_UNORM_BLOCK;
  753. exports.VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT;
  754. exports.VK_FORMAT_ASTC_10x5_SRGB_BLOCK = VK_FORMAT_ASTC_10x5_SRGB_BLOCK;
  755. exports.VK_FORMAT_ASTC_10x5_UNORM_BLOCK = VK_FORMAT_ASTC_10x5_UNORM_BLOCK;
  756. exports.VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT;
  757. exports.VK_FORMAT_ASTC_10x6_SRGB_BLOCK = VK_FORMAT_ASTC_10x6_SRGB_BLOCK;
  758. exports.VK_FORMAT_ASTC_10x6_UNORM_BLOCK = VK_FORMAT_ASTC_10x6_UNORM_BLOCK;
  759. exports.VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT;
  760. exports.VK_FORMAT_ASTC_10x8_SRGB_BLOCK = VK_FORMAT_ASTC_10x8_SRGB_BLOCK;
  761. exports.VK_FORMAT_ASTC_10x8_UNORM_BLOCK = VK_FORMAT_ASTC_10x8_UNORM_BLOCK;
  762. exports.VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT;
  763. exports.VK_FORMAT_ASTC_12x10_SRGB_BLOCK = VK_FORMAT_ASTC_12x10_SRGB_BLOCK;
  764. exports.VK_FORMAT_ASTC_12x10_UNORM_BLOCK = VK_FORMAT_ASTC_12x10_UNORM_BLOCK;
  765. exports.VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT;
  766. exports.VK_FORMAT_ASTC_12x12_SRGB_BLOCK = VK_FORMAT_ASTC_12x12_SRGB_BLOCK;
  767. exports.VK_FORMAT_ASTC_12x12_UNORM_BLOCK = VK_FORMAT_ASTC_12x12_UNORM_BLOCK;
  768. exports.VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT;
  769. exports.VK_FORMAT_ASTC_4x4_SRGB_BLOCK = VK_FORMAT_ASTC_4x4_SRGB_BLOCK;
  770. exports.VK_FORMAT_ASTC_4x4_UNORM_BLOCK = VK_FORMAT_ASTC_4x4_UNORM_BLOCK;
  771. exports.VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT;
  772. exports.VK_FORMAT_ASTC_5x4_SRGB_BLOCK = VK_FORMAT_ASTC_5x4_SRGB_BLOCK;
  773. exports.VK_FORMAT_ASTC_5x4_UNORM_BLOCK = VK_FORMAT_ASTC_5x4_UNORM_BLOCK;
  774. exports.VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT;
  775. exports.VK_FORMAT_ASTC_5x5_SRGB_BLOCK = VK_FORMAT_ASTC_5x5_SRGB_BLOCK;
  776. exports.VK_FORMAT_ASTC_5x5_UNORM_BLOCK = VK_FORMAT_ASTC_5x5_UNORM_BLOCK;
  777. exports.VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT;
  778. exports.VK_FORMAT_ASTC_6x5_SRGB_BLOCK = VK_FORMAT_ASTC_6x5_SRGB_BLOCK;
  779. exports.VK_FORMAT_ASTC_6x5_UNORM_BLOCK = VK_FORMAT_ASTC_6x5_UNORM_BLOCK;
  780. exports.VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT;
  781. exports.VK_FORMAT_ASTC_6x6_SRGB_BLOCK = VK_FORMAT_ASTC_6x6_SRGB_BLOCK;
  782. exports.VK_FORMAT_ASTC_6x6_UNORM_BLOCK = VK_FORMAT_ASTC_6x6_UNORM_BLOCK;
  783. exports.VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT;
  784. exports.VK_FORMAT_ASTC_8x5_SRGB_BLOCK = VK_FORMAT_ASTC_8x5_SRGB_BLOCK;
  785. exports.VK_FORMAT_ASTC_8x5_UNORM_BLOCK = VK_FORMAT_ASTC_8x5_UNORM_BLOCK;
  786. exports.VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT;
  787. exports.VK_FORMAT_ASTC_8x6_SRGB_BLOCK = VK_FORMAT_ASTC_8x6_SRGB_BLOCK;
  788. exports.VK_FORMAT_ASTC_8x6_UNORM_BLOCK = VK_FORMAT_ASTC_8x6_UNORM_BLOCK;
  789. exports.VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT;
  790. exports.VK_FORMAT_ASTC_8x8_SRGB_BLOCK = VK_FORMAT_ASTC_8x8_SRGB_BLOCK;
  791. exports.VK_FORMAT_ASTC_8x8_UNORM_BLOCK = VK_FORMAT_ASTC_8x8_UNORM_BLOCK;
  792. exports.VK_FORMAT_B10G11R11_UFLOAT_PACK32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32;
  793. exports.VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16;
  794. exports.VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16;
  795. exports.VK_FORMAT_B4G4R4A4_UNORM_PACK16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16;
  796. exports.VK_FORMAT_B5G5R5A1_UNORM_PACK16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16;
  797. exports.VK_FORMAT_B5G6R5_UNORM_PACK16 = VK_FORMAT_B5G6R5_UNORM_PACK16;
  798. exports.VK_FORMAT_B8G8R8A8_SINT = VK_FORMAT_B8G8R8A8_SINT;
  799. exports.VK_FORMAT_B8G8R8A8_SNORM = VK_FORMAT_B8G8R8A8_SNORM;
  800. exports.VK_FORMAT_B8G8R8A8_SRGB = VK_FORMAT_B8G8R8A8_SRGB;
  801. exports.VK_FORMAT_B8G8R8A8_UINT = VK_FORMAT_B8G8R8A8_UINT;
  802. exports.VK_FORMAT_B8G8R8A8_UNORM = VK_FORMAT_B8G8R8A8_UNORM;
  803. exports.VK_FORMAT_B8G8R8_SINT = VK_FORMAT_B8G8R8_SINT;
  804. exports.VK_FORMAT_B8G8R8_SNORM = VK_FORMAT_B8G8R8_SNORM;
  805. exports.VK_FORMAT_B8G8R8_SRGB = VK_FORMAT_B8G8R8_SRGB;
  806. exports.VK_FORMAT_B8G8R8_UINT = VK_FORMAT_B8G8R8_UINT;
  807. exports.VK_FORMAT_B8G8R8_UNORM = VK_FORMAT_B8G8R8_UNORM;
  808. exports.VK_FORMAT_BC1_RGBA_SRGB_BLOCK = VK_FORMAT_BC1_RGBA_SRGB_BLOCK;
  809. exports.VK_FORMAT_BC1_RGBA_UNORM_BLOCK = VK_FORMAT_BC1_RGBA_UNORM_BLOCK;
  810. exports.VK_FORMAT_BC1_RGB_SRGB_BLOCK = VK_FORMAT_BC1_RGB_SRGB_BLOCK;
  811. exports.VK_FORMAT_BC1_RGB_UNORM_BLOCK = VK_FORMAT_BC1_RGB_UNORM_BLOCK;
  812. exports.VK_FORMAT_BC2_SRGB_BLOCK = VK_FORMAT_BC2_SRGB_BLOCK;
  813. exports.VK_FORMAT_BC2_UNORM_BLOCK = VK_FORMAT_BC2_UNORM_BLOCK;
  814. exports.VK_FORMAT_BC3_SRGB_BLOCK = VK_FORMAT_BC3_SRGB_BLOCK;
  815. exports.VK_FORMAT_BC3_UNORM_BLOCK = VK_FORMAT_BC3_UNORM_BLOCK;
  816. exports.VK_FORMAT_BC4_SNORM_BLOCK = VK_FORMAT_BC4_SNORM_BLOCK;
  817. exports.VK_FORMAT_BC4_UNORM_BLOCK = VK_FORMAT_BC4_UNORM_BLOCK;
  818. exports.VK_FORMAT_BC5_SNORM_BLOCK = VK_FORMAT_BC5_SNORM_BLOCK;
  819. exports.VK_FORMAT_BC5_UNORM_BLOCK = VK_FORMAT_BC5_UNORM_BLOCK;
  820. exports.VK_FORMAT_BC6H_SFLOAT_BLOCK = VK_FORMAT_BC6H_SFLOAT_BLOCK;
  821. exports.VK_FORMAT_BC6H_UFLOAT_BLOCK = VK_FORMAT_BC6H_UFLOAT_BLOCK;
  822. exports.VK_FORMAT_BC7_SRGB_BLOCK = VK_FORMAT_BC7_SRGB_BLOCK;
  823. exports.VK_FORMAT_BC7_UNORM_BLOCK = VK_FORMAT_BC7_UNORM_BLOCK;
  824. exports.VK_FORMAT_D16_UNORM = VK_FORMAT_D16_UNORM;
  825. exports.VK_FORMAT_D16_UNORM_S8_UINT = VK_FORMAT_D16_UNORM_S8_UINT;
  826. exports.VK_FORMAT_D24_UNORM_S8_UINT = VK_FORMAT_D24_UNORM_S8_UINT;
  827. exports.VK_FORMAT_D32_SFLOAT = VK_FORMAT_D32_SFLOAT;
  828. exports.VK_FORMAT_D32_SFLOAT_S8_UINT = VK_FORMAT_D32_SFLOAT_S8_UINT;
  829. exports.VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32;
  830. exports.VK_FORMAT_EAC_R11G11_SNORM_BLOCK = VK_FORMAT_EAC_R11G11_SNORM_BLOCK;
  831. exports.VK_FORMAT_EAC_R11G11_UNORM_BLOCK = VK_FORMAT_EAC_R11G11_UNORM_BLOCK;
  832. exports.VK_FORMAT_EAC_R11_SNORM_BLOCK = VK_FORMAT_EAC_R11_SNORM_BLOCK;
  833. exports.VK_FORMAT_EAC_R11_UNORM_BLOCK = VK_FORMAT_EAC_R11_UNORM_BLOCK;
  834. exports.VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK;
  835. exports.VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK;
  836. exports.VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK;
  837. exports.VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK;
  838. exports.VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK;
  839. exports.VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK;
  840. exports.VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16;
  841. exports.VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16;
  842. exports.VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG;
  843. exports.VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;
  844. exports.VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG;
  845. exports.VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG;
  846. exports.VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG;
  847. exports.VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG;
  848. exports.VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG;
  849. exports.VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG;
  850. exports.VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16;
  851. exports.VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = VK_FORMAT_R10X6G10X6_UNORM_2PACK16;
  852. exports.VK_FORMAT_R10X6_UNORM_PACK16 = VK_FORMAT_R10X6_UNORM_PACK16;
  853. exports.VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16;
  854. exports.VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = VK_FORMAT_R12X4G12X4_UNORM_2PACK16;
  855. exports.VK_FORMAT_R12X4_UNORM_PACK16 = VK_FORMAT_R12X4_UNORM_PACK16;
  856. exports.VK_FORMAT_R16G16B16A16_SFLOAT = VK_FORMAT_R16G16B16A16_SFLOAT;
  857. exports.VK_FORMAT_R16G16B16A16_SINT = VK_FORMAT_R16G16B16A16_SINT;
  858. exports.VK_FORMAT_R16G16B16A16_SNORM = VK_FORMAT_R16G16B16A16_SNORM;
  859. exports.VK_FORMAT_R16G16B16A16_UINT = VK_FORMAT_R16G16B16A16_UINT;
  860. exports.VK_FORMAT_R16G16B16A16_UNORM = VK_FORMAT_R16G16B16A16_UNORM;
  861. exports.VK_FORMAT_R16G16B16_SFLOAT = VK_FORMAT_R16G16B16_SFLOAT;
  862. exports.VK_FORMAT_R16G16B16_SINT = VK_FORMAT_R16G16B16_SINT;
  863. exports.VK_FORMAT_R16G16B16_SNORM = VK_FORMAT_R16G16B16_SNORM;
  864. exports.VK_FORMAT_R16G16B16_UINT = VK_FORMAT_R16G16B16_UINT;
  865. exports.VK_FORMAT_R16G16B16_UNORM = VK_FORMAT_R16G16B16_UNORM;
  866. exports.VK_FORMAT_R16G16_SFLOAT = VK_FORMAT_R16G16_SFLOAT;
  867. exports.VK_FORMAT_R16G16_SINT = VK_FORMAT_R16G16_SINT;
  868. exports.VK_FORMAT_R16G16_SNORM = VK_FORMAT_R16G16_SNORM;
  869. exports.VK_FORMAT_R16G16_UINT = VK_FORMAT_R16G16_UINT;
  870. exports.VK_FORMAT_R16G16_UNORM = VK_FORMAT_R16G16_UNORM;
  871. exports.VK_FORMAT_R16_SFLOAT = VK_FORMAT_R16_SFLOAT;
  872. exports.VK_FORMAT_R16_SINT = VK_FORMAT_R16_SINT;
  873. exports.VK_FORMAT_R16_SNORM = VK_FORMAT_R16_SNORM;
  874. exports.VK_FORMAT_R16_UINT = VK_FORMAT_R16_UINT;
  875. exports.VK_FORMAT_R16_UNORM = VK_FORMAT_R16_UNORM;
  876. exports.VK_FORMAT_R32G32B32A32_SFLOAT = VK_FORMAT_R32G32B32A32_SFLOAT;
  877. exports.VK_FORMAT_R32G32B32A32_SINT = VK_FORMAT_R32G32B32A32_SINT;
  878. exports.VK_FORMAT_R32G32B32A32_UINT = VK_FORMAT_R32G32B32A32_UINT;
  879. exports.VK_FORMAT_R32G32B32_SFLOAT = VK_FORMAT_R32G32B32_SFLOAT;
  880. exports.VK_FORMAT_R32G32B32_SINT = VK_FORMAT_R32G32B32_SINT;
  881. exports.VK_FORMAT_R32G32B32_UINT = VK_FORMAT_R32G32B32_UINT;
  882. exports.VK_FORMAT_R32G32_SFLOAT = VK_FORMAT_R32G32_SFLOAT;
  883. exports.VK_FORMAT_R32G32_SINT = VK_FORMAT_R32G32_SINT;
  884. exports.VK_FORMAT_R32G32_UINT = VK_FORMAT_R32G32_UINT;
  885. exports.VK_FORMAT_R32_SFLOAT = VK_FORMAT_R32_SFLOAT;
  886. exports.VK_FORMAT_R32_SINT = VK_FORMAT_R32_SINT;
  887. exports.VK_FORMAT_R32_UINT = VK_FORMAT_R32_UINT;
  888. exports.VK_FORMAT_R4G4B4A4_UNORM_PACK16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16;
  889. exports.VK_FORMAT_R4G4_UNORM_PACK8 = VK_FORMAT_R4G4_UNORM_PACK8;
  890. exports.VK_FORMAT_R5G5B5A1_UNORM_PACK16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16;
  891. exports.VK_FORMAT_R5G6B5_UNORM_PACK16 = VK_FORMAT_R5G6B5_UNORM_PACK16;
  892. exports.VK_FORMAT_R64G64B64A64_SFLOAT = VK_FORMAT_R64G64B64A64_SFLOAT;
  893. exports.VK_FORMAT_R64G64B64A64_SINT = VK_FORMAT_R64G64B64A64_SINT;
  894. exports.VK_FORMAT_R64G64B64A64_UINT = VK_FORMAT_R64G64B64A64_UINT;
  895. exports.VK_FORMAT_R64G64B64_SFLOAT = VK_FORMAT_R64G64B64_SFLOAT;
  896. exports.VK_FORMAT_R64G64B64_SINT = VK_FORMAT_R64G64B64_SINT;
  897. exports.VK_FORMAT_R64G64B64_UINT = VK_FORMAT_R64G64B64_UINT;
  898. exports.VK_FORMAT_R64G64_SFLOAT = VK_FORMAT_R64G64_SFLOAT;
  899. exports.VK_FORMAT_R64G64_SINT = VK_FORMAT_R64G64_SINT;
  900. exports.VK_FORMAT_R64G64_UINT = VK_FORMAT_R64G64_UINT;
  901. exports.VK_FORMAT_R64_SFLOAT = VK_FORMAT_R64_SFLOAT;
  902. exports.VK_FORMAT_R64_SINT = VK_FORMAT_R64_SINT;
  903. exports.VK_FORMAT_R64_UINT = VK_FORMAT_R64_UINT;
  904. exports.VK_FORMAT_R8G8B8A8_SINT = VK_FORMAT_R8G8B8A8_SINT;
  905. exports.VK_FORMAT_R8G8B8A8_SNORM = VK_FORMAT_R8G8B8A8_SNORM;
  906. exports.VK_FORMAT_R8G8B8A8_SRGB = VK_FORMAT_R8G8B8A8_SRGB;
  907. exports.VK_FORMAT_R8G8B8A8_UINT = VK_FORMAT_R8G8B8A8_UINT;
  908. exports.VK_FORMAT_R8G8B8A8_UNORM = VK_FORMAT_R8G8B8A8_UNORM;
  909. exports.VK_FORMAT_R8G8B8_SINT = VK_FORMAT_R8G8B8_SINT;
  910. exports.VK_FORMAT_R8G8B8_SNORM = VK_FORMAT_R8G8B8_SNORM;
  911. exports.VK_FORMAT_R8G8B8_SRGB = VK_FORMAT_R8G8B8_SRGB;
  912. exports.VK_FORMAT_R8G8B8_UINT = VK_FORMAT_R8G8B8_UINT;
  913. exports.VK_FORMAT_R8G8B8_UNORM = VK_FORMAT_R8G8B8_UNORM;
  914. exports.VK_FORMAT_R8G8_SINT = VK_FORMAT_R8G8_SINT;
  915. exports.VK_FORMAT_R8G8_SNORM = VK_FORMAT_R8G8_SNORM;
  916. exports.VK_FORMAT_R8G8_SRGB = VK_FORMAT_R8G8_SRGB;
  917. exports.VK_FORMAT_R8G8_UINT = VK_FORMAT_R8G8_UINT;
  918. exports.VK_FORMAT_R8G8_UNORM = VK_FORMAT_R8G8_UNORM;
  919. exports.VK_FORMAT_R8_SINT = VK_FORMAT_R8_SINT;
  920. exports.VK_FORMAT_R8_SNORM = VK_FORMAT_R8_SNORM;
  921. exports.VK_FORMAT_R8_SRGB = VK_FORMAT_R8_SRGB;
  922. exports.VK_FORMAT_R8_UINT = VK_FORMAT_R8_UINT;
  923. exports.VK_FORMAT_R8_UNORM = VK_FORMAT_R8_UNORM;
  924. exports.VK_FORMAT_S8_UINT = VK_FORMAT_S8_UINT;
  925. exports.VK_FORMAT_UNDEFINED = VK_FORMAT_UNDEFINED;
  926. exports.VK_FORMAT_X8_D24_UNORM_PACK32 = VK_FORMAT_X8_D24_UNORM_PACK32;
  927. exports.read = read;
  928. exports.write = write;
  929. //# sourceMappingURL=ktx-parse.cjs.map