dfd2vk.inl 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. /* Copyright 2019-2020 The Khronos Group Inc. */
  2. /* SPDX-License-Identifier: Apache-2.0 */
  3. /***************************** Do not edit. *****************************
  4. Automatically generated by makedfd2vk.pl.
  5. *************************************************************************/
  6. if (KHR_DFDVAL(dfd + 1, MODEL) == KHR_DF_MODEL_RGBSDA) {
  7. enum InterpretDFDResult r;
  8. InterpretedDFDChannel R = {0,0};
  9. InterpretedDFDChannel G = {0,0};
  10. InterpretedDFDChannel B = {0,0};
  11. InterpretedDFDChannel A = {0,0};
  12. uint32_t wordBytes;
  13. /* Special case exponent format */
  14. if (KHR_DFDSAMPLECOUNT(dfd + 1) == 6 &&
  15. ((KHR_DFDSVAL((dfd + 1), 1, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_EXPONENT) > 0)) {
  16. /* The only format we expect to be encoded like this. */
  17. return VK_FORMAT_E5B9G9R9_UFLOAT_PACK32;
  18. }
  19. /* Special case depth formats (assumed little-endian) */
  20. if (KHR_DFDSVAL((dfd + 1), 0, CHANNELID) == KHR_DF_CHANNEL_RGBSDA_DEPTH) {
  21. if (KHR_DFDSAMPLECOUNT((dfd + 1)) == 1) {
  22. if (KHR_DFDSVAL((dfd + 1), 0, BITLENGTH) == 16-1) return VK_FORMAT_D16_UNORM;
  23. if (KHR_DFDSVAL((dfd + 1), 0, BITLENGTH) == 24-1) return VK_FORMAT_X8_D24_UNORM_PACK32;
  24. return VK_FORMAT_D32_SFLOAT;
  25. } else {
  26. if (KHR_DFDSVAL((dfd + 1), 0, BITLENGTH) == 16-1) return VK_FORMAT_D16_UNORM_S8_UINT;
  27. if (KHR_DFDSVAL((dfd + 1), 0, BITLENGTH) == 24-1) return VK_FORMAT_D24_UNORM_S8_UINT;
  28. return VK_FORMAT_D32_SFLOAT_S8_UINT;
  29. }
  30. }
  31. if (KHR_DFDSVAL((dfd + 1), 0, CHANNELID) == KHR_DF_CHANNEL_RGBSDA_STENCIL) {
  32. return VK_FORMAT_S8_UINT;
  33. }
  34. r = interpretDFD(dfd, &R, &G, &B, &A, &wordBytes);
  35. if (r & i_UNSUPPORTED_ERROR_BIT) return VK_FORMAT_UNDEFINED;
  36. if (r & i_PACKED_FORMAT_BIT) {
  37. if (wordBytes == 1) return VK_FORMAT_R4G4_UNORM_PACK8;
  38. else if (wordBytes == 2) { /* PACK16 */
  39. if (A.size == 4) {
  40. if (R.offset == 12) return VK_FORMAT_R4G4B4A4_UNORM_PACK16;
  41. else return VK_FORMAT_B4G4R4A4_UNORM_PACK16;
  42. } else if (A.size == 0) { /* Three channels */
  43. if (B.offset == 0) return VK_FORMAT_R5G6B5_UNORM_PACK16;
  44. else return VK_FORMAT_B5G6R5_UNORM_PACK16;
  45. } else { /* Four channels, one-bit alpha */
  46. if (B.offset == 0) return VK_FORMAT_A1R5G5B5_UNORM_PACK16;
  47. if (B.offset == 1) return VK_FORMAT_R5G5B5A1_UNORM_PACK16;
  48. return VK_FORMAT_B5G5R5A1_UNORM_PACK16;
  49. }
  50. } else if (wordBytes == 4) { /* PACK32 */
  51. if (A.size == 8) {
  52. if ((r & i_SRGB_FORMAT_BIT)) return VK_FORMAT_A8B8G8R8_SRGB_PACK32;
  53. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A8B8G8R8_UNORM_PACK32;
  54. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A8B8G8R8_SNORM_PACK32;
  55. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A8B8G8R8_UINT_PACK32;
  56. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A8B8G8R8_SINT_PACK32;
  57. } else if (A.size == 2 && B.offset == 0) {
  58. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A2R10G10B10_UNORM_PACK32;
  59. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A2R10G10B10_SNORM_PACK32;
  60. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A2R10G10B10_UINT_PACK32;
  61. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A2R10G10B10_SINT_PACK32;
  62. } else if (A.size == 2 && R.offset == 0) {
  63. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A2B10G10R10_UNORM_PACK32;
  64. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A2B10G10R10_SNORM_PACK32;
  65. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A2B10G10R10_UINT_PACK32;
  66. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_A2B10G10R10_SINT_PACK32;
  67. } else if (R.size == 11) return VK_FORMAT_B10G11R11_UFLOAT_PACK32;
  68. }
  69. } else { /* Not a packed format */
  70. if (wordBytes == 1) {
  71. if (A.size > 0) { /* 4 channels */
  72. if (R.offset == 0) { /* RGBA */
  73. if ((r & i_SRGB_FORMAT_BIT)) return VK_FORMAT_R8G8B8A8_SRGB;
  74. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8B8A8_UNORM;
  75. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8B8A8_SNORM;
  76. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8B8A8_UINT;
  77. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8B8A8_SINT;
  78. } else { /* BGRA */
  79. if ((r & i_SRGB_FORMAT_BIT)) return VK_FORMAT_B8G8R8A8_SRGB;
  80. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_B8G8R8A8_UNORM;
  81. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_B8G8R8A8_SNORM;
  82. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_B8G8R8A8_UINT;
  83. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_B8G8R8A8_SINT;
  84. }
  85. } else if (B.size > 0) { /* 3 channels */
  86. if (R.offset == 0) { /* RGB */
  87. if ((r & i_SRGB_FORMAT_BIT)) return VK_FORMAT_R8G8B8_SRGB;
  88. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8B8_UNORM;
  89. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8B8_SNORM;
  90. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8B8_UINT;
  91. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8B8_SINT;
  92. } else { /* BGR */
  93. if ((r & i_SRGB_FORMAT_BIT)) return VK_FORMAT_B8G8R8_SRGB;
  94. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_B8G8R8_UNORM;
  95. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_B8G8R8_SNORM;
  96. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_B8G8R8_UINT;
  97. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_B8G8R8_SINT;
  98. }
  99. } else if (G.size > 0) { /* 2 channels */
  100. if ((r & i_SRGB_FORMAT_BIT)) return VK_FORMAT_R8G8_SRGB;
  101. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8_UNORM;
  102. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8_SNORM;
  103. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8_UINT;
  104. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8G8_SINT;
  105. } else { /* 1 channel */
  106. if ((r & i_SRGB_FORMAT_BIT)) return VK_FORMAT_R8_SRGB;
  107. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8_UNORM;
  108. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8_SNORM;
  109. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8_UINT;
  110. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R8_SINT;
  111. }
  112. } else if (wordBytes == 2) {
  113. if (A.size > 0) { /* 4 channels */
  114. if (R.offset == 0) { /* RGBA */
  115. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R16G16B16A16_SFLOAT;
  116. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16B16A16_UNORM;
  117. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16B16A16_SNORM;
  118. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16B16A16_UINT;
  119. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16B16A16_SINT;
  120. } else { /* BGRA */
  121. }
  122. } else if (B.size > 0) { /* 3 channels */
  123. if (R.offset == 0) { /* RGB */
  124. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R16G16B16_SFLOAT;
  125. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16B16_UNORM;
  126. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16B16_SNORM;
  127. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16B16_UINT;
  128. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16B16_SINT;
  129. } else { /* BGR */
  130. }
  131. } else if (G.size > 0) { /* 2 channels */
  132. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R16G16_SFLOAT;
  133. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16_UNORM;
  134. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16_SNORM;
  135. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16_UINT;
  136. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16G16_SINT;
  137. } else { /* 1 channel */
  138. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R16_SFLOAT;
  139. if ((r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16_UNORM;
  140. if ((r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16_SNORM;
  141. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16_UINT;
  142. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R16_SINT;
  143. }
  144. } else if (wordBytes == 4) {
  145. if (A.size > 0) { /* 4 channels */
  146. if (R.offset == 0) { /* RGBA */
  147. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R32G32B32A32_SFLOAT;
  148. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R32G32B32A32_UINT;
  149. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R32G32B32A32_SINT;
  150. } else { /* BGRA */
  151. }
  152. } else if (B.size > 0) { /* 3 channels */
  153. if (R.offset == 0) { /* RGB */
  154. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R32G32B32_SFLOAT;
  155. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R32G32B32_UINT;
  156. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R32G32B32_SINT;
  157. } else { /* BGR */
  158. }
  159. } else if (G.size > 0) { /* 2 channels */
  160. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R32G32_SFLOAT;
  161. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R32G32_UINT;
  162. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R32G32_SINT;
  163. } else { /* 1 channel */
  164. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R32_SFLOAT;
  165. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R32_UINT;
  166. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R32_SINT;
  167. }
  168. } else if (wordBytes == 8) {
  169. if (A.size > 0) { /* 4 channels */
  170. if (R.offset == 0) { /* RGBA */
  171. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R64G64B64A64_SFLOAT;
  172. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R64G64B64A64_UINT;
  173. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R64G64B64A64_SINT;
  174. } else { /* BGRA */
  175. }
  176. } else if (B.size > 0) { /* 3 channels */
  177. if (R.offset == 0) { /* RGB */
  178. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R64G64B64_SFLOAT;
  179. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R64G64B64_UINT;
  180. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R64G64B64_SINT;
  181. } else { /* BGR */
  182. }
  183. } else if (G.size > 0) { /* 2 channels */
  184. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R64G64_SFLOAT;
  185. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R64G64_UINT;
  186. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R64G64_SINT;
  187. } else { /* 1 channel */
  188. if ((r & i_FLOAT_FORMAT_BIT)) return VK_FORMAT_R64_SFLOAT;
  189. if (!(r & i_NORMALIZED_FORMAT_BIT) && !(r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R64_UINT;
  190. if (!(r & i_NORMALIZED_FORMAT_BIT) && (r & i_SIGNED_FORMAT_BIT)) return VK_FORMAT_R64_SINT;
  191. }
  192. }
  193. }
  194. } else if (KHR_DFDVAL((dfd + 1), MODEL) >= 128) {
  195. const uint32_t *bdb = dfd + 1;
  196. switch (KHR_DFDVAL(bdb, MODEL)) {
  197. case KHR_DF_MODEL_BC1A:
  198. if (KHR_DFDSVAL(bdb, 0, CHANNELID) == KHR_DF_CHANNEL_BC1A_COLOR) {
  199. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  200. return VK_FORMAT_BC1_RGB_UNORM_BLOCK;
  201. } else {
  202. return VK_FORMAT_BC1_RGB_SRGB_BLOCK;
  203. }
  204. } else {
  205. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  206. return VK_FORMAT_BC1_RGBA_UNORM_BLOCK;
  207. } else {
  208. return VK_FORMAT_BC1_RGBA_SRGB_BLOCK;
  209. }
  210. }
  211. case KHR_DF_MODEL_BC2:
  212. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  213. return VK_FORMAT_BC2_UNORM_BLOCK;
  214. } else {
  215. return VK_FORMAT_BC2_SRGB_BLOCK;
  216. }
  217. case KHR_DF_MODEL_BC3:
  218. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  219. return VK_FORMAT_BC3_UNORM_BLOCK;
  220. } else {
  221. return VK_FORMAT_BC3_SRGB_BLOCK;
  222. }
  223. case KHR_DF_MODEL_BC4:
  224. if (!(KHR_DFDSVAL(bdb, 0, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_SIGNED)) {
  225. return VK_FORMAT_BC4_UNORM_BLOCK;
  226. } else {
  227. return VK_FORMAT_BC4_SNORM_BLOCK;
  228. }
  229. case KHR_DF_MODEL_BC5:
  230. if (!(KHR_DFDSVAL(bdb, 0, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_SIGNED)) {
  231. return VK_FORMAT_BC5_UNORM_BLOCK;
  232. } else {
  233. return VK_FORMAT_BC5_SNORM_BLOCK;
  234. }
  235. case KHR_DF_MODEL_BC6H:
  236. if (!(KHR_DFDSVAL(bdb, 0, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_SIGNED)) {
  237. return VK_FORMAT_BC6H_UFLOAT_BLOCK;
  238. } else {
  239. return VK_FORMAT_BC6H_SFLOAT_BLOCK;
  240. }
  241. case KHR_DF_MODEL_BC7:
  242. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  243. return VK_FORMAT_BC7_UNORM_BLOCK;
  244. } else {
  245. return VK_FORMAT_BC7_SRGB_BLOCK;
  246. }
  247. case KHR_DF_MODEL_ETC2:
  248. if (KHR_DFDSVAL(bdb, 0, CHANNELID) == KHR_DF_CHANNEL_ETC2_COLOR) {
  249. if (KHR_DFDVAL(bdb, DESCRIPTORBLOCKSIZE) == 40) {
  250. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  251. return VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK;
  252. } else {
  253. return VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK;
  254. }
  255. } else {
  256. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  257. return VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK;
  258. } else {
  259. return VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK;
  260. }
  261. }
  262. } else if (KHR_DFDSVAL(bdb, 0, CHANNELID) == KHR_DF_CHANNEL_ETC2_ALPHA) {
  263. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  264. return VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK;
  265. } else {
  266. return VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK;
  267. }
  268. } else if (KHR_DFDVAL(bdb, DESCRIPTORBLOCKSIZE) == 40) {
  269. if (!(KHR_DFDSVAL(bdb, 0, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_SIGNED)) {
  270. return VK_FORMAT_EAC_R11_UNORM_BLOCK;
  271. } else {
  272. return VK_FORMAT_EAC_R11_SNORM_BLOCK;
  273. }
  274. } else {
  275. if (!(KHR_DFDSVAL(bdb, 0, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_SIGNED)) {
  276. return VK_FORMAT_EAC_R11G11_UNORM_BLOCK;
  277. } else {
  278. return VK_FORMAT_EAC_R11G11_SNORM_BLOCK;
  279. }
  280. }
  281. case KHR_DF_MODEL_ASTC:
  282. if (!(KHR_DFDSVAL(bdb, 0, QUALIFIERS) & KHR_DF_SAMPLE_DATATYPE_FLOAT)) {
  283. if (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 0) {
  284. if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  285. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3)) {
  286. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  287. return VK_FORMAT_ASTC_4x4_UNORM_BLOCK;
  288. } else {
  289. return VK_FORMAT_ASTC_4x4_SRGB_BLOCK;
  290. }
  291. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  292. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3)) {
  293. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  294. return VK_FORMAT_ASTC_5x4_UNORM_BLOCK;
  295. } else {
  296. return VK_FORMAT_ASTC_5x4_SRGB_BLOCK;
  297. }
  298. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  299. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4)) {
  300. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  301. return VK_FORMAT_ASTC_5x5_UNORM_BLOCK;
  302. } else {
  303. return VK_FORMAT_ASTC_5x5_SRGB_BLOCK;
  304. }
  305. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  306. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4)) {
  307. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  308. return VK_FORMAT_ASTC_6x5_UNORM_BLOCK;
  309. } else {
  310. return VK_FORMAT_ASTC_6x5_SRGB_BLOCK;
  311. }
  312. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  313. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5)) {
  314. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  315. return VK_FORMAT_ASTC_6x6_UNORM_BLOCK;
  316. } else {
  317. return VK_FORMAT_ASTC_6x6_SRGB_BLOCK;
  318. }
  319. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 7) &&
  320. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4)) {
  321. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  322. return VK_FORMAT_ASTC_8x5_UNORM_BLOCK;
  323. } else {
  324. return VK_FORMAT_ASTC_8x5_SRGB_BLOCK;
  325. }
  326. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 7) &&
  327. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5)) {
  328. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  329. return VK_FORMAT_ASTC_8x6_UNORM_BLOCK;
  330. } else {
  331. return VK_FORMAT_ASTC_8x6_SRGB_BLOCK;
  332. }
  333. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 7) &&
  334. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 7)) {
  335. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  336. return VK_FORMAT_ASTC_8x8_UNORM_BLOCK;
  337. } else {
  338. return VK_FORMAT_ASTC_8x8_SRGB_BLOCK;
  339. }
  340. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 9) &&
  341. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4)) {
  342. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  343. return VK_FORMAT_ASTC_10x5_UNORM_BLOCK;
  344. } else {
  345. return VK_FORMAT_ASTC_10x5_SRGB_BLOCK;
  346. }
  347. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 9) &&
  348. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5)) {
  349. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  350. return VK_FORMAT_ASTC_10x6_UNORM_BLOCK;
  351. } else {
  352. return VK_FORMAT_ASTC_10x6_SRGB_BLOCK;
  353. }
  354. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 9) &&
  355. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 7)) {
  356. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  357. return VK_FORMAT_ASTC_10x8_UNORM_BLOCK;
  358. } else {
  359. return VK_FORMAT_ASTC_10x8_SRGB_BLOCK;
  360. }
  361. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 9) &&
  362. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 9)) {
  363. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  364. return VK_FORMAT_ASTC_10x10_UNORM_BLOCK;
  365. } else {
  366. return VK_FORMAT_ASTC_10x10_SRGB_BLOCK;
  367. }
  368. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 11) &&
  369. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 9)) {
  370. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  371. return VK_FORMAT_ASTC_12x10_UNORM_BLOCK;
  372. } else {
  373. return VK_FORMAT_ASTC_12x10_SRGB_BLOCK;
  374. }
  375. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 11) &&
  376. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 11)) {
  377. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  378. return VK_FORMAT_ASTC_12x12_UNORM_BLOCK;
  379. } else {
  380. return VK_FORMAT_ASTC_12x12_SRGB_BLOCK;
  381. }
  382. }
  383. } else {
  384. if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 2) &&
  385. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 2) &&
  386. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 2)) {
  387. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  388. return VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT;
  389. } else {
  390. return VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT;
  391. }
  392. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  393. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 2) &&
  394. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 2)) {
  395. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  396. return VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT;
  397. } else {
  398. return VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT;
  399. }
  400. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  401. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3) &&
  402. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 2)) {
  403. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  404. return VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT;
  405. } else {
  406. return VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT;
  407. }
  408. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  409. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3) &&
  410. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 3)) {
  411. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  412. return VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT;
  413. } else {
  414. return VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT;
  415. }
  416. }
  417. if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  418. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3) &&
  419. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 3)) {
  420. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  421. return VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT;
  422. } else {
  423. return VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT;
  424. }
  425. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  426. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4) &&
  427. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 3)) {
  428. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  429. return VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT;
  430. } else {
  431. return VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT;
  432. }
  433. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  434. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4) &&
  435. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 4)) {
  436. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  437. return VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT;
  438. } else {
  439. return VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT;
  440. }
  441. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  442. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4) &&
  443. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 4)) {
  444. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  445. return VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT;
  446. } else {
  447. return VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT;
  448. }
  449. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  450. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5) &&
  451. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 4)) {
  452. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  453. return VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT;
  454. } else {
  455. return VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT;
  456. }
  457. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  458. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5) &&
  459. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 5)) {
  460. if (KHR_DFDVAL(bdb, TRANSFER) != KHR_DF_TRANSFER_SRGB) {
  461. return VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT;
  462. } else {
  463. return VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT;
  464. }
  465. }
  466. }
  467. } else {
  468. if (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 0) {
  469. if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  470. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3)) {
  471. return VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT;
  472. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  473. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3)) {
  474. return VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT;
  475. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  476. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4)) {
  477. return VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT;
  478. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  479. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4)) {
  480. return VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT;
  481. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  482. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5)) {
  483. return VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT;
  484. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 7) &&
  485. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4)) {
  486. return VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT;
  487. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 7) &&
  488. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5)) {
  489. return VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT;
  490. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 7) &&
  491. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 7)) {
  492. return VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT;
  493. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 9) &&
  494. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4)) {
  495. return VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT;
  496. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 9) &&
  497. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5)) {
  498. return VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT;
  499. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 9) &&
  500. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 7)) {
  501. return VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT;
  502. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 9) &&
  503. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 9)) {
  504. return VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT;
  505. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 11) &&
  506. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 9)) {
  507. return VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT;
  508. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 11) &&
  509. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 11)) {
  510. return VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT;
  511. }
  512. } else {
  513. if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 2) &&
  514. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 2) &&
  515. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 2)) {
  516. return VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT;
  517. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  518. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 2) &&
  519. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 2)) {
  520. return VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT;
  521. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  522. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 2) &&
  523. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 2)) {
  524. return VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT;
  525. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  526. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3) &&
  527. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 2)) {
  528. return VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT;
  529. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) &&
  530. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3) &&
  531. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 3)) {
  532. return VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT;
  533. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  534. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 3) &&
  535. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 3)) {
  536. return VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT;
  537. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  538. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4) &&
  539. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 3)) {
  540. return VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT;
  541. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 4) &&
  542. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4) &&
  543. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 4)) {
  544. return VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT;
  545. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  546. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 4) &&
  547. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 4)) {
  548. return VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT;
  549. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  550. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5) &&
  551. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 4)) {
  552. return VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT;
  553. } else if ((KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 5) &&
  554. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION1) == 5) &&
  555. (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION2) == 5)) {
  556. return VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT;
  557. }
  558. }
  559. }
  560. break;
  561. case KHR_DF_MODEL_PVRTC:
  562. if (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) {
  563. if (KHR_DFDVAL(bdb, TRANSFER) == KHR_DF_TRANSFER_SRGB) {
  564. return VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG;
  565. } else {
  566. return VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG;
  567. }
  568. } else {
  569. if (KHR_DFDVAL(bdb, TRANSFER) == KHR_DF_TRANSFER_SRGB) {
  570. return VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG;
  571. } else {
  572. return VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;
  573. }
  574. }
  575. case KHR_DF_MODEL_PVRTC2:
  576. if (KHR_DFDVAL(bdb, TEXELBLOCKDIMENSION0) == 3) {
  577. if (KHR_DFDVAL(bdb, TRANSFER) == KHR_DF_TRANSFER_SRGB) {
  578. return VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG;
  579. } else {
  580. return VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG;
  581. }
  582. } else {
  583. if (KHR_DFDVAL(bdb, TRANSFER) == KHR_DF_TRANSFER_SRGB) {
  584. return VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG;
  585. } else {
  586. return VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG;
  587. }
  588. }
  589. default:
  590. ;
  591. }
  592. }
  593. return VK_FORMAT_UNDEFINED; /* Drop-through for unmatched formats. */