From 7c9ead1050fd74a3a66e9a8c4d2e6799da23eda3 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Sat, 3 Aug 2024 12:17:23 +0300 Subject: [PATCH] Fixed detection of DXT1a data in DDS --- src/KKdLib/dds.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/KKdLib/dds.cpp b/src/KKdLib/dds.cpp index 5d5ad0a3..b51ade21 100644 --- a/src/KKdLib/dds.cpp +++ b/src/KKdLib/dds.cpp @@ -462,8 +462,12 @@ static void dds_reverse_rgb(txp_format format, size_t size, uint8_t* data) { static bool dds_check_is_dxt1a(int64_t size, uint8_t* data) { while (size > 0) { - if (*(uint16_t*)data <= *(uint16_t*)(data + 2)) - return true; + if (*(uint16_t*)data <= *(uint16_t*)(data + 2)) { + uint32_t indices = *(uint32_t*)(data + 4); + // Check if 2 bit indices have at least one that equals to 3 + if ((indices & ((indices & 0x55555555) << 1))) + return true; + } data += 8; size -= 8; }