From faf36690bfce92e739c290bb1311331df668f536 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Thu, 25 Jun 2026 07:21:36 +0100 Subject: [PATCH 01/20] refactor(IW3): rework image loader to remove dependency on `d3d9ltcg.lib` and `xgraphics.lib` --- codxe.vcxproj | 4 +- src/game/iw3/mp/components/image_loader.cpp | 607 +++++++++++--------- src/game/t4/mp/components/image_loader.cpp | 558 ------------------ src/game/t4/mp/components/image_loader.h | 96 ---- src/game/t4/mp/main.cpp | 2 - src/pch.h | 3 - src/xenos_texture.cpp | 375 ++++++++++++ src/xenos_texture.h | 41 ++ 8 files changed, 739 insertions(+), 947 deletions(-) delete mode 100644 src/game/t4/mp/components/image_loader.cpp delete mode 100644 src/game/t4/mp/components/image_loader.h create mode 100644 src/xenos_texture.cpp create mode 100644 src/xenos_texture.h diff --git a/codxe.vcxproj b/codxe.vcxproj index 0c208ef1..635d990f 100644 --- a/codxe.vcxproj +++ b/codxe.vcxproj @@ -79,6 +79,7 @@ + @@ -159,7 +160,6 @@ - @@ -203,6 +203,7 @@ + @@ -284,7 +285,6 @@ - diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index dc157c14..24fd3aaf 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -2,14 +2,13 @@ #include "common/config.h" #include "command.h" #include "image_loader.h" +#include "xenos_texture.h" // Forgive me for this dreadful code. It was hacked together until semi working and not touched since. // TODO: refactor and generalise for the other games. namespace { - -// TODO: MAKEFOURCC('D', 'X', 'T', '1'); // DDS Constants const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); const uint32_t DDS_HEADER_SIZE = 124; @@ -40,6 +39,9 @@ const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; +const uint32_t DDSCAPS2_CUBEMAP_ALL_FACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | + DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | + DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; // DDS Header Structure (with inline endian swapping) struct DDSHeader @@ -79,15 +81,6 @@ struct DDSImage std::vector data; }; -struct StaticDDSImage -{ - DDSHeader header; - uint8_t *data; - DWORD dataSize; -}; - -uint8_t g_staticDDSData[1024 * 1024]; - // Function to swap all necessary fields from little-endian to big-endian void SwapDDSHeaderEndian(DDSHeader &header) { @@ -126,19 +119,22 @@ DDSImage ReadDDSFile(const std::string &filepath) if (!file.is_open()) { - DbgPrint("ERROR: Unable to open file: %s\n", filepath.c_str()); return ddsImage; // Return empty DDSImage } // Read DDS header (raw, little-endian) file.read(reinterpret_cast(&ddsImage.header), sizeof(DDSHeader)); + if (!file || file.gcount() != sizeof(DDSHeader)) + { + file.close(); + return ddsImage; + } // Swap only the magic number to big-endian for proper validation uint32_t magicSwapped = _byteswap_ulong(ddsImage.header.magic); if (magicSwapped != 0x20534444) // 'DDS ' in big-endian { - DbgPrint("ERROR: Invalid DDS file: %s\n", filepath.c_str()); file.close(); return ddsImage; } @@ -153,7 +149,6 @@ DDSImage ReadDDSFile(const std::string &filepath) // Ensure fileSize is valid before proceeding if (fileSize == std::streampos(-1)) { - DbgPrint("ERROR: Failed to determine file size.\n"); file.close(); return ddsImage; } @@ -166,82 +161,18 @@ DDSImage ReadDDSFile(const std::string &filepath) // Read image data ddsImage.data.resize(dataSize); - file.read(reinterpret_cast(ddsImage.data.data()), dataSize); - - file.close(); - - // Debug output - DbgPrint("INFO: DDS file '%s' loaded successfully.\n", filepath.c_str()); - DbgPrint(" Resolution: %ux%u\n", ddsImage.header.width, ddsImage.header.height); - DbgPrint(" MipMaps: %u\n", ddsImage.header.mipMapCount); - DbgPrint(" Data Size: %u bytes\n", static_cast(dataSize)); - - return ddsImage; -} - -StaticDDSImage ReadDDSFileStatic(const char *filepath) -{ - StaticDDSImage ddsImage = {}; - - HANDLE file = CreateFileA(filepath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, nullptr); - if (file == INVALID_HANDLE_VALUE) - { - DbgPrint("ERROR: Unable to open file: %s\n", filepath); - return ddsImage; - } - - DWORD bytesRead = 0; - if (!ReadFile(file, &ddsImage.header, sizeof(DDSHeader), &bytesRead, nullptr) || bytesRead != sizeof(DDSHeader)) + if (dataSize > 0) { - DbgPrint("ERROR: Failed to read DDS header: %s\n", filepath); - CloseHandle(file); - return ddsImage; - } - - const uint32_t magicSwapped = _byteswap_ulong(ddsImage.header.magic); - if (magicSwapped != 0x20534444) - { - DbgPrint("ERROR: Invalid DDS file: %s\n", filepath); - CloseHandle(file); - return ddsImage; - } - - SwapDDSHeaderEndian(ddsImage.header); - - const DWORD fileSize = GetFileSize(file, nullptr); - if (fileSize == INVALID_FILE_SIZE || fileSize <= sizeof(DDSHeader)) - { - DbgPrint("ERROR: Failed to determine DDS file size: %s\n", filepath); - CloseHandle(file); - return ddsImage; - } - - const DWORD dataSize = fileSize - sizeof(DDSHeader); - if (dataSize > sizeof(g_staticDDSData)) - { - DbgPrint("ERROR: DDS file too large for static buffer: %s size=%u max=%u\n", filepath, dataSize, - static_cast(sizeof(g_staticDDSData))); - CloseHandle(file); - return ddsImage; - } - - if (!ReadFile(file, g_staticDDSData, dataSize, &bytesRead, nullptr) || bytesRead != dataSize) - { - DbgPrint("ERROR: Failed to read DDS data: %s\n", filepath); - CloseHandle(file); - return ddsImage; + file.read(reinterpret_cast(ddsImage.data.data()), dataSize); + if (!file || static_cast(file.gcount()) != dataSize) + { + ddsImage.data.clear(); + file.close(); + return ddsImage; + } } - CloseHandle(file); - - ddsImage.data = g_staticDDSData; - ddsImage.dataSize = dataSize; - - DbgPrint("INFO: DDS file '%s' loaded successfully.\n", filepath); - DbgPrint(" Resolution: %ux%u\n", ddsImage.header.width, ddsImage.header.height); - DbgPrint(" MipMaps: %u\n", ddsImage.header.mipMapCount); - DbgPrint(" Data Size: %u bytes\n", ddsImage.dataSize); + file.close(); return ddsImage; } @@ -261,58 +192,82 @@ std::string extract_filename(const char *filename) return path.substr(start, end - start); } -void GPUEndianSwapTexture(std::vector &pixelData, GPUENDIAN endianType) +bool DDSIsCubemap(const DDSImage &ddsImage) +{ + return (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP) != 0 || + (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; +} + +size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t levelCount, + uint32_t faceCount) { - switch (endianType) + size_t requiredSize = 0; + + for (uint32_t mipLevel = 0; mipLevel < levelCount; ++mipLevel) { - case GPUENDIAN_8IN16: - XGEndianSwapMemory(pixelData.data(), pixelData.data(), XGENDIAN_8IN16, 2, pixelData.size() / 2); - break; - case GPUENDIAN_8IN32: - XGEndianSwapMemory(pixelData.data(), pixelData.data(), XGENDIAN_8IN32, 4, pixelData.size() / 4); - break; - case GPUENDIAN_16IN32: - XGEndianSwapMemory(pixelData.data(), pixelData.data(), XGENDIAN_16IN32, 4, pixelData.size() / 4); - break; + const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); + if (levelSize == 0) + return 0; + + requiredSize += static_cast(levelSize) * faceCount; } + + return requiredSize; } -UINT CalculateMipLevelSize(UINT width, UINT height, UINT mipLevel, GPUTEXTUREFORMAT format) +size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, + uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) { - // Calculate dimensions for the requested mip level - UINT mipWidth = max(1, width >> mipLevel); - UINT mipHeight = max(1, height >> mipLevel); + size_t requiredSize = 0; - // Calculate size based on format - UINT blockSize; - switch (format) + for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) { - case GPUTEXTUREFORMAT_DXT1: - blockSize = 8; // 8 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_DXT2_3: - blockSize = 16; // 16 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_DXT4_5: - blockSize = 16; // 16 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_DXN: - blockSize = 16; // 16 bytes per 4x4 block (two 8-byte channels) - break; - default: - DbgPrint("CalculateMipLevelSize: Unsupported format %d\n", format); - return 0; + const uint32_t levelSize = xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); + if (levelSize == 0) + return 0; + + requiredSize += static_cast(levelSize) * faceCount; } - // For block-compressed formats, calculate number of blocks - // Each block is 4x4 pixels, so we need to round up to nearest block - UINT blocksWide = (mipWidth + 3) / 4; - UINT blocksHigh = (mipHeight + 3) / 4; + return requiredSize; +} - // Calculate total size in bytes - UINT sizeInBytes = blocksWide * blocksHigh * blockSize; +bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) +{ + *requiredDDSSize = CalculateRequiredLinearDataSize(image->width, image->height, format, replacementLevelCount, 1u); + if (*requiredDDSSize == 0) + return false; + + if (ddsImage.data.size() < *requiredDDSSize) + return false; + + const uint32_t baseSize = xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 1u); + const size_t mipBytes = + CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); + *requiredTextureBytes = static_cast(baseSize) + mipBytes; + const int cardMemory = image->cardMemory.platform[0]; + if (cardMemory > 0 && *requiredTextureBytes > static_cast(cardMemory)) + return false; + + return true; +} + +bool ValidateCubeReplacementData(const iw3::mp::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t faceSize, uint32_t tiledBaseSize, size_t *requiredDDSSize) +{ + *requiredDDSSize = static_cast(faceSize) * 6u; + if (faceSize == 0 || *requiredDDSSize == 0) + return false; - return sizeInBytes; + if (ddsImage.data.size() < *requiredDDSSize) + return false; + + const int cardMemory = image->cardMemory.platform[0]; + if (cardMemory > 0 && static_cast(tiledBaseSize) > static_cast(cardMemory)) + return false; + + return true; } } // namespace @@ -353,24 +308,21 @@ void Image_DbgPrint(const GfxImage *image) break; } - XGTEXTURE_DESC SourceDesc; - XGGetTextureDesc(image->texture.basemap, 0, &SourceDesc); - BOOL IsBorderTexture = XGIsBorderTexture(image->texture.basemap); - UINT MipTailBaseLevel = XGGetMipTailBaseLevel(SourceDesc.Width, SourceDesc.Height, IsBorderTexture); - - // SourceDesc.BitsPerPixel; - // SourceDesc.BytesPerBlock; - - UINT MipLevelCount = image->texture.basemap->GetLevelCount(); - - UINT BaseSize; - XGGetTextureLayout(image->texture.basemap, 0, &BaseSize, 0, 0, 0, 0, 0, 0, 0, 0); + const xenos_texture::TextureFormatInfo *formatInfo = + xenos_texture::GetTextureFormatInfo(image->texture.basemap->Format.DataFormat); + const uint32_t MipTailBaseLevel = xenos_texture::GetMipTailBaseLevel(image->width, image->height); + const uint32_t MipLevelCount = xenos_texture::GetTextureLevelCount(image->texture.basemap); + const uint32_t faceCount = image->mapType == MAPTYPE_CUBE ? 6u : 1u; + const uint32_t BaseSize = + xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); + const uint32_t bitsPerPixel = formatInfo != NULL ? formatInfo->bitsPerPixel : 0u; + const uint32_t bytesPerBlock = formatInfo != NULL ? formatInfo->bytesPerBlock : 0u; Com_Printf(CON_CHANNEL_CONSOLEONLY, "Image_DbgPrint: Dumping image Name='%s', Type=%d, Dimensions=%dx%d, MipLevels=%d, MipTailBaseLevel=%d, " "Format=%s, BitsPerPixel=%d, BytesPerBlock=%d, Endian=%d, BaseSize=%d\n", image->name, image->mapType, image->width, image->height, MipLevelCount, MipTailBaseLevel, format_str, - SourceDesc.BitsPerPixel, SourceDesc.BytesPerBlock, image->texture.basemap->Format.Endian, BaseSize); + bitsPerPixel, bytesPerBlock, image->texture.basemap->Format.Endian, BaseSize); } void Image_Dump(const GfxImage *image) @@ -397,8 +349,9 @@ void Image_Dump(const GfxImage *image) return; } - UINT BaseSize; - XGGetTextureLayout(image->texture.basemap, 0, &BaseSize, 0, 0, 0, 0, 0, 0, 0, 0); + const uint32_t faceCount = image->mapType == MAPTYPE_CUBE ? 6u : 1u; + uint32_t BaseSize = + xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); DDSHeader header; memset(&header, 0, sizeof(DDSHeader)); @@ -409,7 +362,7 @@ void Image_Dump(const GfxImage *image) header.height = _byteswap_ulong(image->height); header.width = _byteswap_ulong(image->width); header.depth = _byteswap_ulong(image->depth); - header.mipMapCount = _byteswap_ulong(image->texture.basemap->GetLevelCount()); + header.mipMapCount = _byteswap_ulong(xenos_texture::GetTextureLevelCount(image->texture.basemap)); auto format = image->texture.basemap->Format.DataFormat; switch (format) @@ -518,23 +471,20 @@ void Image_Dump(const GfxImage *image) unsigned char *face_pixels = image->pixels + (i * face_size); // Offset for each face std::vector swappedFace(face_pixels, face_pixels + face_size); - GPUEndianSwapTexture(swappedFace, static_cast(image->texture.basemap->Format.Endian)); + xenos_texture::ApplyGpuEndian(swappedFace.data(), swappedFace.size(), + static_cast(image->texture.basemap->Format.Endian)); // Create buffer for linear texture data std::vector linearFace(face_size); - // Convert tiled texture to linear layout using XGUntileTextureLevel - XGUntileTextureLevel(image->width, // Width - image->height, // Height - 0, // Level (base level) - static_cast(format), // GpuFormat - 0, // Flags (no special flags) - linearFace.data(), // pDestination (linear output) - rowPitch, // RowPitch - nullptr, // pPoint (no offset) - swappedFace.data(), // pSource (tiled input) - nullptr // pRect (entire texture) - ); + if (!xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), + image->texture.basemap->Format.Pitch, linearFace.data(), rowPitch, + swappedFace.data())) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile cube image '%s' face %d\n", image->name, + i); + return; + } file.write(reinterpret_cast(linearFace.data()), linearFace.size()); } @@ -548,13 +498,14 @@ void Image_Dump(const GfxImage *image) std::vector pixelData(image->pixels, image->pixels + image->baseSize); - GPUEndianSwapTexture(pixelData, static_cast(image->texture.basemap->Format.Endian)); + xenos_texture::ApplyGpuEndian(pixelData.data(), pixelData.size(), + static_cast(image->texture.basemap->Format.Endian)); // Create a linear data buffer to hold the untiled texture std::vector linearData(image->baseSize); // Calculate row pitch based on format - UINT rowPitch; + uint32_t rowPitch; auto format = image->texture.basemap->Format.DataFormat; switch (format) @@ -580,20 +531,13 @@ void Image_Dump(const GfxImage *image) return; } - DbgPrint("Image_Dump: rowPitch=%d\n", rowPitch); - - // Call XGUntileTextureLevel to convert the tiled texture to linear format - XGUntileTextureLevel(image->width, // Width - image->height, // Height - 0, // Level (base level 0) - static_cast(format), // GpuFormat - XGTILE_NONPACKED, // Flags (no special flags) - linearData.data(), // pDestination - rowPitch, // RowPitch (calculated based on format) - nullptr, // pPoint (no offset) - pixelData.data(), // pSource - nullptr // pRect (entire texture) - ); + if (!xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), + image->texture.basemap->Format.Pitch, linearData.data(), rowPitch, + pixelData.data())) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile image '%s'\n", image->name); + return; + } file.write(reinterpret_cast(linearData.data()), linearData.size()); @@ -755,10 +699,11 @@ void Cmd_imagedump() output_file.write(reinterpret_cast(&header), sizeof(DDSHeader)); - GPUEndianSwapTexture(buffer, static_cast(image->texture.basemap->Format.Endian)); + xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), + static_cast(image->texture.basemap->Format.Endian)); // Calculate row pitch based on format - UINT rowPitch; + uint32_t rowPitch; switch (format) { @@ -788,18 +733,12 @@ void Cmd_imagedump() std::vector linearData(buffer.size()); std::vector bufferAsUint8(buffer.begin(), buffer.end()); - // Convert tiled texture to linear layout - XGUntileTextureLevel(width, // Width - height, // Height - 0, // Level (base level) - static_cast(format), // GpuFormat - 0, // Flags (no special flags) - linearData.data(), // pDestination (linear output) - rowPitch, // RowPitch - nullptr, // pPoint (no offset) - bufferAsUint8.data(), // pSource (tiled input) - nullptr // pRect (entire texture) - ); + if (!xenos_texture::UntileTextureLevel(width, height, 0, static_cast(format), 0, linearData.data(), + rowPitch, bufferAsUint8.data())) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile highmip image '%s'\n", assetName.c_str()); + continue; + } output_file.write(reinterpret_cast(linearData.data()), linearData.size()); output_file.close(); @@ -808,135 +747,197 @@ void Cmd_imagedump() } } -void Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage) +bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage) { if (image->mapType != MAPTYPE_2D) { Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' is not a 2D map!\n", image->name); - return; + return false; } - // Get base texture layout - UINT baseAddress, baseSize, mipAddress, mipSize; - - XGGetTextureLayout(image->texture.basemap, &baseAddress, &baseSize, 0, 0, 0, &mipAddress, &mipSize, 0, 0, 0); + const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); + const uint32_t levelCount = xenos_texture::GetTextureLevelCount(image->texture.basemap); + const uint32_t mipTailBaseLevel = image->texture.basemap->Format.PackedMips != 0 + ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) + : levelCount; + const uint32_t replaceLevelCount = min(levelCount, max(1u, static_cast(ddsImage.header.mipMapCount))); + const uint32_t nonPackedLevelCount = max(1u, min(replaceLevelCount, mipTailBaseLevel)); + unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); + unsigned char *mipData = + xenos_texture::GetTextureMipBase(image->texture.basemap, baseData, image->width, image->height, format, 1u); + + size_t requiredDDSSize = 0; + size_t requiredTextureBytes = 0; + if (!Validate2DReplacementData(image, ddsImage, format, nonPackedLevelCount, &requiredDDSSize, + &requiredTextureBytes)) + { + if (requiredDDSSize == 0) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has unsupported replacement format %d!\n", image->name, + format); + } + else if (ddsImage.data.size() < requiredDDSSize) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' DDS data is too small: have=%u need=%u for %u mip levels\n", + image->name, static_cast(ddsImage.data.size()), + static_cast(requiredDDSSize), nonPackedLevelCount); + } + else + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement exceeds texture memory: have=%u need=%u\n", + image->name, static_cast(image->cardMemory.platform[0]), + static_cast(requiredTextureBytes)); + } - XGTEXTURE_DESC TextureDesc; - XGGetTextureDesc(image->texture.basemap, 0, &TextureDesc); + return false; + } - UINT mipTailBaseLevel = - XGGetMipTailBaseLevel(TextureDesc.Width, TextureDesc.Height, XGIsBorderTexture(image->texture.basemap)); + if (baseData == NULL || mipData == NULL) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Image '%s' has no valid texture memory!\n", image->name); + return false; + } - UINT ddsOffset = 0; + uint32_t ddsOffset = 0; - for (UINT mipLevel = 0; mipLevel < mipTailBaseLevel; mipLevel++) + for (uint32_t mipLevel = 0; mipLevel < nonPackedLevelCount; mipLevel++) { - UINT widthInBlocks = max(1, TextureDesc.WidthInBlocks >> mipLevel); - UINT rowPitch = widthInBlocks * TextureDesc.BytesPerBlock; - // UINT levelSize = rowPitch * heightInBlocks; - UINT ddsMipLevelSize = - CalculateMipLevelSize(image->width, image->height, mipLevel, - static_cast(image->texture.basemap->Format.DataFormat)); - - if (ddsMipLevelSize == 0) + uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, mipLevel, format); + uint32_t ddsMipLevelSize = + xenos_texture::CalculateLinearLevelSize(image->width, image->height, mipLevel, format); + uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize( + image->width, image->height, mipLevel, format, image->texture.basemap->Format.Pitch); + + if (ddsMipLevelSize == 0 || tiledMipLevelSize == 0 || rowPitch == 0) { - DbgPrint(" [ERROR] Unsupported format %d for mip level %u! Skipping...\n", - image->texture.basemap->Format.DataFormat, mipLevel); - break; + Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Unsupported format %d for image '%s' mip level %u\n", + image->texture.basemap->Format.DataFormat, image->name, mipLevel); + return false; } // Ensure we're not reading out of bounds if (ddsOffset + ddsMipLevelSize > ddsImage.data.size()) { - DbgPrint(" [ERROR] Mip Level %u exceeds DDS data size! Skipping...\n", mipLevel); - break; + Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Image '%s' mip level %u exceeds DDS data size\n", + image->name, mipLevel); + return false; } std::vector levelData(ddsImage.data.begin() + ddsOffset, ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); - GPUEndianSwapTexture(levelData, static_cast(image->texture.basemap->Format.Endian)); + xenos_texture::ApplyGpuEndian(levelData.data(), levelData.size(), + static_cast(image->texture.basemap->Format.Endian)); - DbgPrint("Image_Replace_2D: Mip Level %d - Row Pitch=%u\n", mipLevel, rowPitch); - - UINT address = baseAddress; + unsigned char *destination = baseData; if (mipLevel > 0) { - UINT mipLevelOffset = XGGetMipLevelOffset(image->texture.basemap, 0, mipLevel); - address = mipAddress + mipLevelOffset; + destination = + mipData + xenos_texture::CalculateMipLevelOffset(image->width, image->height, mipLevel, format, 1u); } - DbgPrint("Image_Replace_2D: Writing mip level %d to address 0x%08X - levelSize=%u\n", mipLevel, address, - ddsMipLevelSize); + std::vector tiledData(tiledMipLevelSize); + + if (!xenos_texture::TileTextureLevel(image->width, image->height, mipLevel, format, + image->texture.basemap->Format.Pitch, tiledData.data(), tiledData.size(), + levelData.data(), levelData.size(), rowPitch)) + { + Com_PrintError( + CON_CHANNEL_ERROR, + "Image_Replace_2D: Failed to tile mip level %d for image '%s' rowPitch=%u sourceSize=%u destSize=%u\n", + mipLevel, image->name, rowPitch, static_cast(levelData.size()), tiledMipLevelSize); + return false; + } - // // Write the base level - XGTileTextureLevel(TextureDesc.Width, TextureDesc.Height, mipLevel, image->texture.basemap->Format.DataFormat, - XGTILE_NONPACKED, // Use non-packed mode (likely required for this texture) - reinterpret_cast(address), // Destination (tiled GPU memory for Base) - nullptr, // No offset (tile the whole image) - levelData.data(), // Source mip level data - rowPitch, // Row pitch of source image (should match DDS format) - nullptr // No subrectangle (tile the full image) - ); + memcpy(destination, tiledData.data(), tiledMipLevelSize); ddsOffset += ddsMipLevelSize; } + + return true; } -void Image_Replace_Cube(GfxImage *image, const DDSImage &ddsImage) +bool Image_Replace_Cube(GfxImage *image, const DDSImage &ddsImage) { if (image->mapType != MAPTYPE_CUBE) { Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' is not a cube map!\n", image->name); - return; + return false; } const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); - // Check can we get the base size here and /6 for face size - unsigned int face_size = 0; - unsigned int rowPitch = 0; + unsigned int face_size = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0, format); + unsigned int rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, 0, format); + unsigned int tiledFaceSize = xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0, format, + image->texture.basemap->Format.Pitch); + unsigned int tiledBaseSize = + xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 6u); + unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); - switch (format) + if (face_size == 0 || rowPitch == 0 || tiledFaceSize == 0 || tiledBaseSize < tiledFaceSize * 6u) { - case GPUTEXTUREFORMAT_DXT1: - face_size = (image->width / 4) * (image->height / 4) * 8; - rowPitch = (image->width / 4) * 8; // 8 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_8_8_8_8: - face_size = image->width * image->height * 4; - rowPitch = image->width * 4; // 4 bytes per pixel - break; - default: Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has unsupported format %d!\n", image->name, format); - return; + return false; + } + + if (baseData == NULL) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_Cube: Image '%s' has no valid texture memory!\n", image->name); + return false; + } + + size_t requiredDDSSize = 0; + if (!ValidateCubeReplacementData(image, ddsImage, format, face_size, tiledBaseSize, &requiredDDSSize)) + { + if (requiredDDSSize == 0) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has unsupported cube replacement format %d!\n", image->name, + format); + } + else if (ddsImage.data.size() < requiredDDSSize) + { + Com_PrintError(CON_CHANNEL_ERROR, + "Image_Replace_Cube: Image '%s' DDS is too small for 6 faces: have=%u need=%u\n", + image->name, static_cast(ddsImage.data.size()), + static_cast(requiredDDSSize)); + } + else + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' cube replacement exceeds texture memory: have=%u need=%u\n", + image->name, static_cast(image->cardMemory.platform[0]), tiledBaseSize); + } + + return false; } for (int i = 0; i < 6; i++) { const unsigned char *face_pixels = ddsImage.data.data() + (i * face_size); + unsigned char *face_destination = baseData + (i * tiledFaceSize); // Create a buffer for the tiled texture data - std::vector tiledData(face_size); - - // Convert the linear texture to tiled format using XGTileTextureLevel - XGTileTextureLevel(image->width, // Width - image->height, // Height - 0, // Level (base level) - static_cast(format), // GpuFormat - 0, // Flags (no special flags) - tiledData.data(), // pDestination (tiled output) - nullptr, // pPoint (no offset) - face_pixels, // pSource (linear input) - rowPitch, // RowPitch - nullptr // pRect (entire texture) - ); - - GPUEndianSwapTexture(tiledData, static_cast(image->texture.basemap->Format.Endian)); + std::vector tiledData(tiledFaceSize); + + if (!xenos_texture::TileTextureLevel(image->width, image->height, 0, static_cast(format), + image->texture.basemap->Format.Pitch, tiledData.data(), tiledData.size(), + face_pixels, face_size, rowPitch)) + { + Com_PrintError( + CON_CHANNEL_ERROR, + "Image_Replace_Cube: Failed to tile image '%s' face %d rowPitch=%u sourceSize=%u destSize=%u\n", + image->name, i, rowPitch, face_size, tiledFaceSize); + return false; + } + + xenos_texture::ApplyGpuEndian(tiledData.data(), tiledData.size(), + static_cast(image->texture.basemap->Format.Endian)); // Copy the data to the image - memcpy(image->pixels + (i * face_size), tiledData.data(), face_size); + memcpy(face_destination, tiledData.data(), tiledFaceSize); } + + return true; } void Image_Replace(GfxImage *image) @@ -946,25 +947,27 @@ void Image_Replace(GfxImage *image) if (!filesystem::file_exists(replacement_path)) { - Com_PrintError(CON_CHANNEL_ERROR, "File does not exist: %s\n", replacement_path.c_str()); return; } - StaticDDSImage staticDDSImage = ReadDDSFileStatic(replacement_path.c_str()); - if (staticDDSImage.data == nullptr) + DDSImage ddsImage = ReadDDSFile(replacement_path.c_str()); + if (ddsImage.data.empty()) { Com_PrintError(CON_CHANNEL_ERROR, "Failed to load DDS file: %s\n", replacement_path.c_str()); return; } - DbgPrint("[codxe][image_loader] DDS loaded for isolation: %s bytes=%u\n", replacement_path.c_str(), - static_cast(staticDDSImage.dataSize)); - return; + if (ddsImage.header.size != DDS_HEADER_SIZE || ddsImage.header.pixelFormat.size != DDS_PIXEL_FORMAT_SIZE) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an invalid DDS header: size=%u pixelFormatSize=%u\n", + image->name, ddsImage.header.size, ddsImage.header.pixelFormat.size); + return; + } - DDSImage ddsImage = ReadDDSFile(replacement_path.c_str()); - if (ddsImage.data.empty()) + if ((ddsImage.header.pixelFormat.flags & DDPF_FOURCC) == 0) { - Com_PrintError(CON_CHANNEL_ERROR, "Failed to load DDS file: %s\n", replacement_path.c_str()); + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement DDS is not a FourCC/compressed texture!\n", + image->name); return; } @@ -1004,19 +1007,49 @@ void Image_Replace(GfxImage *image) return; } + const bool ddsIsCubemap = DDSIsCubemap(ddsImage); + + if (image->mapType == MAPTYPE_2D && ddsIsCubemap) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' is 2D but replacement DDS is a cubemap!\n", image->name); + return; + } + + if (image->mapType == MAPTYPE_CUBE && !ddsIsCubemap) + { + const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0, ddsFormat); + if (faceSize == 0 || ddsImage.data.size() < static_cast(faceSize) * 6u) + { + Com_PrintError(CON_CHANNEL_ERROR, + "Image '%s' is a cubemap but replacement DDS is not a valid 6-face cubemap!\n", image->name); + return; + } + + Com_Printf(CON_CHANNEL_CONSOLEONLY, + "Image '%s' replacement DDS has no cubemap caps but contains enough data for 6 sequential faces; " + "accepting it.\n", + image->name); + } + + bool replaced = false; if (image->mapType == MAPTYPE_2D) { - Image_Replace_2D(image, ddsImage); + replaced = Image_Replace_2D(image, ddsImage); } else if (image->mapType == MAPTYPE_CUBE) { - Image_Replace_Cube(image, ddsImage); + replaced = Image_Replace_Cube(image, ddsImage); } else { Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' is not a 2D or cube map!\n", image->name); return; } + + if (replaced) + { + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Replaced image '%s'\n", image->name); + } } void Load_images() @@ -1053,6 +1086,7 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe // Use new ConfigModule API std::string replacement_path = Config::GetModBasePath() + "\\highmip" + "\\" + asset_name + ".dds"; + std::ifstream file(replacement_path, std::ios::binary | std::ios::ate); if (!file) { @@ -1064,7 +1098,8 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe if (file_size - 0x80 != bytesToRead) // 0x80 is the size of the DDS header { - Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: File size mismatch: %s\n", replacement_path); + Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: File size mismatch: %s\n", + replacement_path.c_str()); return false; } @@ -1077,25 +1112,25 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe buffer.resize(static_cast(bytesToRead)); file.read(reinterpret_cast(buffer.data()), bytesToRead); - GPUEndianSwapTexture(buffer, static_cast(image->texture.basemap->Format.Endian)); - - XGTEXTURE_DESC textureDesc; - XGGetTextureDesc(image->texture.basemap, 0, &textureDesc); + xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), + static_cast(image->texture.basemap->Format.Endian)); // High mip are 2x the size of the original image auto width = image->width * 2; auto height = image->height * 2; - auto rowPitch = textureDesc.RowPitch * 2; + auto rowPitch = xenos_texture::CalculateLinearRowPitch(width, 0, image->texture.basemap->Format.DataFormat); + if (rowPitch == 0) + return false; - XGTileTextureLevel(width, height, 0, image->texture.basemap->Format.DataFormat, - XGTILE_NONPACKED, // Use non-packed mode (likely required for this texture) - outData, // Destination (tiled GPU memory for Base) - nullptr, // No offset (tile the whole image) - buffer.data(), // Source mip level data - rowPitch, // Row pitch of source image (should match DDS format) - nullptr // No subrectangle (tile the full image) - ); + if (!xenos_texture::TileTextureLevel(width, height, 0, image->texture.basemap->Format.DataFormat, 0, outData, + bytesToRead, buffer.data(), buffer.size(), rowPitch)) + { + Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Failed to tile image '%s'\n", + asset_name.c_str()); + return false; + } + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Replaced highmip image '%s'\n", asset_name.c_str()); return true; } diff --git a/src/game/t4/mp/components/image_loader.cpp b/src/game/t4/mp/components/image_loader.cpp deleted file mode 100644 index a81e9fbc..00000000 --- a/src/game/t4/mp/components/image_loader.cpp +++ /dev/null @@ -1,558 +0,0 @@ -#include "pch.h" -#include "image_loader.h" - -namespace -{ -void GPUEndianSwapTexture(std::vector &pixelData, GPUENDIAN endianType) -{ - switch (endianType) - { - case GPUENDIAN_8IN16: - XGEndianSwapMemory(pixelData.data(), pixelData.data(), XGENDIAN_8IN16, 2, pixelData.size() / 2); - break; - case GPUENDIAN_8IN32: - XGEndianSwapMemory(pixelData.data(), pixelData.data(), XGENDIAN_8IN32, 4, pixelData.size() / 4); - break; - case GPUENDIAN_16IN32: - XGEndianSwapMemory(pixelData.data(), pixelData.data(), XGENDIAN_16IN32, 4, pixelData.size() / 4); - break; - } -} - -// Function to swap all necessary fields from little-endian to big-endian -void SwapDDSHeaderEndian(DDSHeader &header) -{ - header.magic = _byteswap_ulong(header.magic); - header.size = _byteswap_ulong(header.size); - header.flags = _byteswap_ulong(header.flags); - header.height = _byteswap_ulong(header.height); - header.width = _byteswap_ulong(header.width); - header.pitchOrLinearSize = _byteswap_ulong(header.pitchOrLinearSize); - header.depth = _byteswap_ulong(header.depth); - header.mipMapCount = _byteswap_ulong(header.mipMapCount); - - for (int i = 0; i < 11; i++) - header.reserved1[i] = _byteswap_ulong(header.reserved1[i]); - - header.pixelFormat.size = _byteswap_ulong(header.pixelFormat.size); - header.pixelFormat.flags = _byteswap_ulong(header.pixelFormat.flags); - header.pixelFormat.fourCC = _byteswap_ulong(header.pixelFormat.fourCC); - header.pixelFormat.rgbBitCount = _byteswap_ulong(header.pixelFormat.rgbBitCount); - header.pixelFormat.rBitMask = _byteswap_ulong(header.pixelFormat.rBitMask); - header.pixelFormat.gBitMask = _byteswap_ulong(header.pixelFormat.gBitMask); - header.pixelFormat.bBitMask = _byteswap_ulong(header.pixelFormat.bBitMask); - header.pixelFormat.aBitMask = _byteswap_ulong(header.pixelFormat.aBitMask); - - header.caps = _byteswap_ulong(header.caps); - header.caps2 = _byteswap_ulong(header.caps2); - header.caps3 = _byteswap_ulong(header.caps3); - header.caps4 = _byteswap_ulong(header.caps4); - header.reserved2 = _byteswap_ulong(header.reserved2); -} - -DDSImage ReadDDSFile(const std::string &filepath) -{ - DDSImage ddsImage; - std::ifstream file(filepath, std::ios::binary); - - if (!file.is_open()) - { - DbgPrint("ERROR: Unable to open file: %s\n", filepath.c_str()); - return ddsImage; // Return empty DDSImage - } - - // Read DDS header (raw, little-endian) - file.read(reinterpret_cast(&ddsImage.header), sizeof(DDSHeader)); - - // Swap only the magic number to big-endian for proper validation - uint32_t magicSwapped = _byteswap_ulong(ddsImage.header.magic); - - if (magicSwapped != 0x20534444) // 'DDS ' in big-endian - { - DbgPrint("ERROR: Invalid DDS file: %s\n", filepath.c_str()); - file.close(); - return ddsImage; - } - - // Swap header fields to big-endian for Xbox 360 - SwapDDSHeaderEndian(ddsImage.header); - - // Move to end of file to get total file size - file.seekg(0, std::ios::end); - std::streampos fileSize = file.tellg(); - - // Ensure fileSize is valid before proceeding - if (fileSize == std::streampos(-1)) - { - DbgPrint("ERROR: Failed to determine file size.\n"); - file.close(); - return ddsImage; - } - - // Move back to after the header - file.seekg(sizeof(DDSHeader), std::ios::beg); - - // Compute data size safely - size_t dataSize = static_cast(fileSize) - sizeof(DDSHeader); - - // Read image data - ddsImage.data.resize(dataSize); - file.read(reinterpret_cast(ddsImage.data.data()), dataSize); - - file.close(); - - // Debug output - DbgPrint("INFO: DDS file '%s' loaded successfully.\n", filepath.c_str()); - DbgPrint(" Resolution: %ux%u\n", ddsImage.header.width, ddsImage.header.height); - DbgPrint(" MipMaps: %u\n", ddsImage.header.mipMapCount); - DbgPrint(" Data Size: %u bytes\n", static_cast(dataSize)); - - return ddsImage; -} -} // namespace - -namespace t4 -{ -namespace mp -{ -void ImageLoader::DumpGfxImage(const GfxImage *image) -{ - DbgPrint("Image_Dump: Dumping image '%s'\n", image->name); - - if (!image) - { - DbgPrint("Image_Dump: Null GfxImage!\n"); - return; - } - - if (!image->pixels || image->baseSize == 0) - { - DbgPrint("Image_Dump: Image '%s' has no valid pixel data!\n", image->name); - return; - } - - if (image->mapType != MAPTYPE_2D && image->mapType != MAPTYPE_CUBE) - { - DbgPrint("Image_Dump: Unsupported map type %d!\n", image->mapType); - return; - } - - UINT BaseSize; - XGGetTextureLayout(image->texture.basemap, 0, &BaseSize, 0, 0, 0, 0, 0, 0, 0, 0); - - DDSHeader header; - memset(&header, 0, sizeof(DDSHeader)); - - header.magic = _byteswap_ulong(DDS_MAGIC); - header.size = _byteswap_ulong(DDS_HEADER_SIZE); - header.flags = _byteswap_ulong(DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE); - header.height = _byteswap_ulong(image->height); - header.width = _byteswap_ulong(image->width); - header.depth = _byteswap_ulong(image->depth); - header.mipMapCount = _byteswap_ulong(image->texture.basemap->GetLevelCount()); - - auto format = image->texture.basemap->Format.DataFormat; - switch (format) - { - case GPUTEXTUREFORMAT_DXT1: - header.pixelFormat.fourCC = _byteswap_ulong(DXT1_FOURCC); - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_DXT2_3: - header.pixelFormat.fourCC = _byteswap_ulong(DXT3_FOURCC); - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_DXT4_5: - header.pixelFormat.fourCC = _byteswap_ulong(DXT5_FOURCC); - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_DXN: - header.pixelFormat.fourCC = _byteswap_ulong(DXN_FOURCC); - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_LUMINANCE); - header.pixelFormat.rgbBitCount = _byteswap_ulong(8); - header.pixelFormat.rBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.gBitMask = 0; - header.pixelFormat.bBitMask = 0; - header.pixelFormat.aBitMask = 0; - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_8_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_LUMINANCE | DDPF_ALPHAPIXELS); - header.pixelFormat.rgbBitCount = _byteswap_ulong(16); - header.pixelFormat.rBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.gBitMask = _byteswap_ulong(0x0000FF00); - header.pixelFormat.bBitMask = 0; - header.pixelFormat.aBitMask = 0; - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_8_8_8_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_RGB | DDPF_ALPHAPIXELS); - header.pixelFormat.rgbBitCount = _byteswap_ulong(32); - header.pixelFormat.rBitMask = _byteswap_ulong(0x00FF0000); - header.pixelFormat.gBitMask = _byteswap_ulong(0x0000FF00); - header.pixelFormat.bBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.aBitMask = _byteswap_ulong(0xFF000000); - header.pitchOrLinearSize = BaseSize; - break; - default: - DbgPrint("Image_Dump: Unsupported texture format %d!\n", format); - return; - } - - // Set texture capabilities - header.caps = _byteswap_ulong(DDSCAPS_TEXTURE | DDSCAPS_MIPMAP); - - // Handle Cubemaps - if (image->mapType == mp::MAPTYPE_CUBE) - { - header.caps2 = _byteswap_ulong(DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | - DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | - DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ); - } - - std::string filename = "game:\\_codxe\\dump\\images\\"; - std::string sanitized_name = image->name; - - // Remove invalid characters - sanitized_name.erase(std::remove_if(sanitized_name.begin(), sanitized_name.end(), [](char c) { return c == '*'; }), - sanitized_name.end()); - - filename += sanitized_name + ".dds"; - - std::ofstream file(filename, std::ios::binary); - if (!file) - { - DbgPrint("Image_Dump: Failed to open file: %s\n", filename.c_str()); - return; - } - - if (image->mapType == MAPTYPE_CUBE) - { - file.write(reinterpret_cast(&header), sizeof(DDSHeader)); - - unsigned int face_size = 0; - unsigned int rowPitch = 0; - const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); - - switch (format) - { - case GPUTEXTUREFORMAT_DXT1: - face_size = (image->width / 4) * (image->height / 4) * 8; - rowPitch = (image->width / 4) * 8; // 8 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_8_8_8_8: - face_size = image->width * image->height * 4; - rowPitch = image->width * 4; // 4 bytes per pixel - break; - default: - DbgPrint("Image_Dump: Unsupported cube map format %d!\n", format); - return; - } - - // TODO: handle mip levels per face for cubemaps - for (int i = 0; i < 6; i++) - { - unsigned char *face_pixels = image->pixels + (i * face_size); // Offset for each face - - std::vector swappedFace(face_pixels, face_pixels + face_size); - GPUEndianSwapTexture(swappedFace, static_cast(image->texture.basemap->Format.Endian)); - - // Create buffer for linear texture data - std::vector linearFace(face_size); - - // Convert tiled texture to linear layout using XGUntileTextureLevel - XGUntileTextureLevel(image->width, // Width - image->height, // Height - 0, // Level (base level) - static_cast(format), // GpuFormat - 0, // Flags (no special flags) - linearFace.data(), // pDestination (linear output) - rowPitch, // RowPitch - nullptr, // pPoint (no offset) - swappedFace.data(), // pSource (tiled input) - nullptr // pRect (entire texture) - ); - - file.write(reinterpret_cast(linearFace.data()), linearFace.size()); - } - - file.close(); - } - else if (image->mapType == MAPTYPE_2D) - { - // TODO: write mip levels - file.write(reinterpret_cast(&header), sizeof(DDSHeader)); - - std::vector pixelData(image->pixels, image->pixels + image->baseSize); - - GPUEndianSwapTexture(pixelData, static_cast(image->texture.basemap->Format.Endian)); - - // Create a linear data buffer to hold the untiled texture - std::vector linearData(image->baseSize); - - // Calculate row pitch based on format - UINT rowPitch; - auto format = image->texture.basemap->Format.DataFormat; - - switch (format) - { - case GPUTEXTUREFORMAT_DXT1: - case GPUTEXTUREFORMAT_DXT2_3: - case GPUTEXTUREFORMAT_DXT4_5: - case GPUTEXTUREFORMAT_DXN: - // Block compressed formats use 4x4 blocks - rowPitch = ((image->width + 3) / 4) * (format == GPUTEXTUREFORMAT_DXT1 ? 8 : 16); - break; - case GPUTEXTUREFORMAT_8: - rowPitch = image->width; - break; - case GPUTEXTUREFORMAT_8_8: - rowPitch = image->width * 2; - break; - case GPUTEXTUREFORMAT_8_8_8_8: - rowPitch = image->width * 4; - break; - default: - DbgPrint("Image_Dump: Unsupported texture format %d!\n", format); - return; - } - - // Call XGUntileTextureLevel to convert the tiled texture to linear format - XGUntileTextureLevel(image->width, // Width - image->height, // Height - 0, // Level (base level 0) - static_cast(format), // GpuFormat - XGTILE_NONPACKED, // Flags (no special flags) - linearData.data(), // pDestination - rowPitch, // RowPitch (calculated based on format) - nullptr, // pPoint (no offset) - pixelData.data(), // pSource - nullptr // pRect (entire texture) - ); - - file.write(reinterpret_cast(linearData.data()), linearData.size()); - - file.close(); - } - else - { - DbgPrint("Image_Dump: Unsupported map type %d!\n", image->mapType); - return; - } -} - -unsigned int ImageLoader::CalculateMipLevelSize(unsigned int width, unsigned int height, unsigned int mipLevel, - GPUTEXTUREFORMAT format) -{ - // Calculate dimensions for the requested mip level - unsigned int mipWidth = max(1, width >> mipLevel); - unsigned int mipHeight = max(1, height >> mipLevel); - - // Calculate size based on format - unsigned int blockSize; - switch (format) - { - case GPUTEXTUREFORMAT_DXT1: - blockSize = 8; // 8 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_DXT2_3: - blockSize = 16; // 16 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_DXT4_5: - blockSize = 16; // 16 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_DXN: - blockSize = 16; // 16 bytes per 4x4 block (two 8-byte channels) - break; - default: - DbgPrint("CalculateMipLevelSize: Unsupported format %d\n", format); - return 0; - } - - // For block-compressed formats, calculate number of blocks - // Each block is 4x4 pixels, so we need to round up to nearest block - unsigned int blocksWide = (mipWidth + 3) / 4; - unsigned int blocksHigh = (mipHeight + 3) / 4; - - // Calculate total size in bytes - unsigned int sizeInBytes = blocksWide * blocksHigh * blockSize; - - return sizeInBytes; -} - -void ImageLoader::ReplaceGfxImage2d(GfxImage *image, const DDSImage &ddsImage) -{ - if (image->mapType != MAPTYPE_2D) - { - DbgPrint("Image '%s' is not a 2D map!\n", image->name); - return; - } - - // Get base texture layout - UINT baseAddress, baseSize, mipAddress, mipSize; - - XGGetTextureLayout(image->texture.basemap, &baseAddress, &baseSize, 0, 0, 0, &mipAddress, &mipSize, 0, 0, 0); - - XGTEXTURE_DESC TextureDesc; - XGGetTextureDesc(image->texture.basemap, 0, &TextureDesc); - - UINT mipTailBaseLevel = - XGGetMipTailBaseLevel(TextureDesc.Width, TextureDesc.Height, XGIsBorderTexture(image->texture.basemap)); - - UINT ddsOffset = 0; - - for (UINT mipLevel = 0; mipLevel < mipTailBaseLevel; mipLevel++) - { - UINT widthInBlocks = max(1, TextureDesc.WidthInBlocks >> mipLevel); - UINT rowPitch = widthInBlocks * TextureDesc.BytesPerBlock; - // UINT levelSize = rowPitch * heightInBlocks; - UINT ddsMipLevelSize = - CalculateMipLevelSize(image->width, image->height, mipLevel, - static_cast(image->texture.basemap->Format.DataFormat)); - - if (ddsMipLevelSize == 0) - { - DbgPrint(" [ERROR] Unsupported format %d for mip level %u! Skipping...\n", - image->texture.basemap->Format.DataFormat, mipLevel); - break; - } - - // Ensure we're not reading out of bounds - if (ddsOffset + ddsMipLevelSize > ddsImage.data.size()) - { - DbgPrint(" [ERROR] Mip Level %u exceeds DDS data size! Skipping...\n", mipLevel); - break; - } - - std::vector levelData(ddsImage.data.begin() + ddsOffset, - ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); - - GPUEndianSwapTexture(levelData, static_cast(image->texture.basemap->Format.Endian)); - - DbgPrint("Image_Replace_2D: Mip Level %d - Row Pitch=%u\n", mipLevel, rowPitch); - - UINT address = baseAddress; - if (mipLevel > 0) - { - UINT mipLevelOffset = XGGetMipLevelOffset(image->texture.basemap, 0, mipLevel); - address = mipAddress + mipLevelOffset; - } - - DbgPrint("Image_Replace_2D: Writing mip level %d to address 0x%08X - levelSize=%u\n", mipLevel, address, - ddsMipLevelSize); - - // // Write the base level - XGTileTextureLevel(TextureDesc.Width, TextureDesc.Height, mipLevel, image->texture.basemap->Format.DataFormat, - XGTILE_NONPACKED, // Use non-packed mode (likely required for this texture) - reinterpret_cast(address), // Destination (tiled GPU memory for Base) - nullptr, // No offset (tile the whole image) - levelData.data(), // Source mip level data - rowPitch, // Row pitch of source image (should match DDS format) - nullptr // No subrectangle (tile the full image) - ); - - ddsOffset += ddsMipLevelSize; - } -} - -void ImageLoader::ReplaceGfxImage(GfxImage *image) -{ - const std::string replacement_base_dir = "game:\\_codxe\\raw\\images"; - const std::string replacement_path = replacement_base_dir + "\\" + image->name + ".dds"; - - if (!filesystem::file_exists(replacement_path)) - { - DbgPrint("File does not exist: %s\n", replacement_path.c_str()); - return; - } - - DDSImage ddsImage = ReadDDSFile(replacement_path.c_str()); - if (ddsImage.data.empty()) - { - DbgPrint("Failed to load DDS file: %s\n", replacement_path.c_str()); - return; - } - - if (image->width != ddsImage.header.width || image->height != ddsImage.header.height) - { - DbgPrint("Image '%s' dimensions do not match DDS file: %s\n", image->name, replacement_path.c_str()); - return; - } - - GPUTEXTUREFORMAT ddsFormat; - switch (ddsImage.header.pixelFormat.fourCC) - { - case DXT1_FOURCC: - ddsFormat = GPUTEXTUREFORMAT_DXT1; - break; - case DXT3_FOURCC: - ddsFormat = GPUTEXTUREFORMAT_DXT2_3; - break; - case DXT5_FOURCC: - ddsFormat = GPUTEXTUREFORMAT_DXT4_5; - break; - case DXN_FOURCC: - ddsFormat = GPUTEXTUREFORMAT_DXN; - break; - default: - DbgPrint("Image '%s' has an unsupported DDS format: 0x%X\n", image->name, ddsImage.header.pixelFormat.fourCC); - return; - } - - if (static_cast(image->texture.basemap->Format.DataFormat) != static_cast(ddsFormat)) - { - DbgPrint("Image '%s' format does not match DDS file: Expected %d, Got %d\n", image->name, - static_cast(image->texture.basemap->Format.DataFormat), static_cast(ddsFormat)); - return; - } - - if (image->mapType == MAPTYPE_2D) - { - ReplaceGfxImage2d(image, ddsImage); - } - // else if (image->mapType == MAPTYPE_CUBE) - // { - // Image_Replace_Cube(image, ddsImage); - // } - else - { - DbgPrint("Image '%s' is not a 2D or cube map!\n", image->name); - return; - } -} - -ImageLoader::ImageLoader() -{ - // Create directories for dumping images - CreateDirectoryA("game:\\_codxe", nullptr); - CreateDirectoryA("game:\\_codxe\\dump", nullptr); - CreateDirectoryA("game:\\_codxe\\dump\\images", nullptr); - CreateDirectoryA("game:\\_codxe\\dump\\highmip", nullptr); - - // // Dump all images from the database - // const auto MAX_IMAGES = 2048; - // XAssetHeader assets[MAX_IMAGES]; - // auto count = DB_GetAllXAssetOfType_FastFile(ASSET_TYPE_IMAGE, assets, MAX_IMAGES); - // DbgPrint("ImageLoader: Found %d images\n", count); - // for (int i = 0; i < count; i++) - // { - // DumpGfxImage(assets[i].image); - // } - - // Replace images - const auto MAX_IMAGES = 2048; - XAssetHeader assets[MAX_IMAGES]; - auto count = DB_GetAllXAssetOfType_FastFile(ASSET_TYPE_IMAGE, assets, MAX_IMAGES); - DbgPrint("Cmd_imageload2_f: Found %d images\n", count); - for (int i = 0; i < count; i++) - ReplaceGfxImage(assets[i].image); -} - -ImageLoader::~ImageLoader() -{ -} -} // namespace mp -} // namespace t4 diff --git a/src/game/t4/mp/components/image_loader.h b/src/game/t4/mp/components/image_loader.h deleted file mode 100644 index 7d0f52ae..00000000 --- a/src/game/t4/mp/components/image_loader.h +++ /dev/null @@ -1,96 +0,0 @@ -#pragma once - -#include "pch.h" - -// DDS Constants -const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); -const uint32_t DDS_HEADER_SIZE = 124; -const uint32_t DDS_PIXEL_FORMAT_SIZE = 32; -const uint32_t DDSD_CAPS = 0x1; -const uint32_t DDSD_HEIGHT = 0x2; -const uint32_t DDSD_WIDTH = 0x4; -const uint32_t DDSD_PIXELFORMAT = 0x1000; -const uint32_t DDSD_LINEARSIZE = 0x80000; -const uint32_t DDPF_FOURCC = 0x4; -const uint32_t DDPF_RGB = 0x40; -const uint32_t DDPF_ALPHAPIXELS = 0x1; -const uint32_t DDSCAPS_TEXTURE = 0x1000; -const uint32_t DDSCAPS_MIPMAP = 0x400000; -const uint32_t DDPF_LUMINANCE = 0x20000; - -// DDS Pixel Formats (FourCC Codes) -const uint32_t DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'); -const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); -const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); -const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); // (DXN / BC5) - -// Additional DDS Cubemap Flags -const uint32_t DDSCAPS2_CUBEMAP = 0x200; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; - -struct DDSHeader -{ - uint32_t magic; - uint32_t size; - uint32_t flags; - uint32_t height; - uint32_t width; - uint32_t pitchOrLinearSize; - uint32_t depth; - uint32_t mipMapCount; - uint32_t reserved1[11]; - struct - { - uint32_t size; - uint32_t flags; - uint32_t fourCC; - uint32_t rgbBitCount; - uint32_t rBitMask; - uint32_t gBitMask; - uint32_t bBitMask; - uint32_t aBitMask; - } pixelFormat; - uint32_t caps; - uint32_t caps2; - uint32_t caps3; - uint32_t caps4; - uint32_t reserved2; -}; -static_assert(sizeof(DDSHeader) == 128, ""); - -struct DDSImage -{ - DDSHeader header; - std::vector data; -}; - -namespace t4 -{ -namespace mp -{ - -class ImageLoader : public Module -{ - - public: - ImageLoader(); - ~ImageLoader(); - const char *get_name() override - { - return "ImageLoader"; - }; - - private: - void DumpGfxImage(const GfxImage *image); - void ImageLoader::ReplaceGfxImage(GfxImage *image); - void ImageLoader::ReplaceGfxImage2d(GfxImage *image, const DDSImage &ddsImage); - unsigned int ImageLoader::CalculateMipLevelSize(unsigned int width, unsigned int height, unsigned int mipLevel, - GPUTEXTUREFORMAT format); -}; -} // namespace mp -} // namespace t4 diff --git a/src/game/t4/mp/main.cpp b/src/game/t4/mp/main.cpp index 39a0ca13..72ab693f 100644 --- a/src/game/t4/mp/main.cpp +++ b/src/game/t4/mp/main.cpp @@ -8,7 +8,6 @@ #include "components/gsc_client_methods.h" #include "components/gsc_functions.h" #include "components/gsc_loader.h" -#include "components/image_loader.h" #include "components/map.h" #include "components/patches.h" #include "components/stats.h" @@ -32,7 +31,6 @@ T4_MP_Plugin::T4_MP_Plugin() RegisterModule(new GSCFunctions()); RegisterModule(new SVBots()); RegisterModule(new GSCLoader()); - // RegisterModule(new ImageLoader()); RegisterModule(new Map()); RegisterModule(new Patches()); RegisterModule(new stats()); diff --git a/src/pch.h b/src/pch.h index 5a2a9dd9..b84c5005 100644 --- a/src/pch.h +++ b/src/pch.h @@ -23,13 +23,10 @@ #include #include #include -#include #include #include #include -#pragma comment(lib, "d3d9ltcg.lib") -#pragma comment(lib, "xgraphics.lib") #pragma comment(lib, "xjson.lib") // Project-specific includes diff --git a/src/xenos_texture.cpp b/src/xenos_texture.cpp new file mode 100644 index 00000000..45cf7994 --- /dev/null +++ b/src/xenos_texture.cpp @@ -0,0 +1,375 @@ +#include "pch.h" +#include "xenos_texture.h" + +namespace +{ +struct TextureLevelLayout +{ + uint32_t widthBlocks; + uint32_t heightBlocks; + uint32_t rowPitchBytes; + uint32_t storedWidthBlocks; + uint32_t storedHeightBlocks; + uint32_t arraySliceStrideBytes; +}; + +uint32_t DivideRoundUp(uint32_t value, uint32_t divisor) +{ + return (value + divisor - 1) / divisor; +} + +uint32_t AlignTo(uint32_t value, uint32_t alignment) +{ + return DivideRoundUp(value, alignment) * alignment; +} + +uint32_t NextPow2(uint32_t value) +{ + if (value <= 1) + return 1; + + uint32_t result = 1; + while (result < value) + result <<= 1; + return result; +} + +uint32_t Log2Ceil(uint32_t value) +{ + uint32_t result = 0; + uint32_t current = value - 1; + while (current != 0) + { + current >>= 1; + ++result; + } + return result; +} + +uint32_t CalculatePitch(uint32_t width, const xenos_texture::TextureFormatInfo &formatInfo) +{ + if (formatInfo.blockWidth > 1) + { + const uint32_t widthInBlocks = max(1u, DivideRoundUp(width, formatInfo.blockWidth)); + return AlignTo(widthInBlocks, 32u) / 8u; + } + + return AlignTo(width, 32u) / 32u; +} + +TextureLevelLayout CalculateLevelLayout(uint32_t width, uint32_t height, uint32_t mipLevel, + const xenos_texture::TextureFormatInfo &formatInfo, uint32_t basePitch) +{ + const uint32_t mipWidth = max(width >> mipLevel, 1u); + const uint32_t mipHeight = max(height >> mipLevel, 1u); + + TextureLevelLayout layout = {}; + layout.widthBlocks = max(1u, DivideRoundUp(mipWidth, formatInfo.blockWidth)); + layout.heightBlocks = max(1u, DivideRoundUp(mipHeight, formatInfo.blockHeight)); + + if (mipLevel == 0) + { + const uint32_t pitch = basePitch != 0 ? basePitch : CalculatePitch(width, formatInfo); + const uint32_t rowPitchTexels = pitch << 5u; + layout.rowPitchBytes = max(1u, DivideRoundUp(rowPitchTexels, formatInfo.blockWidth)) * formatInfo.bytesPerBlock; + layout.storedWidthBlocks = layout.rowPitchBytes / formatInfo.bytesPerBlock; + layout.storedHeightBlocks = AlignTo(layout.heightBlocks, 32u); + } + else + { + const uint32_t mipWidthTexels = max(NextPow2(width) >> mipLevel, 1u); + const uint32_t mipHeightTexels = max(NextPow2(height) >> mipLevel, 1u); + layout.storedWidthBlocks = AlignTo(DivideRoundUp(mipWidthTexels, formatInfo.blockWidth), 32u); + layout.storedHeightBlocks = AlignTo(DivideRoundUp(mipHeightTexels, formatInfo.blockHeight), 32u); + layout.rowPitchBytes = layout.storedWidthBlocks * formatInfo.bytesPerBlock; + } + + layout.arraySliceStrideBytes = AlignTo(layout.rowPitchBytes * layout.storedHeightBlocks, 4096u); + return layout; +} + +uint32_t CalculateLog2BytesPerBlock(uint32_t bytesPerBlock) +{ + return (bytesPerBlock / 4u) + ((bytesPerBlock / 2u) >> (bytesPerBlock / 4u)); +} + +uint32_t TiledOffset2DRow(uint32_t y, uint32_t width, uint32_t log2BytesPerBlock) +{ + const uint32_t macro = ((y / 32u) * (width / 32u)) << (log2BytesPerBlock + 7u); + const uint32_t micro = ((y & 6u) << 2u) << log2BytesPerBlock; + return macro + ((micro & ~0xFu) << 1u) + (micro & 0xFu) + ((y & 8u) << (3u + log2BytesPerBlock)) + ((y & 1u) << 4u); +} + +uint32_t TiledOffset2DColumn(uint32_t x, uint32_t y, uint32_t log2BytesPerBlock, uint32_t baseOffset) +{ + const uint32_t macro = (x / 32u) << (log2BytesPerBlock + 7u); + const uint32_t micro = (x & 7u) << log2BytesPerBlock; + const uint32_t offset = baseOffset + macro + ((micro & ~0xFu) << 1u) + (micro & 0xFu); + return ((offset & ~0x1FFu) << 3u) + ((offset & 0x1C0u) << 2u) + (offset & 0x3Fu) + ((y & 16u) << 7u) + + (((((y & 8u) >> 2u) + (x >> 3u)) & 3u) << 6u); +} + +void EndianSwap8In16(unsigned char *data, size_t size) +{ + for (size_t i = 0; i + 1 < size; i += 2) + std::swap(data[i], data[i + 1]); +} + +void EndianSwap8In32(unsigned char *data, size_t size) +{ + for (size_t i = 0; i + 3 < size; i += 4) + { + std::swap(data[i], data[i + 3]); + std::swap(data[i + 1], data[i + 2]); + } +} + +void EndianSwap16In32(unsigned char *data, size_t size) +{ + for (size_t i = 0; i + 3 < size; i += 4) + { + std::swap(data[i], data[i + 2]); + std::swap(data[i + 1], data[i + 3]); + } +} +} // namespace + +namespace xenos_texture +{ +const TextureFormatInfo *GetTextureFormatInfo(uint32_t gpuFormat) +{ + static const TextureFormatInfo formats[] = { + {GPUTEXTUREFORMAT_8, 1u, 1u, 1u, 8u}, {GPUTEXTUREFORMAT_8_8, 1u, 1u, 2u, 16u}, + {GPUTEXTUREFORMAT_8_8_8_8, 1u, 1u, 4u, 32u}, {GPUTEXTUREFORMAT_DXT1, 4u, 4u, 8u, 4u}, + {GPUTEXTUREFORMAT_DXT2_3, 4u, 4u, 16u, 8u}, {GPUTEXTUREFORMAT_DXT4_5, 4u, 4u, 16u, 8u}, + {GPUTEXTUREFORMAT_DXN, 4u, 4u, 16u, 8u}, {GPUTEXTUREFORMAT_DXT3A, 4u, 4u, 8u, 4u}, + {GPUTEXTUREFORMAT_DXT5A, 4u, 4u, 8u, 4u}, + }; + + for (size_t i = 0; i < sizeof(formats) / sizeof(formats[0]); ++i) + { + if (formats[i].gpuFormat == gpuFormat) + return &formats[i]; + } + + return NULL; +} + +void ApplyGpuEndian(void *data, size_t size, GPUENDIAN endianType) +{ + unsigned char *bytes = static_cast(data); + switch (endianType) + { + case GPUENDIAN_8IN16: + EndianSwap8In16(bytes, size); + break; + case GPUENDIAN_8IN32: + EndianSwap8In32(bytes, size); + break; + case GPUENDIAN_16IN32: + EndianSwap16In32(bytes, size); + break; + default: + break; + } +} + +uint32_t GetTextureLevelCount(const D3DBaseTexture *texture) +{ + if (texture == NULL) + return 1; + return max(1u, static_cast(texture->Format.MaxMipLevel) + 1u); +} + +uint32_t GetMipTailBaseLevel(uint32_t width, uint32_t height) +{ + const uint32_t log2Size = Log2Ceil(min(width, height)); + return log2Size > 4u ? log2Size - 4u : 0u; +} + +uint32_t CalculateLinearRowPitch(uint32_t width, uint32_t mipLevel, uint32_t gpuFormat) +{ + const TextureFormatInfo *formatInfo = GetTextureFormatInfo(gpuFormat); + if (formatInfo == NULL) + return 0; + + const uint32_t mipWidth = max(width >> mipLevel, 1u); + const uint32_t widthBlocks = max(1u, DivideRoundUp(mipWidth, formatInfo->blockWidth)); + return widthBlocks * formatInfo->bytesPerBlock; +} + +uint32_t CalculateLinearLevelSize(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat) +{ + const TextureFormatInfo *formatInfo = GetTextureFormatInfo(gpuFormat); + if (formatInfo == NULL) + return 0; + + const uint32_t mipWidth = max(width >> mipLevel, 1u); + const uint32_t mipHeight = max(height >> mipLevel, 1u); + const uint32_t widthBlocks = max(1u, DivideRoundUp(mipWidth, formatInfo->blockWidth)); + const uint32_t heightBlocks = max(1u, DivideRoundUp(mipHeight, formatInfo->blockHeight)); + return widthBlocks * heightBlocks * formatInfo->bytesPerBlock; +} + +uint32_t CalculateTiledLevelSize(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, + uint32_t basePitch) +{ + const TextureFormatInfo *formatInfo = GetTextureFormatInfo(gpuFormat); + if (formatInfo == NULL) + return 0; + + const TextureLevelLayout layout = CalculateLevelLayout(width, height, mipLevel, *formatInfo, basePitch); + return layout.arraySliceStrideBytes; +} + +uint32_t CalculateBaseSize(const D3DBaseTexture *texture, uint32_t width, uint32_t height, uint32_t faceCount) +{ + if (texture == NULL) + return 0; + + const TextureFormatInfo *formatInfo = GetTextureFormatInfo(texture->Format.DataFormat); + if (formatInfo == NULL) + return 0; + + const TextureLevelLayout layout = CalculateLevelLayout(width, height, 0u, *formatInfo, texture->Format.Pitch); + return layout.arraySliceStrideBytes * faceCount; +} + +uint32_t CalculateMipLevelOffset(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, + uint32_t faceCount) +{ + const TextureFormatInfo *formatInfo = GetTextureFormatInfo(gpuFormat); + if (formatInfo == NULL || mipLevel <= 1u) + return 0; + + uint32_t offset = 0; + for (uint32_t level = 1u; level < mipLevel; ++level) + { + const TextureLevelLayout layout = CalculateLevelLayout(width, height, level, *formatInfo, 0u); + offset += layout.arraySliceStrideBytes * faceCount; + } + + return offset; +} + +unsigned char *GetTextureBase(const D3DBaseTexture *texture, unsigned char *fallbackBaseData) +{ + if (fallbackBaseData != NULL) + return fallbackBaseData; + + if (texture != NULL && texture->Format.BaseAddress != 0) + return reinterpret_cast(texture->Format.BaseAddress << 12u); + + return NULL; +} + +unsigned char *GetTextureMipBase(const D3DBaseTexture *texture, unsigned char *baseData, uint32_t width, + uint32_t height, uint32_t gpuFormat, uint32_t faceCount) +{ + const uint32_t baseSize = CalculateBaseSize(texture, width, height, faceCount); + if (baseData != NULL) + return baseData + baseSize; + + if (texture != NULL && texture->Format.MipAddress != 0) + return reinterpret_cast(texture->Format.MipAddress << 12u); + + return NULL; +} + +bool TileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, + void *destination, const void *source, uint32_t sourceRowPitch) +{ + return TileTextureLevel(width, height, mipLevel, gpuFormat, basePitch, destination, static_cast(-1), source, + static_cast(-1), sourceRowPitch); +} + +bool TileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, + void *destination, size_t destinationSize, const void *source, size_t sourceSize, + uint32_t sourceRowPitch) +{ + const TextureFormatInfo *formatInfo = GetTextureFormatInfo(gpuFormat); + if (formatInfo == NULL || destination == NULL || source == NULL || sourceRowPitch == 0) + { + return false; + } + + const TextureLevelLayout layout = CalculateLevelLayout(width, height, mipLevel, *formatInfo, basePitch); + if (sourceRowPitch < layout.widthBlocks * formatInfo->bytesPerBlock) + { + return false; + } + + const uint32_t log2BytesPerBlock = CalculateLog2BytesPerBlock(formatInfo->bytesPerBlock); + const unsigned char *sourceBytes = static_cast(source); + unsigned char *destinationBytes = static_cast(destination); + + for (uint32_t y = 0; y < layout.heightBlocks; ++y) + { + const uint32_t destinationRowOffset = TiledOffset2DRow(y, layout.storedWidthBlocks, log2BytesPerBlock); + + for (uint32_t x = 0; x < layout.widthBlocks; ++x) + { + uint32_t tiledOffset = TiledOffset2DColumn(x, y, log2BytesPerBlock, destinationRowOffset); + tiledOffset >>= log2BytesPerBlock; + + const size_t sourceOffset = + static_cast(y) * sourceRowPitch + static_cast(x) * formatInfo->bytesPerBlock; + const size_t destinationOffset = static_cast(tiledOffset) * formatInfo->bytesPerBlock; + if (sourceOffset + formatInfo->bytesPerBlock > sourceSize || + destinationOffset + formatInfo->bytesPerBlock > destinationSize) + { + return false; + } + + memcpy(destinationBytes + destinationOffset, sourceBytes + sourceOffset, formatInfo->bytesPerBlock); + } + } + + return true; +} + +bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, + void *destination, uint32_t destinationRowPitch, const void *source) +{ + return UntileTextureLevel(width, height, mipLevel, gpuFormat, basePitch, destination, static_cast(-1), + destinationRowPitch, source, static_cast(-1)); +} + +bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, + void *destination, size_t destinationSize, uint32_t destinationRowPitch, const void *source, + size_t sourceSize) +{ + const TextureFormatInfo *formatInfo = GetTextureFormatInfo(gpuFormat); + if (formatInfo == NULL || destination == NULL || source == NULL || destinationRowPitch == 0) + return false; + + const TextureLevelLayout layout = CalculateLevelLayout(width, height, mipLevel, *formatInfo, basePitch); + if (destinationRowPitch < layout.widthBlocks * formatInfo->bytesPerBlock) + return false; + + const uint32_t log2BytesPerBlock = CalculateLog2BytesPerBlock(formatInfo->bytesPerBlock); + unsigned char *destinationBytes = static_cast(destination); + const unsigned char *sourceBytes = static_cast(source); + + for (uint32_t y = 0; y < layout.heightBlocks; ++y) + { + const uint32_t sourceRowOffset = TiledOffset2DRow(y, layout.storedWidthBlocks, log2BytesPerBlock); + for (uint32_t x = 0; x < layout.widthBlocks; ++x) + { + uint32_t tiledOffset = TiledOffset2DColumn(x, y, log2BytesPerBlock, sourceRowOffset); + tiledOffset >>= log2BytesPerBlock; + + const size_t destinationOffset = + static_cast(y) * destinationRowPitch + static_cast(x) * formatInfo->bytesPerBlock; + const size_t sourceOffset = static_cast(tiledOffset) * formatInfo->bytesPerBlock; + if (destinationOffset + formatInfo->bytesPerBlock > destinationSize || + sourceOffset + formatInfo->bytesPerBlock > sourceSize) + return false; + + memcpy(destinationBytes + destinationOffset, sourceBytes + sourceOffset, formatInfo->bytesPerBlock); + } + } + + return true; +} +} // namespace xenos_texture diff --git a/src/xenos_texture.h b/src/xenos_texture.h new file mode 100644 index 00000000..d410730b --- /dev/null +++ b/src/xenos_texture.h @@ -0,0 +1,41 @@ +#pragma once + +#include +#include + +namespace xenos_texture +{ +struct TextureFormatInfo +{ + uint32_t gpuFormat; + uint32_t blockWidth; + uint32_t blockHeight; + uint32_t bytesPerBlock; + uint32_t bitsPerPixel; +}; + +const TextureFormatInfo *GetTextureFormatInfo(uint32_t gpuFormat); +void ApplyGpuEndian(void *data, size_t size, GPUENDIAN endianType); +uint32_t GetTextureLevelCount(const D3DBaseTexture *texture); +uint32_t GetMipTailBaseLevel(uint32_t width, uint32_t height); +uint32_t CalculateLinearRowPitch(uint32_t width, uint32_t mipLevel, uint32_t gpuFormat); +uint32_t CalculateLinearLevelSize(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat); +uint32_t CalculateTiledLevelSize(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, + uint32_t basePitch); +uint32_t CalculateBaseSize(const D3DBaseTexture *texture, uint32_t width, uint32_t height, uint32_t faceCount); +uint32_t CalculateMipLevelOffset(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, + uint32_t faceCount); +unsigned char *GetTextureBase(const D3DBaseTexture *texture, unsigned char *fallbackBaseData); +unsigned char *GetTextureMipBase(const D3DBaseTexture *texture, unsigned char *baseData, uint32_t width, + uint32_t height, uint32_t gpuFormat, uint32_t faceCount); +bool TileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, + void *destination, const void *source, uint32_t sourceRowPitch); +bool TileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, + void *destination, size_t destinationSize, const void *source, size_t sourceSize, + uint32_t sourceRowPitch); +bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, + void *destination, uint32_t destinationRowPitch, const void *source); +bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, + void *destination, size_t destinationSize, uint32_t destinationRowPitch, const void *source, + size_t sourceSize); +} // namespace xenos_texture From 3120b02a039048aea650ab14dbe295c5c93e2147 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 07:16:43 +0100 Subject: [PATCH 02/20] refactor: IW3 enhance image replacement ergonomics Don't require two different textures for the image and stream parts, accept a larger texture with the stream mip level size and use it for both. Omits the need to have a separate `highmip` path. --- src/game/iw3/mp/components/image_loader.cpp | 338 +++++++++++++++----- 1 file changed, 254 insertions(+), 84 deletions(-) diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index 24fd3aaf..eee098eb 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -31,6 +31,8 @@ const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); // (DXN / BC5) +std::set g_streamedImageReplacements; + // Additional DDS Cubemap Flags const uint32_t DDSCAPS2_CUBEMAP = 0x200; const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; @@ -198,13 +200,43 @@ bool DDSIsCubemap(const DDSImage &ddsImage) (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; } -size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t levelCount, - uint32_t faceCount) +uint32_t GetDDSMipCount(const DDSImage &ddsImage) +{ + return max(1u, static_cast(ddsImage.header.mipMapCount)); +} + +bool GetDDSFormat(const DDSImage &ddsImage, GPUTEXTUREFORMAT *format) +{ + if ((ddsImage.header.pixelFormat.flags & DDPF_FOURCC) == 0) + return false; + + switch (ddsImage.header.pixelFormat.fourCC) + { + case DXT1_FOURCC: + *format = GPUTEXTUREFORMAT_DXT1; + return true; + case DXT3_FOURCC: + *format = GPUTEXTUREFORMAT_DXT2_3; + return true; + case DXT5_FOURCC: + *format = GPUTEXTUREFORMAT_DXT4_5; + return true; + case DXN_FOURCC: + *format = GPUTEXTUREFORMAT_DXN; + return true; + default: + return false; + } +} + +size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, + uint32_t levelCount, uint32_t faceCount) { size_t requiredSize = 0; - for (uint32_t mipLevel = 0; mipLevel < levelCount; ++mipLevel) + for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) { + const uint32_t mipLevel = firstMipLevel + localMipLevel; const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); if (levelSize == 0) return 0; @@ -215,6 +247,22 @@ size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTU return requiredSize; } +uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t mipLevel) +{ + uint32_t offset = 0; + + for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) + { + const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); + if (levelSize == 0) + return 0; + + offset += levelSize; + } + + return offset; +} + size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) { @@ -233,10 +281,15 @@ size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXT } bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, - uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) + uint32_t ddsFirstMipLevel, uint32_t replacementLevelCount, size_t *requiredDDSSize, + size_t *requiredTextureBytes) { - *requiredDDSSize = CalculateRequiredLinearDataSize(image->width, image->height, format, replacementLevelCount, 1u); - if (*requiredDDSSize == 0) + const size_t ddsMipOffset = + CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel); + const size_t requiredLinearSize = CalculateRequiredLinearDataSize( + ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel, replacementLevelCount, 1u); + *requiredDDSSize = ddsMipOffset + requiredLinearSize; + if (requiredLinearSize == 0 || (ddsFirstMipLevel > 0 && ddsMipOffset == 0)) return false; if (ddsImage.data.size() < *requiredDDSSize) @@ -747,7 +800,7 @@ void Cmd_imagedump() } } -bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage) +bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFirstMipLevel) { if (image->mapType != MAPTYPE_2D) { @@ -760,7 +813,15 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage) const uint32_t mipTailBaseLevel = image->texture.basemap->Format.PackedMips != 0 ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; - const uint32_t replaceLevelCount = min(levelCount, max(1u, static_cast(ddsImage.header.mipMapCount))); + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + if (ddsFirstMipLevel >= ddsMipCount) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement DDS has no mip %u: mipCount=%u\n", image->name, + ddsFirstMipLevel, ddsMipCount); + return false; + } + + const uint32_t replaceLevelCount = min(levelCount, ddsMipCount - ddsFirstMipLevel); const uint32_t nonPackedLevelCount = max(1u, min(replaceLevelCount, mipTailBaseLevel)); unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); unsigned char *mipData = @@ -768,7 +829,7 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage) size_t requiredDDSSize = 0; size_t requiredTextureBytes = 0; - if (!Validate2DReplacementData(image, ddsImage, format, nonPackedLevelCount, &requiredDDSSize, + if (!Validate2DReplacementData(image, ddsImage, format, ddsFirstMipLevel, nonPackedLevelCount, &requiredDDSSize, &requiredTextureBytes)) { if (requiredDDSSize == 0) @@ -798,20 +859,21 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage) return false; } - uint32_t ddsOffset = 0; + uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel); - for (uint32_t mipLevel = 0; mipLevel < nonPackedLevelCount; mipLevel++) + for (uint32_t localMipLevel = 0; localMipLevel < nonPackedLevelCount; localMipLevel++) { - uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, mipLevel, format); + const uint32_t ddsMipLevel = ddsFirstMipLevel + localMipLevel; + uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, ddsMipLevel, format); uint32_t ddsMipLevelSize = - xenos_texture::CalculateLinearLevelSize(image->width, image->height, mipLevel, format); + xenos_texture::CalculateLinearLevelSize(ddsImage.header.width, ddsImage.header.height, ddsMipLevel, format); uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize( - image->width, image->height, mipLevel, format, image->texture.basemap->Format.Pitch); + image->width, image->height, localMipLevel, format, image->texture.basemap->Format.Pitch); if (ddsMipLevelSize == 0 || tiledMipLevelSize == 0 || rowPitch == 0) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Unsupported format %d for image '%s' mip level %u\n", - image->texture.basemap->Format.DataFormat, image->name, mipLevel); + image->texture.basemap->Format.DataFormat, image->name, localMipLevel); return false; } @@ -819,7 +881,7 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage) if (ddsOffset + ddsMipLevelSize > ddsImage.data.size()) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Image '%s' mip level %u exceeds DDS data size\n", - image->name, mipLevel); + image->name, ddsMipLevel); return false; } @@ -830,22 +892,22 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage) static_cast(image->texture.basemap->Format.Endian)); unsigned char *destination = baseData; - if (mipLevel > 0) + if (localMipLevel > 0) { - destination = - mipData + xenos_texture::CalculateMipLevelOffset(image->width, image->height, mipLevel, format, 1u); + destination = mipData + xenos_texture::CalculateMipLevelOffset(image->width, image->height, localMipLevel, + format, 1u); } std::vector tiledData(tiledMipLevelSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, mipLevel, format, + if (!xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, format, image->texture.basemap->Format.Pitch, tiledData.data(), tiledData.size(), levelData.data(), levelData.size(), rowPitch)) { Com_PrintError( CON_CHANNEL_ERROR, "Image_Replace_2D: Failed to tile mip level %d for image '%s' rowPitch=%u sourceSize=%u destSize=%u\n", - mipLevel, image->name, rowPitch, static_cast(levelData.size()), tiledMipLevelSize); + localMipLevel, image->name, rowPitch, static_cast(levelData.size()), tiledMipLevelSize); return false; } @@ -964,38 +1026,11 @@ void Image_Replace(GfxImage *image) return; } - if ((ddsImage.header.pixelFormat.flags & DDPF_FOURCC) == 0) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement DDS is not a FourCC/compressed texture!\n", - image->name); - return; - } - - if (image->width != ddsImage.header.width || image->height != ddsImage.header.height) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' dimensions do not match DDS file: %s\n", image->name, - replacement_path.c_str()); - return; - } - GPUTEXTUREFORMAT ddsFormat; - switch (ddsImage.header.pixelFormat.fourCC) + if (!GetDDSFormat(ddsImage, &ddsFormat)) { - case DXT1_FOURCC: - ddsFormat = GPUTEXTUREFORMAT_DXT1; - break; - case DXT3_FOURCC: - ddsFormat = GPUTEXTUREFORMAT_DXT2_3; - break; - case DXT5_FOURCC: - ddsFormat = GPUTEXTUREFORMAT_DXT4_5; - break; - case DXN_FOURCC: - ddsFormat = GPUTEXTUREFORMAT_DXN; - break; - default: - Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an unsupported DDS format: 0x%X\n", image->name, - ddsImage.header.pixelFormat.fourCC); + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an unsupported DDS format: flags=0x%X fourCC=0x%X\n", + image->name, ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC); return; } @@ -1008,6 +1043,12 @@ void Image_Replace(GfxImage *image) } const bool ddsIsCubemap = DDSIsCubemap(ddsImage); + const bool ddsMatchesImageDimensions = + image->width == ddsImage.header.width && image->height == ddsImage.header.height; + const bool ddsMatchesStreamDimensions = image->streaming && image->mapType == MAPTYPE_2D && !ddsIsCubemap && + ddsImage.header.width == static_cast(image->width) * 2u && + ddsImage.header.height == static_cast(image->height) * 2u; + uint32_t ddsFirstMipLevel = 0; if (image->mapType == MAPTYPE_2D && ddsIsCubemap) { @@ -1015,6 +1056,39 @@ void Image_Replace(GfxImage *image) return; } + if (image->streaming && image->mapType == MAPTYPE_2D) + { + if (!ddsMatchesStreamDimensions) + { + Com_PrintError(CON_CHANNEL_ERROR, + "Streamed image '%s' replacement must include the streamed mip: expected=%ux%u got=%ux%u " + "%s\n", + image->name, static_cast(image->width) * 2u, + static_cast(image->height) * 2u, ddsImage.header.width, ddsImage.header.height, + replacement_path.c_str()); + return; + } + + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + if (ddsMipCount < 2u) + { + Com_PrintError(CON_CHANNEL_ERROR, + "Image '%s' replacement DDS starts at the streamed mip but has no resident mip: " + "%ux%u mipCount=%u\n", + image->name, ddsImage.header.width, ddsImage.header.height, ddsMipCount); + return; + } + + ddsFirstMipLevel = 1u; + } + else if (!ddsMatchesImageDimensions) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' dimensions do not match DDS file: image=%ux%u dds=%ux%u %s\n", + image->name, image->width, image->height, ddsImage.header.width, ddsImage.header.height, + replacement_path.c_str()); + return; + } + if (image->mapType == MAPTYPE_CUBE && !ddsIsCubemap) { const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0, ddsFormat); @@ -1034,7 +1108,7 @@ void Image_Replace(GfxImage *image) bool replaced = false; if (image->mapType == MAPTYPE_2D) { - replaced = Image_Replace_2D(image, ddsImage); + replaced = Image_Replace_2D(image, ddsImage, ddsFirstMipLevel); } else if (image->mapType == MAPTYPE_CUBE) { @@ -1048,12 +1122,19 @@ void Image_Replace(GfxImage *image) if (replaced) { + if (ddsFirstMipLevel > 0) + { + g_streamedImageReplacements.insert(image->name); + } + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Replaced image '%s'\n", image->name); } } void Load_images() { + g_streamedImageReplacements.clear(); + const int MAX_IMAGES = 2048; XAssetHeader assets[MAX_IMAGES]; const auto count = DB_GetAllXAssetOfType_FastFile(ASSET_TYPE_IMAGE, assets, MAX_IMAGES); @@ -1084,53 +1165,142 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe auto image = asset->entry.asset.header.image; - // Use new ConfigModule API - std::string replacement_path = Config::GetModBasePath() + "\\highmip" + "\\" + asset_name + ".dds"; - - std::ifstream file(replacement_path, std::ios::binary | std::ios::ate); - if (!file) + if (image == NULL || image->texture.basemap == NULL || image->mapType != MAPTYPE_2D) { return false; } - std::streamsize file_size = file.tellg(); - file.seekg(0, std::ios::beg); + const uint32_t highMipWidth = static_cast(image->width) * 2u; + const uint32_t highMipHeight = static_cast(image->height) * 2u; + const bool blockStockStream = g_streamedImageReplacements.find(asset_name) != g_streamedImageReplacements.end(); - if (file_size - 0x80 != bytesToRead) // 0x80 is the size of the DDS header + if (!blockStockStream) { - Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: File size mismatch: %s\n", - replacement_path.c_str()); return false; } - std::vector ddsHeader(0x80); - file.read(reinterpret_cast(ddsHeader.data()), 0x80); + const auto tryReplaceHighMipDDS = [&](const std::string &replacement_path, bool quietDimensionMismatch) -> bool + { + DDSImage ddsImage = ReadDDSFile(replacement_path.c_str()); + if (ddsImage.data.empty()) + { + Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Failed to load DDS file: %s\n", + replacement_path.c_str()); + return false; + } - // TODO: check if file is DDS and has correct format and dimensions + if (ddsImage.header.size != DDS_HEADER_SIZE || ddsImage.header.pixelFormat.size != DDS_PIXEL_FORMAT_SIZE) + { + Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadHighMipReplacement: Image '%s' has an invalid DDS header: size=%u " + "pixelFormatSize=%u\n", + asset_name.c_str(), ddsImage.header.size, ddsImage.header.pixelFormat.size); + return false; + } + + GPUTEXTUREFORMAT ddsFormat; + if (!GetDDSFormat(ddsImage, &ddsFormat)) + { + Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadHighMipReplacement: Image '%s' has an unsupported DDS format: flags=0x%X " + "fourCC=0x%X\n", + asset_name.c_str(), ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC); + return false; + } - std::vector buffer; - buffer.resize(static_cast(bytesToRead)); - file.read(reinterpret_cast(buffer.data()), bytesToRead); + if (static_cast(image->texture.basemap->Format.DataFormat) != static_cast(ddsFormat)) + { + Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadHighMipReplacement: Image '%s' format does not match DDS: expected=%u " + "got=%u\n", + asset_name.c_str(), static_cast(image->texture.basemap->Format.DataFormat), + static_cast(ddsFormat)); + return false; + } - xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), - static_cast(image->texture.basemap->Format.Endian)); + if (ddsImage.header.width != highMipWidth || ddsImage.header.height != highMipHeight) + { + if (!quietDimensionMismatch) + { + Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadHighMipReplacement: Image '%s' dimensions do not match streamed mip: " + "expected=%ux%u got=%ux%u\n", + asset_name.c_str(), highMipWidth, highMipHeight, ddsImage.header.width, + ddsImage.header.height); + } - // High mip are 2x the size of the original image - auto width = image->width * 2; - auto height = image->height * 2; - auto rowPitch = xenos_texture::CalculateLinearRowPitch(width, 0, image->texture.basemap->Format.DataFormat); - if (rowPitch == 0) - return false; + return false; + } - if (!xenos_texture::TileTextureLevel(width, height, 0, image->texture.basemap->Format.DataFormat, 0, outData, - bytesToRead, buffer.data(), buffer.size(), rowPitch)) + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + if (ddsMipCount < 2u) + { + Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadHighMipReplacement: Image '%s' replacement DDS must include stream and " + "resident mips: mipCount=%u\n", + asset_name.c_str(), ddsMipCount); + return false; + } + + const uint32_t sourceSize = + xenos_texture::CalculateLinearLevelSize(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat); + const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, 0u, ddsFormat); + const uint32_t tiledSize = + xenos_texture::CalculateTiledLevelSize(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat, 0u); + + if (sourceSize == 0 || rowPitch == 0 || tiledSize == 0) + { + Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadHighMipReplacement: Image '%s' has unsupported replacement format %u\n", + asset_name.c_str(), static_cast(ddsFormat)); + return false; + } + + if (ddsImage.data.size() < sourceSize) + { + Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadHighMipReplacement: Image '%s' DDS data is too small: have=%u need=%u\n", + asset_name.c_str(), static_cast(ddsImage.data.size()), sourceSize); + return false; + } + + if (tiledSize != bytesToRead) + { + Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadHighMipReplacement: Image '%s' stream size mismatch: expected=%u got=%u\n", + asset_name.c_str(), bytesToRead, tiledSize); + return false; + } + + std::vector buffer(ddsImage.data.begin(), ddsImage.data.begin() + sourceSize); + xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), + static_cast(image->texture.basemap->Format.Endian)); + + if (!xenos_texture::TileTextureLevel(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat, 0u, outData, + bytesToRead, buffer.data(), buffer.size(), rowPitch)) + { + Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Failed to tile image '%s'\n", + asset_name.c_str()); + return false; + } + + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Replaced streamed image '%s'\n", asset_name.c_str()); + return true; + }; + + const std::string combined_path = Config::GetModBasePath() + "\\images" + "\\" + asset_name + ".dds"; + if (filesystem::file_exists(combined_path) && tryReplaceHighMipDDS(combined_path, true)) { - Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Failed to tile image '%s'\n", - asset_name.c_str()); - return false; + return true; + } + + Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Blocking stock stream for replaced image '%s'\n", + asset_name.c_str()); + if (outData != NULL && bytesToRead > 0) + { + memset(outData, 0, bytesToRead); } - Com_Printf(CON_CHANNEL_CONSOLEONLY, "Replaced highmip image '%s'\n", asset_name.c_str()); return true; } @@ -1143,7 +1313,7 @@ int R_StreamLoadFileSynchronously_Hook(const char *filename, unsigned int bytesT return 1; } - // Fallback to original path if modified path failed + // Let the game handle stock streams only when we did not accept a streamed replacement for this image. return R_StreamLoadFileSynchronously_Detour.GetOriginal()( filename, bytesToRead, outData); } @@ -1154,7 +1324,7 @@ image_loader::image_loader() CG_RegisterGraphics_Detour = Detour(CG_RegisterGraphics, CG_RegisterGraphics_Hook); CG_RegisterGraphics_Detour.Install(); - // Load highmip texture replacements from active mod folder + // Load streamed mip texture replacements from active mod folder R_StreamLoadFileSynchronously_Detour = Detour(R_StreamLoadFileSynchronously, R_StreamLoadFileSynchronously_Hook); R_StreamLoadFileSynchronously_Detour.Install(); From 6b3f0d844f388966bb60c8d8a90f6ad11758477b Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 07:35:50 +0100 Subject: [PATCH 03/20] feat: IW4 raw image loader --- codxe.vcxproj | 2 + src/game/iw4/mp_tu6/components/clipmap.cpp | 14 +- src/game/iw4/mp_tu6/components/events.cpp | 26 + src/game/iw4/mp_tu6/components/events.h | 8 + .../iw4/mp_tu6/components/image_loader.cpp | 1092 +++++++++++++++++ src/game/iw4/mp_tu6/components/image_loader.h | 15 + src/game/iw4/mp_tu6/components/mpsp.cpp | 13 +- src/game/iw4/mp_tu6/main.cpp | 2 + src/game/iw4/mp_tu6/structs.h | 65 + src/game/iw4/mp_tu6/symbols.h | 4 + 10 files changed, 1219 insertions(+), 22 deletions(-) create mode 100644 src/game/iw4/mp_tu6/components/image_loader.cpp create mode 100644 src/game/iw4/mp_tu6/components/image_loader.h diff --git a/codxe.vcxproj b/codxe.vcxproj index 635d990f..5f87e5f6 100644 --- a/codxe.vcxproj +++ b/codxe.vcxproj @@ -135,6 +135,7 @@ + @@ -263,6 +264,7 @@ + diff --git a/src/game/iw4/mp_tu6/components/clipmap.cpp b/src/game/iw4/mp_tu6/components/clipmap.cpp index cf7a517a..99b3e468 100644 --- a/src/game/iw4/mp_tu6/components/clipmap.cpp +++ b/src/game/iw4/mp_tu6/components/clipmap.cpp @@ -6,10 +6,7 @@ iw4::mp_tu6::dvar_t *noclip_brushes = nullptr; std::vector original_brush_contents; -Detour DB_LinkXAssetEntry1_Detour; - -iw4::mp_tu6::XAssetEntryPoolEntry *DB_LinkXAssetEntry1_Hook(iw4::mp_tu6::XAssetType type, - iw4::mp_tu6::XAssetHeader *header) +void OnDBLinkXAssetPre(iw4::mp_tu6::XAssetType &type, iw4::mp_tu6::XAssetHeader *header) { // Register once // TODO: Move to dvar init event @@ -19,9 +16,6 @@ iw4::mp_tu6::XAssetEntryPoolEntry *DB_LinkXAssetEntry1_Hook(iw4::mp_tu6::XAssetT "noclip_brushes", "", 0x10, "Brush indices to disable playerclip. Use '*' for all, '' to restore"); } - iw4::mp_tu6::XAssetEntryPoolEntry *entry = - DB_LinkXAssetEntry1_Detour.GetOriginal()(type, header); - if (type == iw4::mp_tu6::ASSET_TYPE_CLIPMAP_MP) { // Resize the vector to match the number of brushes @@ -34,8 +28,6 @@ iw4::mp_tu6::XAssetEntryPoolEntry *DB_LinkXAssetEntry1_Hook(iw4::mp_tu6::XAssetT header->clipMap->brushContents[i]; // Assuming this is the field you want to save } } - - return entry; } void RestoreBrushContents() @@ -133,8 +125,7 @@ void DisablePlayerClipOnIntersectingBrushes(iw4::mp_tu6::scr_entref_t entref) clipmap::clipmap() { - DB_LinkXAssetEntry1_Detour = Detour(iw4::mp_tu6::DB_LinkXAssetEntry1, DB_LinkXAssetEntry1_Hook); - DB_LinkXAssetEntry1_Detour.Install(); + Events::OnDBLinkXAssetPre(OnDBLinkXAssetPre); iw4::mp_tu6::Scr_AddMethod("disableplayercliponintersectingbrushes", DisablePlayerClipOnIntersectingBrushes, iw4::mp_tu6::BUILTIN_ANY); @@ -179,5 +170,4 @@ clipmap::clipmap() clipmap::~clipmap() { - DB_LinkXAssetEntry1_Detour.Remove(); } diff --git a/src/game/iw4/mp_tu6/components/events.cpp b/src/game/iw4/mp_tu6/components/events.cpp index 70177444..454244b9 100644 --- a/src/game/iw4/mp_tu6/components/events.cpp +++ b/src/game/iw4/mp_tu6/components/events.cpp @@ -63,6 +63,27 @@ void Events::OnCmdInit(const std::function &callback) Detour Events::Cmd_Init_Detour; +std::vector> + Events::db_linkxasset_pre_callbacks; +Detour Events::DB_LinkXAssetEntry1_Detour; + +iw4::mp_tu6::XAssetEntryPoolEntry *Events::DB_LinkXAssetEntry1_Hook(iw4::mp_tu6::XAssetType type, + iw4::mp_tu6::XAssetHeader *header) +{ + for (auto it = db_linkxasset_pre_callbacks.begin(); it != db_linkxasset_pre_callbacks.end(); ++it) + { + (*it)(type, header); + } + + return DB_LinkXAssetEntry1_Detour.GetOriginal()(type, header); +} + +void Events::OnDBLinkXAssetPre( + const std::function &callback) +{ + db_linkxasset_pre_callbacks.emplace_back(callback); +} + std::vector> Events::vmshutdown_callbacks; void Events::Scr_ShutdownSystem_Hook(unsigned __int8 sys) @@ -93,6 +114,9 @@ Events::Events() Cmd_Init_Detour = Detour(iw4::mp_tu6::Cmd_Init, Cmd_Init_Hook); Cmd_Init_Detour.Install(); + DB_LinkXAssetEntry1_Detour = Detour(iw4::mp_tu6::DB_LinkXAssetEntry1, DB_LinkXAssetEntry1_Hook); + DB_LinkXAssetEntry1_Detour.Install(); + Scr_ShutdownSystem_Detour = Detour(iw4::mp_tu6::Scr_ShutdownSystem, Scr_ShutdownSystem_Hook); Scr_ShutdownSystem_Detour.Install(); } @@ -102,10 +126,12 @@ Events::~Events() Com_InitDvars_Detour.Remove(); CG_DrawActive_Detour.Remove(); Cmd_Init_Detour.Remove(); + DB_LinkXAssetEntry1_Detour.Remove(); Scr_ShutdownSystem_Detour.Remove(); com_initdvars_callbacks.clear(); cg_drawactive_callbacks.clear(); cmdinit_callbacks.clear(); + db_linkxasset_pre_callbacks.clear(); vmshutdown_callbacks.clear(); } diff --git a/src/game/iw4/mp_tu6/components/events.h b/src/game/iw4/mp_tu6/components/events.h index aa3fff09..04a30ebe 100644 --- a/src/game/iw4/mp_tu6/components/events.h +++ b/src/game/iw4/mp_tu6/components/events.h @@ -16,6 +16,8 @@ class Events : public Module static void OnDvarInit(const std::function &callback); static void OnCG_DrawActive(const std::function &callback); static void OnCmdInit(const std::function &callback); + static void OnDBLinkXAssetPre( + const std::function &callback); static void OnVMShutdown(const std::function &callback); private: @@ -31,6 +33,12 @@ class Events : public Module static Detour Cmd_Init_Detour; static void Cmd_Init_Hook(); + static std::vector> + db_linkxasset_pre_callbacks; + static Detour DB_LinkXAssetEntry1_Detour; + static iw4::mp_tu6::XAssetEntryPoolEntry *DB_LinkXAssetEntry1_Hook(iw4::mp_tu6::XAssetType type, + iw4::mp_tu6::XAssetHeader *header); + static std::vector> vmshutdown_callbacks; static Detour Scr_ShutdownSystem_Detour; static void Scr_ShutdownSystem_Hook(unsigned __int8 sys); diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp new file mode 100644 index 00000000..4b29aedd --- /dev/null +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -0,0 +1,1092 @@ +#include "pch.h" +#include "common/config.h" +#include "events.h" +#include "image_loader.h" +#include "xenos_texture.h" + +#ifndef INVALID_FILE_ATTRIBUTES +#define INVALID_FILE_ATTRIBUTES ((DWORD) - 1) +#endif + +namespace +{ +namespace game = iw4::mp_tu6; + +const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); +const uint32_t DDS_HEADER_SIZE = 124; +const uint32_t DDS_PIXEL_FORMAT_SIZE = 32; +const uint32_t DDPF_ALPHAPIXELS = 0x1; +const uint32_t DDPF_FOURCC = 0x4; +const uint32_t DDPF_RGB = 0x40; +const uint32_t DDPF_LUMINANCE = 0x20000; +const uint32_t DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'); +const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); +const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); +const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); +const uint32_t DDSCAPS2_CUBEMAP = 0x200; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; +const uint32_t DDSCAPS2_CUBEMAP_ALL_FACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | + DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | + DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; +const uint32_t IW4_STREAM_PIXEL_SIZE_MASK = 0x3FFFFFF; +const uint32_t DEBUG_LINKED_IMAGE_LIMIT = 128; +const uint32_t DEBUG_STREAM_IMAGE_LIMIT = 128; +const uint32_t DEBUG_REPLACEMENT_FILE_LIMIT = 64; + +uint32_t g_debugLinkedImageCount = 0; +uint32_t g_debugStreamImageCount = 0; + +struct DDSHeader +{ + uint32_t magic; + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; + uint32_t mipMapCount; + uint32_t reserved1[11]; + struct + { + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t rgbBitCount; + uint32_t rBitMask; + uint32_t gBitMask; + uint32_t bBitMask; + uint32_t aBitMask; + } pixelFormat; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; +static_assert(sizeof(DDSHeader) == 128, ""); + +struct DDSImage +{ + DDSHeader header; + std::vector data; +}; + +void DebugLog(const char *format, ...) +{ + char buffer[1024]; + va_list args; + va_start(args, format); + _vsnprintf(buffer, sizeof(buffer), format, args); + va_end(args); + buffer[sizeof(buffer) - 1] = '\0'; + + DbgPrint("[codxe][IW4 TU6] image_loader: debug: %s", buffer); +} + +void PrintImageError(const char *format, ...) +{ + char buffer[1024]; + va_list args; + va_start(args, format); + _vsnprintf(buffer, sizeof(buffer), format, args); + va_end(args); + buffer[sizeof(buffer) - 1] = '\0'; + + DbgPrint("[codxe][IW4 TU6] image_loader: %s", buffer); + game::Com_Printf(0, "[codxe][IW4 TU6] image_loader: %s", buffer); +} + +void PrintImageInfo(const char *format, ...) +{ + char buffer[1024]; + va_list args; + va_start(args, format); + _vsnprintf(buffer, sizeof(buffer), format, args); + va_end(args); + buffer[sizeof(buffer) - 1] = '\0'; + + DbgPrint("[codxe][IW4 TU6] image_loader: %s", buffer); + game::Com_Printf(0, "[codxe][IW4 TU6] image_loader: %s", buffer); +} + +bool ImageFileExists(const std::string &path) +{ + const DWORD attributes = GetFileAttributesA(path.c_str()); + return attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY) == 0; +} + +std::string GetReplacementDirectory() +{ + return Config::GetModBasePath() + "\\images"; +} + +void DebugListReplacementFiles() +{ + const std::string replacementDirectory = GetReplacementDirectory(); + DebugLog("replacement directory='%s'\n", replacementDirectory.c_str()); + + const DWORD attributes = GetFileAttributesA(replacementDirectory.c_str()); + if (attributes == INVALID_FILE_ATTRIBUTES) + { + DebugLog("replacement directory missing/inaccessible error=0x%08X\n", GetLastError()); + return; + } + + if ((attributes & FILE_ATTRIBUTE_DIRECTORY) == 0) + { + DebugLog("replacement path exists but is not a directory\n"); + return; + } + + WIN32_FIND_DATAA findData; + const std::string searchPath = replacementDirectory + "\\*.dds"; + HANDLE findHandle = FindFirstFileA(searchPath.c_str(), &findData); + if (findHandle == INVALID_HANDLE_VALUE) + { + DebugLog("no replacement DDS files matched '%s' error=0x%08X\n", searchPath.c_str(), GetLastError()); + return; + } + + uint32_t replacementFileCount = 0; + do + { + if ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) + { + if (replacementFileCount < DEBUG_REPLACEMENT_FILE_LIMIT) + DebugLog("replacement file[%u]='%s'\n", replacementFileCount, findData.cFileName); + replacementFileCount++; + } + } while (FindNextFileA(findHandle, &findData) != 0); + + FindClose(findHandle); + DebugLog("replacement file count=%u\n", replacementFileCount); +} + +void SwapDDSHeaderEndian(DDSHeader &header) +{ + header.magic = _byteswap_ulong(header.magic); + header.size = _byteswap_ulong(header.size); + header.flags = _byteswap_ulong(header.flags); + header.height = _byteswap_ulong(header.height); + header.width = _byteswap_ulong(header.width); + header.pitchOrLinearSize = _byteswap_ulong(header.pitchOrLinearSize); + header.depth = _byteswap_ulong(header.depth); + header.mipMapCount = _byteswap_ulong(header.mipMapCount); + + for (int i = 0; i < 11; i++) + header.reserved1[i] = _byteswap_ulong(header.reserved1[i]); + + header.pixelFormat.size = _byteswap_ulong(header.pixelFormat.size); + header.pixelFormat.flags = _byteswap_ulong(header.pixelFormat.flags); + header.pixelFormat.fourCC = _byteswap_ulong(header.pixelFormat.fourCC); + header.pixelFormat.rgbBitCount = _byteswap_ulong(header.pixelFormat.rgbBitCount); + header.pixelFormat.rBitMask = _byteswap_ulong(header.pixelFormat.rBitMask); + header.pixelFormat.gBitMask = _byteswap_ulong(header.pixelFormat.gBitMask); + header.pixelFormat.bBitMask = _byteswap_ulong(header.pixelFormat.bBitMask); + header.pixelFormat.aBitMask = _byteswap_ulong(header.pixelFormat.aBitMask); + + header.caps = _byteswap_ulong(header.caps); + header.caps2 = _byteswap_ulong(header.caps2); + header.caps3 = _byteswap_ulong(header.caps3); + header.caps4 = _byteswap_ulong(header.caps4); + header.reserved2 = _byteswap_ulong(header.reserved2); +} + +DDSImage ReadDDSFile(const std::string &filepath) +{ + DDSImage ddsImage; + std::ifstream file(filepath.c_str(), std::ios::binary); + + if (!file.is_open()) + return ddsImage; + + file.read(reinterpret_cast(&ddsImage.header), sizeof(DDSHeader)); + if (!file || file.gcount() != sizeof(DDSHeader)) + return DDSImage(); + + if (_byteswap_ulong(ddsImage.header.magic) != DDS_MAGIC) + return DDSImage(); + + SwapDDSHeaderEndian(ddsImage.header); + + file.seekg(0, std::ios::end); + const std::streampos fileSize = file.tellg(); + if (fileSize == std::streampos(-1)) + return DDSImage(); + + file.seekg(sizeof(DDSHeader), std::ios::beg); + const size_t dataSize = static_cast(fileSize) - sizeof(DDSHeader); + ddsImage.data.resize(dataSize); + + if (dataSize > 0) + { + file.read(reinterpret_cast(&ddsImage.data[0]), dataSize); + if (!file || static_cast(file.gcount()) != dataSize) + return DDSImage(); + } + + return ddsImage; +} + +std::string GetReplacementPath(const char *imageName) +{ + return GetReplacementDirectory() + "\\" + imageName + ".dds"; +} + +bool DDSIsCubemap(const DDSImage &ddsImage) +{ + return (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP) != 0 || + (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; +} + +uint32_t GetDDSMipCount(const DDSImage &ddsImage) +{ + return max(1u, ddsImage.header.mipMapCount); +} + +uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel) +{ + return max(1u, dimension >> mipLevel); +} + +bool GetDDSFormat(const DDSImage &ddsImage, GPUTEXTUREFORMAT *format) +{ + const DDSHeader &header = ddsImage.header; + + if ((header.pixelFormat.flags & DDPF_FOURCC) != 0) + { + switch (header.pixelFormat.fourCC) + { + case DXT1_FOURCC: + *format = GPUTEXTUREFORMAT_DXT1; + return true; + case DXT3_FOURCC: + *format = GPUTEXTUREFORMAT_DXT2_3; + return true; + case DXT5_FOURCC: + *format = GPUTEXTUREFORMAT_DXT4_5; + return true; + case DXN_FOURCC: + *format = GPUTEXTUREFORMAT_DXN; + return true; + default: + return false; + } + } + + if ((header.pixelFormat.flags & DDPF_LUMINANCE) != 0) + { + if (header.pixelFormat.rgbBitCount == 8 && header.pixelFormat.rBitMask == 0x000000FF) + { + *format = GPUTEXTUREFORMAT_8; + return true; + } + + if ((header.pixelFormat.flags & DDPF_ALPHAPIXELS) != 0 && header.pixelFormat.rgbBitCount == 16 && + header.pixelFormat.rBitMask == 0x000000FF && header.pixelFormat.gBitMask == 0x0000FF00) + { + *format = GPUTEXTUREFORMAT_8_8; + return true; + } + } + + if ((header.pixelFormat.flags & DDPF_RGB) != 0 && (header.pixelFormat.flags & DDPF_ALPHAPIXELS) != 0 && + header.pixelFormat.rgbBitCount == 32 && header.pixelFormat.rBitMask == 0x00FF0000 && + header.pixelFormat.gBitMask == 0x0000FF00 && header.pixelFormat.bBitMask == 0x000000FF && + header.pixelFormat.aBitMask == 0xFF000000) + { + *format = GPUTEXTUREFORMAT_8_8_8_8; + return true; + } + + return false; +} + +bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, const std::string &path, + GPUTEXTUREFORMAT *ddsFormat) +{ + if (ddsImage.data.empty()) + { + PrintImageError("failed to load DDS for image '%s': %s\n", image->name, path.c_str()); + return false; + } + + if (ddsImage.header.size != DDS_HEADER_SIZE || ddsImage.header.pixelFormat.size != DDS_PIXEL_FORMAT_SIZE) + { + PrintImageError("image '%s' has an invalid DDS header: size=%u pixelFormatSize=%u\n", image->name, + ddsImage.header.size, ddsImage.header.pixelFormat.size); + return false; + } + + if (!GetDDSFormat(ddsImage, ddsFormat)) + { + PrintImageError("image '%s' has an unsupported DDS format: flags=0x%X fourCC=0x%X bitCount=%u\n", image->name, + ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC, + ddsImage.header.pixelFormat.rgbBitCount); + return false; + } + + const uint32_t imageFormat = image->texture.basemap.Format.DataFormat; + if (imageFormat != static_cast(*ddsFormat)) + { + PrintImageError("image '%s' format does not match DDS: expected=%u got=%u\n", image->name, imageFormat, + static_cast(*ddsFormat)); + return false; + } + + return true; +} + +size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, + uint32_t levelCount, uint32_t faceCount) +{ + size_t requiredSize = 0; + + for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) + { + const uint32_t mipLevel = firstMipLevel + localMipLevel; + const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); + if (levelSize == 0) + return 0; + + requiredSize += static_cast(levelSize) * faceCount; + } + + return requiredSize; +} + +uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t mipLevel) +{ + uint32_t offset = 0; + + for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) + { + const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); + if (levelSize == 0) + return 0; + + offset += levelSize; + } + + return offset; +} + +size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, + uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) +{ + size_t requiredSize = 0; + + for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) + { + const uint32_t levelSize = xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); + if (levelSize == 0) + return 0; + + requiredSize += static_cast(levelSize) * faceCount; + } + + return requiredSize; +} + +bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) +{ + *requiredDDSSize = + CalculateRequiredLinearDataSize(image->width, image->height, format, 0u, replacementLevelCount, 1u); + if (*requiredDDSSize == 0) + return false; + + if (ddsImage.data.size() < *requiredDDSSize) + return false; + + const D3DBaseTexture *texture = &image->texture.basemap; + const uint32_t baseSize = xenos_texture::CalculateBaseSize(texture, image->width, image->height, 1u); + const size_t mipBytes = + CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); + + *requiredTextureBytes = static_cast(baseSize) + mipBytes; + const int cardMemory = image->cardMemory.platform[0]; + if (cardMemory > 0 && *requiredTextureBytes > static_cast(cardMemory)) + return false; + + return true; +} + +bool ValidateResidentMipCount(const game::GfxImage *image, const DDSImage &ddsImage, uint32_t textureLevelCount) +{ + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + if (ddsMipCount != textureLevelCount) + { + PrintImageError("image '%s' mip count does not match DDS: image=%u dds=%u\n", image->name, textureLevelCount, + ddsMipCount); + return false; + } + + return true; +} + +bool ValidateDDSDataSize(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t mipCount, uint32_t faceCount) +{ + const size_t expectedSize = + CalculateRequiredLinearDataSize(ddsImage.header.width, ddsImage.header.height, format, 0u, mipCount, faceCount); + if (expectedSize == 0) + { + PrintImageError("image '%s' has unsupported DDS dimensions or format\n", image->name); + return false; + } + + if (ddsImage.data.size() != expectedSize) + { + PrintImageError("image '%s' DDS data size does not match shape: have=%u expected=%u mips=%u faces=%u\n", + image->name, static_cast(ddsImage.data.size()), + static_cast(expectedSize), mipCount, faceCount); + return false; + } + + return true; +} + +bool ValidateCubeReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t faceSize, uint32_t tiledBaseSize, size_t *requiredDDSSize) +{ + *requiredDDSSize = static_cast(faceSize) * 6u; + if (faceSize == 0 || *requiredDDSSize == 0) + return false; + + if (ddsImage.data.size() != *requiredDDSSize) + return false; + + const int cardMemory = image->cardMemory.platform[0]; + if (cardMemory > 0 && static_cast(tiledBaseSize) > static_cast(cardMemory)) + return false; + + return true; +} + +bool ImageHasStreamedParts(const game::GfxImage *image) +{ + if (image->streaming) + return true; + + for (uint32_t imagePartIndex = 0; imagePartIndex < 4u; ++imagePartIndex) + { + if ((image->streams[imagePartIndex].pixelSize & IW4_STREAM_PIXEL_SIZE_MASK) != 0) + return true; + } + + return false; +} + +void DebugLogImageState(const char *source, const game::GfxImage *image, bool replacementExists, + const std::string &replacementPath) +{ + if (image == NULL) + return; + + DebugLog("%s image='%s' replacement=%u path='%s' mapType=%u size=%ux%u depth=%u levels=%u streaming=%u pixels=%p " + "card=%d streamPixels=[0x%08X,0x%08X,0x%08X,0x%08X]\n", + source, image->name != NULL ? image->name : "", replacementExists ? 1u : 0u, replacementPath.c_str(), + static_cast(image->mapType), static_cast(image->width), + static_cast(image->height), static_cast(image->depth), + static_cast(image->levelCount), image->streaming ? 1u : 0u, image->pixels, + image->cardMemory.platform[0], image->streams[0].pixelSize, image->streams[1].pixelSize, + image->streams[2].pixelSize, image->streams[3].pixelSize); +} + +bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) +{ + if (image->mapType != game::MAPTYPE_2D) + { + PrintImageError("image '%s' is not a 2D map\n", image->name); + return false; + } + + const D3DBaseTexture *texture = &image->texture.basemap; + const GPUTEXTUREFORMAT format = static_cast(texture->Format.DataFormat); + const uint32_t levelCount = xenos_texture::GetTextureLevelCount(texture); + const uint32_t mipTailBaseLevel = + texture->Format.PackedMips != 0 ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; + if (!ValidateResidentMipCount(image, ddsImage, levelCount)) + return false; + if (!ValidateDDSDataSize(image, ddsImage, format, levelCount, 1u)) + return false; + + const uint32_t nonPackedLevelCount = max(1u, min(levelCount, mipTailBaseLevel)); + unsigned char *baseData = xenos_texture::GetTextureBase(texture, image->pixels); + unsigned char *mipData = + xenos_texture::GetTextureMipBase(texture, baseData, image->width, image->height, format, 1u); + + size_t requiredDDSSize = 0; + size_t requiredTextureBytes = 0; + if (!Validate2DReplacementData(image, ddsImage, format, nonPackedLevelCount, &requiredDDSSize, + &requiredTextureBytes)) + { + if (requiredDDSSize == 0) + { + PrintImageError("image '%s' has unsupported replacement format %u\n", image->name, + static_cast(format)); + } + else if (ddsImage.data.size() < requiredDDSSize) + { + PrintImageError("image '%s' DDS data is too small: have=%u need=%u for %u mip levels\n", image->name, + static_cast(ddsImage.data.size()), static_cast(requiredDDSSize), + nonPackedLevelCount); + } + else + { + PrintImageError("image '%s' replacement exceeds texture memory: have=%u need=%u\n", image->name, + static_cast(image->cardMemory.platform[0]), + static_cast(requiredTextureBytes)); + } + + return false; + } + + if (baseData == NULL || mipData == NULL) + { + PrintImageError("image '%s' has no valid texture memory\n", image->name); + return false; + } + + uint32_t ddsOffset = 0; + + for (uint32_t mipLevel = 0; mipLevel < nonPackedLevelCount; ++mipLevel) + { + const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, mipLevel, format); + const uint32_t ddsMipLevelSize = + xenos_texture::CalculateLinearLevelSize(image->width, image->height, mipLevel, format); + const uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize(image->width, image->height, mipLevel, + format, texture->Format.Pitch); + + if (ddsMipLevelSize == 0 || tiledMipLevelSize == 0 || rowPitch == 0) + { + PrintImageError("unsupported format %u for image '%s' mip level %u\n", texture->Format.DataFormat, + image->name, mipLevel); + return false; + } + + if (static_cast(ddsOffset) + ddsMipLevelSize > ddsImage.data.size()) + { + PrintImageError("image '%s' mip level %u exceeds DDS data size\n", image->name, mipLevel); + return false; + } + + std::vector levelData(ddsImage.data.begin() + ddsOffset, + ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); + xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), static_cast(texture->Format.Endian)); + + unsigned char *destination = baseData; + if (mipLevel > 0) + { + destination = + mipData + xenos_texture::CalculateMipLevelOffset(image->width, image->height, mipLevel, format, 1u); + } + + std::vector tiledData(tiledMipLevelSize); + if (!xenos_texture::TileTextureLevel(image->width, image->height, mipLevel, format, texture->Format.Pitch, + &tiledData[0], tiledData.size(), &levelData[0], levelData.size(), + rowPitch)) + { + PrintImageError("failed to tile image '%s' mip level %u\n", image->name, mipLevel); + return false; + } + + memcpy(destination, &tiledData[0], tiledMipLevelSize); + ddsOffset += ddsMipLevelSize; + } + + return true; +} + +bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) +{ + if (image->mapType != game::MAPTYPE_CUBE) + { + PrintImageError("image '%s' is not a cube map\n", image->name); + return false; + } + + const D3DBaseTexture *texture = &image->texture.basemap; + const GPUTEXTUREFORMAT format = static_cast(texture->Format.DataFormat); + const uint32_t levelCount = xenos_texture::GetTextureLevelCount(texture); + const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); + const uint32_t tiledFaceSize = + xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, format, texture->Format.Pitch); + const uint32_t tiledBaseSize = xenos_texture::CalculateBaseSize(texture, image->width, image->height, 6u); + unsigned char *baseData = xenos_texture::GetTextureBase(texture, image->pixels); + + if (faceSize == 0 || rowPitch == 0 || tiledFaceSize == 0 || tiledBaseSize < tiledFaceSize * 6u) + { + PrintImageError("image '%s' has unsupported cube format %u\n", image->name, static_cast(format)); + return false; + } + + if (baseData == NULL) + { + PrintImageError("image '%s' has no valid cube texture memory\n", image->name); + return false; + } + + if (levelCount != 1u || GetDDSMipCount(ddsImage) != 1u) + { + PrintImageError("image '%s' cube replacement must be base-level only: imageMips=%u ddsMips=%u\n", image->name, + levelCount, GetDDSMipCount(ddsImage)); + return false; + } + + if (!ValidateDDSDataSize(image, ddsImage, format, 1u, 6u)) + return false; + + size_t requiredDDSSize = 0; + if (!ValidateCubeReplacementData(image, ddsImage, format, faceSize, tiledBaseSize, &requiredDDSSize)) + { + if (ddsImage.data.size() < requiredDDSSize) + { + PrintImageError("image '%s' DDS is too small for 6 cube faces: have=%u need=%u\n", image->name, + static_cast(ddsImage.data.size()), + static_cast(requiredDDSSize)); + } + else + { + PrintImageError("image '%s' cube replacement exceeds texture memory: have=%u need=%u\n", image->name, + static_cast(image->cardMemory.platform[0]), tiledBaseSize); + } + + return false; + } + + for (uint32_t faceIndex = 0; faceIndex < 6u; ++faceIndex) + { + const unsigned char *facePixels = &ddsImage.data[faceIndex * faceSize]; + unsigned char *faceDestination = baseData + (faceIndex * tiledFaceSize); + std::vector tiledData(tiledFaceSize); + + if (!xenos_texture::TileTextureLevel(image->width, image->height, 0u, format, texture->Format.Pitch, + &tiledData[0], tiledData.size(), facePixels, faceSize, rowPitch)) + { + PrintImageError("failed to tile cube image '%s' face %u\n", image->name, faceIndex); + return false; + } + + xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), static_cast(texture->Format.Endian)); + memcpy(faceDestination, &tiledData[0], tiledFaceSize); + } + + return true; +} + +bool ValidateReplacementShape(const game::GfxImage *image, const DDSImage &ddsImage) +{ + const bool ddsIsCubemap = DDSIsCubemap(ddsImage); + + if (image->mapType == game::MAPTYPE_2D && ddsIsCubemap) + { + PrintImageError("image '%s' is 2D but replacement DDS is a cubemap\n", image->name); + return false; + } + + if (image->mapType == game::MAPTYPE_CUBE && !ddsIsCubemap) + { + GPUTEXTUREFORMAT ddsFormat; + if (!GetDDSFormat(ddsImage, &ddsFormat)) + return false; + + const uint32_t faceSize = + xenos_texture::CalculateLinearLevelSize(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat); + if (faceSize == 0 || ddsImage.data.size() < static_cast(faceSize) * 6u) + { + PrintImageError("image '%s' is a cubemap but replacement DDS is not a valid 6-face cubemap\n", image->name); + return false; + } + } + + return true; +} + +void Image_Replace(game::GfxImage *image) +{ + if (image == NULL || image->name == NULL) + return; + + const std::string replacementPath = GetReplacementPath(image->name); + const bool replacementExists = ImageFileExists(replacementPath); + if (!replacementExists) + return; + + DebugLogImageState("resident candidate", image, replacementExists, replacementPath); + + if (ImageHasStreamedParts(image)) + { + PrintImageInfo("found streamed replacement for image '%s'; waiting for streamed data\n", image->name); + return; + } + + if (image->pixels == NULL || image->cardMemory.platform[0] <= 0) + { + PrintImageError("image '%s' replacement exists but resident texture memory is not available\n", image->name); + return; + } + + DDSImage ddsImage = ReadDDSFile(replacementPath); + GPUTEXTUREFORMAT ddsFormat; + if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) + return; + + if (image->width != ddsImage.header.width || image->height != ddsImage.header.height) + { + PrintImageError("image '%s' dimensions do not match DDS: image=%ux%u dds=%ux%u\n", image->name, image->width, + image->height, ddsImage.header.width, ddsImage.header.height); + return; + } + + if (!ValidateReplacementShape(image, ddsImage)) + return; + + bool replaced = false; + if (image->mapType == game::MAPTYPE_2D) + replaced = Image_Replace_2D(image, ddsImage); + else if (image->mapType == game::MAPTYPE_CUBE) + replaced = Image_Replace_Cube(image, ddsImage); + else + PrintImageError("image '%s' is not a 2D or cube map\n", image->name); + + if (replaced) + PrintImageInfo("replaced image '%s' (resident)\n", image->name); +} + +bool FindMipLevelForDimensions(const DDSImage &ddsImage, uint32_t width, uint32_t height, uint32_t *mipLevel) +{ + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + + for (uint32_t currentMip = 0; currentMip < ddsMipCount; ++currentMip) + { + if (GetMipDimension(ddsImage.header.width, currentMip) == width && + GetMipDimension(ddsImage.header.height, currentMip) == height) + { + *mipLevel = currentMip; + return true; + } + } + + return false; +} + +bool ValidateStreamReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t startMipLevel, uint32_t levelCount, uint32_t basePitch, + size_t *requiredDDSSize, size_t *requiredTextureBytes) +{ + *requiredDDSSize = CalculateRequiredLinearDataSize(ddsImage.header.width, ddsImage.header.height, format, + startMipLevel, levelCount, 1u); + if (*requiredDDSSize == 0) + return false; + + const uint32_t ddsOffset = + CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, startMipLevel); + if (static_cast(ddsOffset) + *requiredDDSSize > ddsImage.data.size()) + return false; + + *requiredTextureBytes = 0; + for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) + { + const uint32_t levelSize = + xenos_texture::CalculateTiledLevelSize(image->width, image->height, localMipLevel, format, basePitch); + if (levelSize == 0) + return false; + + *requiredTextureBytes += levelSize; + } + + const int cardMemory = image->cardMemory.platform[0]; + if (cardMemory <= 0 || *requiredTextureBytes > static_cast(cardMemory)) + return false; + + return true; +} + +bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT ddsFormat, + uint32_t imagePartIndex) +{ + if (imagePartIndex != 0u) + { + PrintImageError("streamed cube image '%s' has unsupported part %u\n", image->name, imagePartIndex); + return false; + } + + if (image->width != ddsImage.header.width || image->height != ddsImage.header.height) + { + PrintImageError("streamed cube image '%s' dimensions do not match DDS: image=%ux%u dds=%ux%u\n", image->name, + image->width, image->height, ddsImage.header.width, ddsImage.header.height); + return false; + } + + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + if (image->levelCount != 1u || ddsMipCount != 1u) + { + PrintImageError("streamed cube image '%s' must be base-level only: imageMips=%u ddsMips=%u\n", image->name, + static_cast(image->levelCount), ddsMipCount); + return false; + } + + if (!ValidateDDSDataSize(image, ddsImage, ddsFormat, 1u, 6u)) + return false; + + const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, 0u, ddsFormat); + const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, ddsFormat); + const uint32_t tiledFaceSize = + xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, ddsFormat, 0u); + const size_t requiredTextureBytes = static_cast(tiledFaceSize) * 6u; + + if (rowPitch == 0 || faceSize == 0 || tiledFaceSize == 0) + { + PrintImageError("streamed cube image '%s' has unsupported format %u\n", image->name, + static_cast(ddsFormat)); + return false; + } + + if (image->cardMemory.platform[0] <= 0 || requiredTextureBytes > static_cast(image->cardMemory.platform[0])) + { + PrintImageError("streamed cube image '%s' replacement exceeds texture memory: have=%u need=%u\n", image->name, + static_cast(image->cardMemory.platform[0]), + static_cast(requiredTextureBytes)); + return false; + } + + for (uint32_t faceIndex = 0; faceIndex < 6u; ++faceIndex) + { + const unsigned char *facePixels = &ddsImage.data[faceIndex * faceSize]; + std::vector tiledData(tiledFaceSize); + + if (!xenos_texture::TileTextureLevel(image->width, image->height, 0u, ddsFormat, 0u, &tiledData[0], + tiledData.size(), facePixels, faceSize, rowPitch)) + { + PrintImageError("failed to tile streamed cube image '%s' face %u\n", image->name, faceIndex); + return false; + } + + xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), + static_cast(image->texture.basemap.Format.Endian)); + memcpy(image->pixels + static_cast(faceIndex) * tiledFaceSize, &tiledData[0], tiledFaceSize); + } + + return true; +} + +bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, uint32_t imagePartIndex) +{ + if (image == NULL || image->name == NULL || imagePartIndex >= 4u) + return false; + + if (image->pixels == NULL) + { + PrintImageError("streamed image '%s' part %u replacement exists but pixel memory is not available\n", + image->name, imagePartIndex); + return false; + } + + GPUTEXTUREFORMAT ddsFormat; + const std::string replacementPath = GetReplacementPath(image->name); + if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) + return false; + + if (image->mapType == game::MAPTYPE_CUBE) + return Image_Replace_StreamCubePart(image, ddsImage, ddsFormat, imagePartIndex); + + if (image->mapType != game::MAPTYPE_2D) + { + PrintImageError("streamed image '%s' is not a supported 2D or cube map\n", image->name); + return false; + } + + if (DDSIsCubemap(ddsImage)) + { + PrintImageError("streamed image '%s' is 2D but replacement DDS is a cubemap\n", image->name); + return false; + } + + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + if (!ValidateDDSDataSize(image, ddsImage, ddsFormat, ddsMipCount, 1u)) + return false; + + uint32_t startMipLevel = 0; + if (!FindMipLevelForDimensions(ddsImage, image->width, image->height, &startMipLevel)) + { + PrintImageError("streamed image '%s' part %u dimensions do not exist in DDS: part=%ux%u dds=%ux%u\n", + image->name, imagePartIndex, image->width, image->height, ddsImage.header.width, + ddsImage.header.height); + return false; + } + + const game::GfxImageStreamData &streamData = image->streams[imagePartIndex]; + uint32_t levelCount = streamData.pixelSize >> 26; + if (levelCount == 0) + levelCount = max(1u, static_cast(image->levelCount)); + + const D3DBaseTexture *texture = &image->texture.basemap; + const uint32_t textureLevelCount = xenos_texture::GetTextureLevelCount(texture); + levelCount = max(1u, min(levelCount, textureLevelCount)); + + const uint32_t mipTailBaseLevel = + texture->Format.PackedMips != 0 ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; + const uint32_t replaceLevelCount = max(1u, min(levelCount, mipTailBaseLevel)); + + if (startMipLevel + replaceLevelCount > ddsMipCount) + { + PrintImageError("streamed image '%s' part %u needs %u DDS mips from mip %u, but DDS has %u\n", image->name, + imagePartIndex, replaceLevelCount, startMipLevel, ddsMipCount); + return false; + } + + size_t requiredDDSSize = 0; + size_t requiredTextureBytes = 0; + const uint32_t streamBasePitch = 0u; + if (!ValidateStreamReplacementData(image, ddsImage, ddsFormat, startMipLevel, replaceLevelCount, streamBasePitch, + &requiredDDSSize, &requiredTextureBytes)) + { + PrintImageError("streamed image '%s' part %u replacement size is invalid: ddsNeed=%u textureNeed=%u card=%u\n", + image->name, imagePartIndex, static_cast(requiredDDSSize), + static_cast(requiredTextureBytes), + static_cast(image->cardMemory.platform[0])); + return false; + } + + DebugLog("stream replacement image='%s' part=%u startMip=%u streamLevels=%u replaceLevels=%u packedMips=%u " + "texturePitch=%u streamPitch=%u format=%u endian=%u\n", + image->name, imagePartIndex, startMipLevel, levelCount, replaceLevelCount, + static_cast(texture->Format.PackedMips), static_cast(texture->Format.Pitch), + streamBasePitch, static_cast(texture->Format.DataFormat), + static_cast(texture->Format.Endian)); + + uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, ddsFormat, startMipLevel); + size_t destinationOffset = 0; + + for (uint32_t localMipLevel = 0; localMipLevel < replaceLevelCount; ++localMipLevel) + { + const uint32_t globalMipLevel = startMipLevel + localMipLevel; + const uint32_t rowPitch = + xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, globalMipLevel, ddsFormat); + const uint32_t ddsMipLevelSize = xenos_texture::CalculateLinearLevelSize( + ddsImage.header.width, ddsImage.header.height, globalMipLevel, ddsFormat); + const uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize( + image->width, image->height, localMipLevel, ddsFormat, streamBasePitch); + + if (rowPitch == 0 || ddsMipLevelSize == 0 || tiledMipLevelSize == 0) + { + PrintImageError("streamed image '%s' part %u has unsupported format %u at mip %u\n", image->name, + imagePartIndex, static_cast(ddsFormat), localMipLevel); + return false; + } + + if (static_cast(ddsOffset) + ddsMipLevelSize > ddsImage.data.size() || + destinationOffset + tiledMipLevelSize > static_cast(image->cardMemory.platform[0])) + { + PrintImageError("streamed image '%s' part %u mip %u exceeds source or destination bounds\n", image->name, + imagePartIndex, localMipLevel); + return false; + } + + std::vector levelData(ddsImage.data.begin() + ddsOffset, + ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); + xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), + static_cast(image->texture.basemap.Format.Endian)); + + std::vector tiledData(tiledMipLevelSize); + if (!xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, ddsFormat, streamBasePitch, + &tiledData[0], tiledData.size(), &levelData[0], levelData.size(), + rowPitch)) + { + PrintImageError("failed to tile streamed image '%s' part %u mip %u\n", image->name, imagePartIndex, + localMipLevel); + return false; + } + + memcpy(image->pixels + destinationOffset, &tiledData[0], tiledMipLevelSize); + ddsOffset += ddsMipLevelSize; + destinationOffset += tiledMipLevelSize; + } + + return true; +} + +void TryReplaceStreamPart(game::GfxImage *image, uint32_t imagePartIndex) +{ + if (image == NULL || image->name == NULL) + return; + + const std::string replacementPath = GetReplacementPath(image->name); + const bool replacementExists = ImageFileExists(replacementPath); + if (g_debugStreamImageCount < DEBUG_STREAM_IMAGE_LIMIT || replacementExists || imagePartIndex >= 4u) + { + DebugLog("ImageCache_InitImage image='%s' part=%u replacement=%u path='%s' mapType=%u size=%ux%u levels=%u " + "streaming=%u pixels=%p card=%d streamPixelSize=0x%08X\n", + image->name, imagePartIndex, replacementExists ? 1u : 0u, replacementPath.c_str(), + static_cast(image->mapType), static_cast(image->width), + static_cast(image->height), static_cast(image->levelCount), + image->streaming ? 1u : 0u, image->pixels, image->cardMemory.platform[0], + imagePartIndex < 4u ? image->streams[imagePartIndex].pixelSize : 0u); + } + g_debugStreamImageCount++; + + if (imagePartIndex >= 4u) + return; + + if (!replacementExists) + return; + + const DDSImage ddsImage = ReadDDSFile(replacementPath); + if (Image_Replace_StreamPart(image, ddsImage, imagePartIndex)) + PrintImageInfo("replaced image '%s' (streamed part %u)\n", image->name, imagePartIndex); +} + +void OnDBLinkXAssetPre(game::XAssetType &type, game::XAssetHeader *header) +{ + if (type == game::ASSET_TYPE_IMAGE && header != NULL) + { + game::GfxImage *image = header->image; + if (image != NULL && image->name != NULL) + { + const std::string replacementPath = GetReplacementPath(image->name); + const bool replacementExists = ImageFileExists(replacementPath); + if (g_debugLinkedImageCount < DEBUG_LINKED_IMAGE_LIMIT || replacementExists) + DebugLogImageState("DB_LinkXAssetPre", image, replacementExists, replacementPath); + g_debugLinkedImageCount++; + } + + Image_Replace(header->image); + } +} + +Detour ImageCache_InitImage_Detour; + +void ImageCache_InitImage_Hook(game::GfxImage *image, game::GfxImage *remoteImage, unsigned __int8 *pixels, + unsigned int imagePartIndex) +{ + ImageCache_InitImage_Detour.GetOriginal()(image, remoteImage, pixels, imagePartIndex); + TryReplaceStreamPart(image, imagePartIndex); +} +} // namespace + +image_loader::image_loader() +{ + DebugLog("construct activeMod='%s' modBase='%s'\n", Config::active_mod.c_str(), Config::GetModBasePath().c_str()); + DebugListReplacementFiles(); + + Events::OnDBLinkXAssetPre(OnDBLinkXAssetPre); + DebugLog("registered DB_LinkXAssetPre image callback\n"); + + ImageCache_InitImage_Detour = Detour(iw4::mp_tu6::ImageCache_InitImage, ImageCache_InitImage_Hook); + ImageCache_InitImage_Detour.Install(); + DebugLog("installed ImageCache_InitImage detour target=%p\n", iw4::mp_tu6::ImageCache_InitImage); +} + +image_loader::~image_loader() +{ + ImageCache_InitImage_Detour.Remove(); +} diff --git a/src/game/iw4/mp_tu6/components/image_loader.h b/src/game/iw4/mp_tu6/components/image_loader.h new file mode 100644 index 00000000..b78ef026 --- /dev/null +++ b/src/game/iw4/mp_tu6/components/image_loader.h @@ -0,0 +1,15 @@ +#pragma once + +#include "pch.h" + +class image_loader : public Module +{ + public: + image_loader(); + ~image_loader(); + + const char *get_name() override + { + return "image_loader"; + }; +}; diff --git a/src/game/iw4/mp_tu6/components/mpsp.cpp b/src/game/iw4/mp_tu6/components/mpsp.cpp index bca57864..0745356c 100644 --- a/src/game/iw4/mp_tu6/components/mpsp.cpp +++ b/src/game/iw4/mp_tu6/components/mpsp.cpp @@ -2,6 +2,7 @@ #include "pch.h" #include "mpsp.h" +#include "events.h" #include "unordered_map" namespace iw4 @@ -384,8 +385,7 @@ void override_(RawFile *asset) } // namespace Asset -Detour DB_LinkXAssetEntry1_Detour; -XAssetEntryPoolEntry *DB_LinkXAssetEntry1_Hook(XAssetType type, XAssetHeader *header) +void OnDBLinkXAssetPre(XAssetType &type, XAssetHeader *header) { XAsset xasset; xasset.type = type; @@ -453,10 +453,6 @@ XAssetEntryPoolEntry *DB_LinkXAssetEntry1_Hook(XAssetType type, XAssetHeader *he DB_SetXAssetName(&xasset, ",CGAME_UNKNOWN"); } } - - XAssetEntryPoolEntry *entry = DB_LinkXAssetEntry1_Detour.GetOriginal()(type, header); - - return entry; } void DB_ReallocXAssetPool(XAssetType type, unsigned int newSize) @@ -535,8 +531,7 @@ mpsp::mpsp() #endif // Modify some assets before linking - DB_LinkXAssetEntry1_Detour = Detour(DB_LinkXAssetEntry1, DB_LinkXAssetEntry1_Hook); - DB_LinkXAssetEntry1_Detour.Install(); + ::Events::OnDBLinkXAssetPre(OnDBLinkXAssetPre); // Rewrite some strings on the fly Com_sprintf_Detour = Detour(Com_sprintf, Com_sprintf_Hook); @@ -550,8 +545,6 @@ mpsp::~mpsp() CL_ConsolePrint_Detour.Remove(); #endif - DB_LinkXAssetEntry1_Detour.Remove(); - Com_sprintf_Detour.Remove(); } diff --git a/src/game/iw4/mp_tu6/main.cpp b/src/game/iw4/mp_tu6/main.cpp index 5cca6963..d33a4ca9 100644 --- a/src/game/iw4/mp_tu6/main.cpp +++ b/src/game/iw4/mp_tu6/main.cpp @@ -6,6 +6,7 @@ #include "components/events.h" #include "components/g_client_fields.h" #include "components/g_scr_main.h" +#include "components/image_loader.h" #include "components/mpsp.h" #include "components/mr.h" #include "components/patches.h" @@ -30,6 +31,7 @@ IW4_MP_TU6_Plugin::IW4_MP_TU6_Plugin() RegisterModule(new console()); RegisterModule(new g_client_fields()); RegisterModule(new g_scr_main()); + RegisterModule(new image_loader()); RegisterModule(new mpsp()); RegisterModule(new MovementRecorder()); RegisterModule(new patches()); diff --git a/src/game/iw4/mp_tu6/structs.h b/src/game/iw4/mp_tu6/structs.h index 244b66c8..86cb9509 100644 --- a/src/game/iw4/mp_tu6/structs.h +++ b/src/game/iw4/mp_tu6/structs.h @@ -1807,6 +1807,70 @@ enum XAssetType : __int32 ASSET_TYPE_ASSETLIST = 0x2A, }; +enum MapType : unsigned __int8 +{ + MAPTYPE_NONE = 0x0, + MAPTYPE_INVALID1 = 0x1, + MAPTYPE_1D = 0x2, + MAPTYPE_2D = 0x3, + MAPTYPE_3D = 0x4, + MAPTYPE_CUBE = 0x5, + MAPTYPE_COUNT = 0x6, +}; + +struct Picmip +{ + unsigned __int8 platform[2]; +}; + +struct CardMemory +{ + int platform[1]; +}; + +struct GfxTexture +{ + D3DBaseTexture basemap; +}; +static_assert(sizeof(GfxTexture) == 0x34, ""); + +struct GfxImageStreamData +{ + unsigned __int16 width; + unsigned __int16 height; + unsigned int pixelSize; +}; +static_assert(sizeof(GfxImageStreamData) == 0x8, ""); + +struct GfxImage +{ + GfxTexture texture; + unsigned __int8 semantic; + unsigned __int8 category; + bool cached; + unsigned __int8 flags; + MapType mapType; + Picmip picmip; + bool noPicmip; + CardMemory cardMemory; + unsigned __int16 width; + unsigned __int16 height; + unsigned __int16 depth; + unsigned __int8 levelCount; + bool streaming; + unsigned __int8 *pixels; + GfxImageStreamData streams[4]; + const char *name; +}; +static_assert(sizeof(GfxImage) == 0x70, ""); +static_assert(offsetof(GfxImage, texture) == 0x0, ""); +static_assert(offsetof(GfxImage, mapType) == 0x38, ""); +static_assert(offsetof(GfxImage, cardMemory) == 0x3C, ""); +static_assert(offsetof(GfxImage, width) == 0x40, ""); +static_assert(offsetof(GfxImage, pixels) == 0x48, ""); +static_assert(offsetof(GfxImage, streams) == 0x4C, ""); +static_assert(offsetof(GfxImage, name) == 0x6C, ""); + struct cplane_s; struct cStaticModel_s; struct ClipMaterial @@ -2007,6 +2071,7 @@ static_assert(offsetof(StringTable, values) == 0xC, ""); union XAssetHeader { + GfxImage *image; clipMap_t *clipMap; GameWorldSp *gameWorldSp; GameWorldMp *gameWorldMp; diff --git a/src/game/iw4/mp_tu6/symbols.h b/src/game/iw4/mp_tu6/symbols.h index ee6e7c7d..467dd31c 100644 --- a/src/game/iw4/mp_tu6/symbols.h +++ b/src/game/iw4/mp_tu6/symbols.h @@ -146,6 +146,10 @@ static Key_SetCatcher_t Key_SetCatcher = reinterpret_cast(0x82 typedef Material *(*Material_RegisterHandle_t)(const char *name); static Material_RegisterHandle_t Material_RegisterHandle = reinterpret_cast(0x823C2FF8); +typedef void (*ImageCache_InitImage_t)(GfxImage *image, GfxImage *remoteImage, unsigned __int8 *pixels, + unsigned int imagePartIndex); +static ImageCache_InitImage_t ImageCache_InitImage = reinterpret_cast(0x823DE448); + static auto R_CheckDvarModified = reinterpret_cast(0x823DDD78); typedef void (*R_AddCmdDrawStretchPic_t)(float x, float y, float w, float h, float s0, float t0, float s1, float t1, From 57e8d1f3774dff071b6ab41b20a0c49ee09abd84 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 07:39:39 +0100 Subject: [PATCH 04/20] feat: T4 raw image loader --- codxe.vcxproj | 2 + src/game/t4/mp/components/image_loader.cpp | 804 +++++++++++++++++++++ src/game/t4/mp/components/image_loader.h | 21 + src/game/t4/mp/main.cpp | 2 + src/game/t4/mp/symbols.h | 18 + 5 files changed, 847 insertions(+) create mode 100644 src/game/t4/mp/components/image_loader.cpp create mode 100644 src/game/t4/mp/components/image_loader.h diff --git a/codxe.vcxproj b/codxe.vcxproj index 5f87e5f6..b6c187ed 100644 --- a/codxe.vcxproj +++ b/codxe.vcxproj @@ -161,6 +161,7 @@ + @@ -287,6 +288,7 @@ + diff --git a/src/game/t4/mp/components/image_loader.cpp b/src/game/t4/mp/components/image_loader.cpp new file mode 100644 index 00000000..0e1582e2 --- /dev/null +++ b/src/game/t4/mp/components/image_loader.cpp @@ -0,0 +1,804 @@ +#include "pch.h" +#include "common/config.h" +#include "image_loader.h" +#include "xenos_texture.h" + +namespace +{ +namespace game = t4::mp; + +const int CON_CHANNEL_ERROR = 1; +const int CON_CHANNEL_CONSOLEONLY = 7; + +const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); +const uint32_t DDS_HEADER_SIZE = 124; +const uint32_t DDS_PIXEL_FORMAT_SIZE = 32; +const uint32_t DDPF_FOURCC = 0x4; + +const uint32_t DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'); +const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); +const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); +const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); + +const uint32_t DDSCAPS2_CUBEMAP = 0x200; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; +const uint32_t DDSCAPS2_CUBEMAP_ALL_FACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | + DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | + DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; + +std::set g_streamedImageReplacements; + +struct DDSHeader +{ + uint32_t magic; + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; + uint32_t mipMapCount; + uint32_t reserved1[11]; + struct + { + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t rgbBitCount; + uint32_t rBitMask; + uint32_t gBitMask; + uint32_t bBitMask; + uint32_t aBitMask; + } pixelFormat; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; +static_assert(sizeof(DDSHeader) == 128, ""); + +struct DDSImage +{ + DDSHeader header; + std::vector data; +}; + +void SwapDDSHeaderEndian(DDSHeader &header) +{ + header.magic = _byteswap_ulong(header.magic); + header.size = _byteswap_ulong(header.size); + header.flags = _byteswap_ulong(header.flags); + header.height = _byteswap_ulong(header.height); + header.width = _byteswap_ulong(header.width); + header.pitchOrLinearSize = _byteswap_ulong(header.pitchOrLinearSize); + header.depth = _byteswap_ulong(header.depth); + header.mipMapCount = _byteswap_ulong(header.mipMapCount); + + for (int i = 0; i < 11; i++) + header.reserved1[i] = _byteswap_ulong(header.reserved1[i]); + + header.pixelFormat.size = _byteswap_ulong(header.pixelFormat.size); + header.pixelFormat.flags = _byteswap_ulong(header.pixelFormat.flags); + header.pixelFormat.fourCC = _byteswap_ulong(header.pixelFormat.fourCC); + header.pixelFormat.rgbBitCount = _byteswap_ulong(header.pixelFormat.rgbBitCount); + header.pixelFormat.rBitMask = _byteswap_ulong(header.pixelFormat.rBitMask); + header.pixelFormat.gBitMask = _byteswap_ulong(header.pixelFormat.gBitMask); + header.pixelFormat.bBitMask = _byteswap_ulong(header.pixelFormat.bBitMask); + header.pixelFormat.aBitMask = _byteswap_ulong(header.pixelFormat.aBitMask); + + header.caps = _byteswap_ulong(header.caps); + header.caps2 = _byteswap_ulong(header.caps2); + header.caps3 = _byteswap_ulong(header.caps3); + header.caps4 = _byteswap_ulong(header.caps4); + header.reserved2 = _byteswap_ulong(header.reserved2); +} + +DDSImage ReadDDSFile(const std::string &filepath) +{ + DDSImage ddsImage; + std::ifstream file(filepath.c_str(), std::ios::binary); + + if (!file.is_open()) + return ddsImage; + + file.read(reinterpret_cast(&ddsImage.header), sizeof(DDSHeader)); + if (!file || file.gcount() != sizeof(DDSHeader)) + return DDSImage(); + + if (_byteswap_ulong(ddsImage.header.magic) != DDS_MAGIC) + return DDSImage(); + + SwapDDSHeaderEndian(ddsImage.header); + + file.seekg(0, std::ios::end); + const std::streampos fileSize = file.tellg(); + if (fileSize == std::streampos(-1) || fileSize < static_cast(sizeof(DDSHeader))) + return DDSImage(); + + file.seekg(sizeof(DDSHeader), std::ios::beg); + const size_t dataSize = static_cast(fileSize) - sizeof(DDSHeader); + + ddsImage.data.resize(dataSize); + if (dataSize > 0) + { + file.read(reinterpret_cast(&ddsImage.data[0]), dataSize); + if (!file || static_cast(file.gcount()) != dataSize) + return DDSImage(); + } + + return ddsImage; +} + +std::string GetReplacementPath(const char *imageName) +{ + return Config::GetModBasePath() + "\\images\\" + imageName + ".dds"; +} + +bool DDSIsCubemap(const DDSImage &ddsImage) +{ + return (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP) != 0 || + (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; +} + +uint32_t GetDDSMipCount(const DDSImage &ddsImage) +{ + return max(1u, static_cast(ddsImage.header.mipMapCount)); +} + +bool GetDDSFormat(const DDSImage &ddsImage, GPUTEXTUREFORMAT *format) +{ + if ((ddsImage.header.pixelFormat.flags & DDPF_FOURCC) == 0) + return false; + + switch (ddsImage.header.pixelFormat.fourCC) + { + case DXT1_FOURCC: + *format = GPUTEXTUREFORMAT_DXT1; + return true; + case DXT3_FOURCC: + *format = GPUTEXTUREFORMAT_DXT2_3; + return true; + case DXT5_FOURCC: + *format = GPUTEXTUREFORMAT_DXT4_5; + return true; + case DXN_FOURCC: + *format = GPUTEXTUREFORMAT_DXN; + return true; + default: + return false; + } +} + +bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, const std::string &path, + GPUTEXTUREFORMAT *ddsFormat) +{ + if (ddsImage.data.empty()) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace: Failed to load DDS file for image '%s': %s\n", + image->name, path.c_str()); + return false; + } + + if (ddsImage.header.size != DDS_HEADER_SIZE || ddsImage.header.pixelFormat.size != DDS_PIXEL_FORMAT_SIZE) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an invalid DDS header: size=%u pixelFormatSize=%u\n", + image->name, ddsImage.header.size, ddsImage.header.pixelFormat.size); + return false; + } + + if (!GetDDSFormat(ddsImage, ddsFormat)) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an unsupported DDS format: flags=0x%X fourCC=0x%X\n", + image->name, ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC); + return false; + } + + if (static_cast(image->texture.basemap->Format.DataFormat) != static_cast(*ddsFormat)) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' format does not match DDS file: Expected %u, Got %u\n", + image->name, static_cast(image->texture.basemap->Format.DataFormat), + static_cast(*ddsFormat)); + return false; + } + + return true; +} + +size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, + uint32_t levelCount, uint32_t faceCount) +{ + size_t requiredSize = 0; + + for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) + { + const uint32_t mipLevel = firstMipLevel + localMipLevel; + const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); + if (levelSize == 0) + return 0; + + requiredSize += static_cast(levelSize) * faceCount; + } + + return requiredSize; +} + +uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t mipLevel) +{ + uint32_t offset = 0; + + for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) + { + const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); + if (levelSize == 0) + return 0; + + offset += levelSize; + } + + return offset; +} + +size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, + uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) +{ + size_t requiredSize = 0; + + for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) + { + const uint32_t levelSize = xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); + if (levelSize == 0) + return 0; + + requiredSize += static_cast(levelSize) * faceCount; + } + + return requiredSize; +} + +bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t ddsFirstMipLevel, uint32_t replacementLevelCount, size_t *requiredDDSSize, + size_t *requiredTextureBytes) +{ + const size_t ddsMipOffset = + CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel); + const size_t requiredLinearSize = CalculateRequiredLinearDataSize( + ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel, replacementLevelCount, 1u); + *requiredDDSSize = ddsMipOffset + requiredLinearSize; + if (requiredLinearSize == 0 || (ddsFirstMipLevel > 0 && ddsMipOffset == 0)) + return false; + + if (ddsImage.data.size() < *requiredDDSSize) + return false; + + const uint32_t baseSize = xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 1u); + const size_t mipBytes = + CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); + *requiredTextureBytes = static_cast(baseSize) + mipBytes; + const int cardMemory = image->cardMemory.platform[0]; + if (cardMemory > 0 && *requiredTextureBytes > static_cast(cardMemory)) + return false; + + return true; +} + +bool ValidateCubeReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t faceSize, uint32_t tiledBaseSize, size_t *requiredDDSSize) +{ + *requiredDDSSize = static_cast(faceSize) * 6u; + if (faceSize == 0 || *requiredDDSSize == 0) + return false; + + if (ddsImage.data.size() < *requiredDDSSize) + return false; + + const int cardMemory = image->cardMemory.platform[0]; + if (cardMemory > 0 && static_cast(tiledBaseSize) > static_cast(cardMemory)) + return false; + + return true; +} + +bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFirstMipLevel) +{ + if (image->mapType != game::MAPTYPE_2D) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' is not a 2D map!\n", image->name); + return false; + } + + const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); + const uint32_t levelCount = xenos_texture::GetTextureLevelCount(image->texture.basemap); + const uint32_t mipTailBaseLevel = image->texture.basemap->Format.PackedMips != 0 + ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) + : levelCount; + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + if (ddsFirstMipLevel >= ddsMipCount) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement DDS has no mip %u: mipCount=%u\n", image->name, + ddsFirstMipLevel, ddsMipCount); + return false; + } + + const uint32_t replaceLevelCount = min(levelCount, ddsMipCount - ddsFirstMipLevel); + const uint32_t nonPackedLevelCount = max(1u, min(replaceLevelCount, mipTailBaseLevel)); + unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); + unsigned char *mipData = + xenos_texture::GetTextureMipBase(image->texture.basemap, baseData, image->width, image->height, format, 1u); + + size_t requiredDDSSize = 0; + size_t requiredTextureBytes = 0; + if (!Validate2DReplacementData(image, ddsImage, format, ddsFirstMipLevel, nonPackedLevelCount, &requiredDDSSize, + &requiredTextureBytes)) + { + if (requiredDDSSize == 0) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has unsupported replacement format %u!\n", image->name, + static_cast(format)); + } + else if (ddsImage.data.size() < requiredDDSSize) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "Image '%s' DDS data is too small: have=%u need=%u for %u mip levels\n", image->name, + static_cast(ddsImage.data.size()), + static_cast(requiredDDSSize), nonPackedLevelCount); + } + else + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement exceeds texture memory: have=%u need=%u\n", + image->name, static_cast(image->cardMemory.platform[0]), + static_cast(requiredTextureBytes)); + } + + return false; + } + + if (baseData == NULL || mipData == NULL) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Image '%s' has no valid texture memory!\n", + image->name); + return false; + } + + uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel); + + for (uint32_t localMipLevel = 0; localMipLevel < nonPackedLevelCount; localMipLevel++) + { + const uint32_t ddsMipLevel = ddsFirstMipLevel + localMipLevel; + const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, ddsMipLevel, format); + const uint32_t ddsMipLevelSize = + xenos_texture::CalculateLinearLevelSize(ddsImage.header.width, ddsImage.header.height, ddsMipLevel, format); + const uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize( + image->width, image->height, localMipLevel, format, image->texture.basemap->Format.Pitch); + + if (ddsMipLevelSize == 0 || tiledMipLevelSize == 0 || rowPitch == 0) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "Image_Replace_2D: Unsupported format %u for image '%s' mip level %u\n", + image->texture.basemap->Format.DataFormat, image->name, localMipLevel); + return false; + } + + if (static_cast(ddsOffset) + ddsMipLevelSize > ddsImage.data.size()) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Image '%s' mip level %u exceeds DDS data size\n", + image->name, ddsMipLevel); + return false; + } + + std::vector levelData(ddsImage.data.begin() + ddsOffset, + ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); + xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), + static_cast(image->texture.basemap->Format.Endian)); + + unsigned char *destination = baseData; + if (localMipLevel > 0) + { + destination = mipData + xenos_texture::CalculateMipLevelOffset(image->width, image->height, localMipLevel, + format, 1u); + } + + std::vector tiledData(tiledMipLevelSize); + if (!xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, format, + image->texture.basemap->Format.Pitch, &tiledData[0], tiledData.size(), + &levelData[0], levelData.size(), rowPitch)) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Failed to tile mip level %u for image '%s'\n", + localMipLevel, image->name); + return false; + } + + memcpy(destination, &tiledData[0], tiledMipLevelSize); + ddsOffset += ddsMipLevelSize; + } + + return true; +} + +bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) +{ + if (image->mapType != game::MAPTYPE_CUBE) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' is not a cube map!\n", image->name); + return false; + } + + const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); + const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); + const uint32_t tiledFaceSize = xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, format, + image->texture.basemap->Format.Pitch); + const uint32_t tiledBaseSize = + xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 6u); + unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); + + if (faceSize == 0 || rowPitch == 0 || tiledFaceSize == 0 || tiledBaseSize < tiledFaceSize * 6u) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has unsupported format %u!\n", image->name, + static_cast(format)); + return false; + } + + if (baseData == NULL) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_Cube: Image '%s' has no valid texture memory!\n", + image->name); + return false; + } + + size_t requiredDDSSize = 0; + if (!ValidateCubeReplacementData(image, ddsImage, format, faceSize, tiledBaseSize, &requiredDDSSize)) + { + if (requiredDDSSize == 0) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has unsupported cube replacement format %u!\n", + image->name, static_cast(format)); + } + else if (ddsImage.data.size() < requiredDDSSize) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "Image_Replace_Cube: Image '%s' DDS is too small for 6 faces: have=%u need=%u\n", + image->name, static_cast(ddsImage.data.size()), + static_cast(requiredDDSSize)); + } + else + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "Image '%s' cube replacement exceeds texture memory: have=%u " + "need=%u\n", + image->name, static_cast(image->cardMemory.platform[0]), tiledBaseSize); + } + + return false; + } + + for (uint32_t faceIndex = 0; faceIndex < 6u; faceIndex++) + { + const unsigned char *facePixels = &ddsImage.data[faceIndex * faceSize]; + unsigned char *faceDestination = baseData + (faceIndex * tiledFaceSize); + std::vector tiledData(tiledFaceSize); + + if (!xenos_texture::TileTextureLevel(image->width, image->height, 0u, static_cast(format), + image->texture.basemap->Format.Pitch, &tiledData[0], tiledData.size(), + facePixels, faceSize, rowPitch)) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_Cube: Failed to tile image '%s' face %u\n", + image->name, faceIndex); + return false; + } + + xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), + static_cast(image->texture.basemap->Format.Endian)); + memcpy(faceDestination, &tiledData[0], tiledFaceSize); + } + + return true; +} + +void Image_Replace(game::GfxImage *image) +{ + if (image == NULL || image->name == NULL || image->texture.basemap == NULL) + return; + + const std::string replacementPath = GetReplacementPath(image->name); + if (!filesystem::file_exists(replacementPath)) + return; + + DDSImage ddsImage = ReadDDSFile(replacementPath); + GPUTEXTUREFORMAT ddsFormat; + if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) + return; + + const bool ddsIsCubemap = DDSIsCubemap(ddsImage); + const bool ddsMatchesImageDimensions = + image->width == ddsImage.header.width && image->height == ddsImage.header.height; + const bool ddsMatchesStreamDimensions = image->streaming && image->mapType == game::MAPTYPE_2D && !ddsIsCubemap && + ddsImage.header.width == static_cast(image->width) * 2u && + ddsImage.header.height == static_cast(image->height) * 2u; + uint32_t ddsFirstMipLevel = 0; + + if (image->mapType == game::MAPTYPE_2D && ddsIsCubemap) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' is 2D but replacement DDS is a cubemap!\n", image->name); + return; + } + + if (image->streaming && image->mapType == game::MAPTYPE_2D) + { + if (!ddsMatchesStreamDimensions) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "Streamed image '%s' replacement must include the streamed mip: expected=%ux%u " + "got=%ux%u %s\n", + image->name, static_cast(image->width) * 2u, + static_cast(image->height) * 2u, ddsImage.header.width, + ddsImage.header.height, replacementPath.c_str()); + return; + } + + const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + if (ddsMipCount < 2u) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "Image '%s' replacement DDS starts at the streamed mip but has no resident mip: " + "%ux%u mipCount=%u\n", + image->name, ddsImage.header.width, ddsImage.header.height, ddsMipCount); + return; + } + + ddsFirstMipLevel = 1u; + } + else if (!ddsMatchesImageDimensions) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "Image '%s' dimensions do not match DDS file: image=%ux%u dds=%ux%u " + "%s\n", + image->name, image->width, image->height, ddsImage.header.width, ddsImage.header.height, + replacementPath.c_str()); + return; + } + + if (image->mapType == game::MAPTYPE_CUBE && !ddsIsCubemap) + { + const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, ddsFormat); + if (faceSize == 0 || ddsImage.data.size() < static_cast(faceSize) * 6u) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "Image '%s' is a cubemap but replacement DDS is not a valid 6-face cubemap!\n", + image->name); + return; + } + + game::Com_Printf(CON_CHANNEL_CONSOLEONLY, + "Image '%s' replacement DDS has no cubemap caps but contains enough data for 6 sequential " + "faces; accepting it.\n", + image->name); + } + + bool replaced = false; + if (image->mapType == game::MAPTYPE_2D) + replaced = Image_Replace_2D(image, ddsImage, ddsFirstMipLevel); + else if (image->mapType == game::MAPTYPE_CUBE) + replaced = Image_Replace_Cube(image, ddsImage); + else + game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' is not a 2D or cube map!\n", image->name); + + if (replaced) + { + if (ddsFirstMipLevel > 0) + g_streamedImageReplacements.insert(image->name); + + game::Com_Printf(CON_CHANNEL_CONSOLEONLY, "Replaced image '%s'\n", image->name); + } +} + +void Load_images() +{ + g_streamedImageReplacements.clear(); + + const int MAX_IMAGES = 2048; + game::XAssetHeader assets[MAX_IMAGES]; + const int count = game::DB_GetAllXAssetOfType_FastFile(game::ASSET_TYPE_IMAGE, assets, MAX_IMAGES); + for (int i = 0; i < count; i++) + { + game::GfxImage *image = assets[i].image; + Image_Replace(image); + } +} + +uint32_t GetStreamPriority(double imageDistSq) +{ + if (imageDistSq > 0.0) + { + if (imageDistSq > 10000.0) + return imageDistSq > 90000.0 ? 1u : 2u; + + return 3u; + } + + return 5u; +} + +bool FinalizeStreamReplacement(game::StreamAllocBlockInfo *block, uint32_t streamSlot, game::GfxImage *image, + unsigned char *destination, uint32_t streamPriority) +{ + if (streamPriority == 5u) + { + while (!game::RB_StreamQueueCommandSetHighMip(image, destination)) + { + } + } + + game::R_StreamAlloc_SetImage(block, static_cast<__int16>(streamSlot), image); + return true; +} + +bool R_StreamLoadImageReplacement(game::GfxImage *image, double imageDistSq) +{ + if (image == NULL || image->name == NULL || image->texture.basemap == NULL || image->mapType != game::MAPTYPE_2D || + !image->streaming) + { + return false; + } + + if (g_streamedImageReplacements.find(image->name) == g_streamedImageReplacements.end()) + return false; + + const std::string replacementPath = GetReplacementPath(image->name); + if (!filesystem::file_exists(replacementPath)) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadImageReplacement: Blocking stock stream for replaced " + "image '%s' because DDS is missing\n", + image->name); + return true; + } + + DDSImage ddsImage = ReadDDSFile(replacementPath); + GPUTEXTUREFORMAT ddsFormat; + if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadImageReplacement: Blocking stock stream for replaced image '%s'\n", + image->name); + return true; + } + + const uint32_t streamWidth = static_cast(image->width) * 2u; + const uint32_t streamHeight = static_cast(image->height) * 2u; + if (DDSIsCubemap(ddsImage) || ddsImage.header.width != streamWidth || ddsImage.header.height != streamHeight) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadImageReplacement: Image '%s' dimensions do not match streamed mip: " + "expected=%ux%u got=%ux%u\n", + image->name, streamWidth, streamHeight, ddsImage.header.width, ddsImage.header.height); + return true; + } + + if (GetDDSMipCount(ddsImage) < 2u) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadImageReplacement: Image '%s' replacement DDS must include stream and " + "resident mips: mipCount=%u\n", + image->name, GetDDSMipCount(ddsImage)); + return true; + } + + if (image->baseSize == 0 || image->baseSize > 0x3FFFFFFFu) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadImageReplacement: Image '%s' has invalid stream size %u\n", + image->name, image->baseSize); + return true; + } + + const uint32_t streamSize = image->baseSize * 4u; + const uint32_t sourceSize = xenos_texture::CalculateLinearLevelSize(streamWidth, streamHeight, 0u, ddsFormat); + const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(streamWidth, 0u, ddsFormat); + const uint32_t tiledSize = xenos_texture::CalculateTiledLevelSize(streamWidth, streamHeight, 0u, ddsFormat, 0u); + + if (sourceSize == 0 || rowPitch == 0 || tiledSize == 0) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadImageReplacement: Image '%s' has unsupported replacement format %u\n", + image->name, static_cast(ddsFormat)); + return true; + } + + if (ddsImage.data.size() < sourceSize) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadImageReplacement: Image '%s' DDS data is too small: have=%u need=%u\n", + image->name, static_cast(ddsImage.data.size()), sourceSize); + return true; + } + + if (tiledSize != streamSize) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadImageReplacement: Image '%s' stream size mismatch: expected=%u got=%u\n", + image->name, streamSize, tiledSize); + return true; + } + + game::StreamAllocBlockInfo *streamBlock = NULL; + uint32_t streamSlot = 0; + const uint32_t streamPriority = GetStreamPriority(imageDistSq); + if (!game::R_StreamAlloc_Alloc(streamSize, streamPriority, &streamBlock, &streamSlot)) + { + game::Com_PrintError(CON_CHANNEL_ERROR, + "R_StreamLoadImageReplacement: Failed to allocate stream memory for " + "image '%s' size=%u\n", + image->name, streamSize); + return true; + } + + unsigned char *destination = reinterpret_cast(*game::r_streamBufferBase + (streamSlot << 17u)); + if (destination == NULL) + { + game::Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadImageReplacement: Image '%s' stream destination is null\n", + image->name); + return true; + } + + std::vector buffer(ddsImage.data.begin(), ddsImage.data.begin() + sourceSize); + xenos_texture::ApplyGpuEndian(&buffer[0], buffer.size(), + static_cast(image->texture.basemap->Format.Endian)); + + if (!xenos_texture::TileTextureLevel(streamWidth, streamHeight, 0u, ddsFormat, 0u, destination, streamSize, + &buffer[0], buffer.size(), rowPitch)) + { + memset(destination, 0, streamSize); + game::Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadImageReplacement: Failed to tile streamed image '%s'\n", + image->name); + FinalizeStreamReplacement(streamBlock, streamSlot, image, destination, streamPriority); + return true; + } + + FinalizeStreamReplacement(streamBlock, streamSlot, image, destination, streamPriority); + game::Com_Printf(CON_CHANNEL_CONSOLEONLY, "Replaced streamed image '%s'\n", image->name); + return true; +} + +Detour CG_RegisterGraphics_Detour; +Detour R_StreamLoadImage_Detour; + +void CG_RegisterGraphics_Hook(int localClientNum, const char *mapname) +{ + CG_RegisterGraphics_Detour.GetOriginal()(localClientNum, mapname); + Load_images(); +} + +void R_StreamLoadImage_Hook(game::GfxImage *image, double imageDistSq) +{ + if (R_StreamLoadImageReplacement(image, imageDistSq)) + return; + + R_StreamLoadImage_Detour.GetOriginal()(image, imageDistSq); +} +} // namespace + +namespace t4 +{ +namespace mp +{ +image_loader::image_loader() +{ + CG_RegisterGraphics_Detour = Detour(CG_RegisterGraphics, CG_RegisterGraphics_Hook); + CG_RegisterGraphics_Detour.Install(); + + R_StreamLoadImage_Detour = Detour(R_StreamLoadImage, R_StreamLoadImage_Hook); + R_StreamLoadImage_Detour.Install(); +} + +image_loader::~image_loader() +{ + CG_RegisterGraphics_Detour.Remove(); + R_StreamLoadImage_Detour.Remove(); +} +} // namespace mp +} // namespace t4 diff --git a/src/game/t4/mp/components/image_loader.h b/src/game/t4/mp/components/image_loader.h new file mode 100644 index 00000000..e69c4627 --- /dev/null +++ b/src/game/t4/mp/components/image_loader.h @@ -0,0 +1,21 @@ +#pragma once + +#include "pch.h" + +namespace t4 +{ +namespace mp +{ +class image_loader : public Module +{ + public: + image_loader(); + ~image_loader(); + + const char *get_name() override + { + return "image_loader"; + }; +}; +} // namespace mp +} // namespace t4 diff --git a/src/game/t4/mp/main.cpp b/src/game/t4/mp/main.cpp index 72ab693f..cff372b6 100644 --- a/src/game/t4/mp/main.cpp +++ b/src/game/t4/mp/main.cpp @@ -8,6 +8,7 @@ #include "components/gsc_client_methods.h" #include "components/gsc_functions.h" #include "components/gsc_loader.h" +#include "components/image_loader.h" #include "components/map.h" #include "components/patches.h" #include "components/stats.h" @@ -31,6 +32,7 @@ T4_MP_Plugin::T4_MP_Plugin() RegisterModule(new GSCFunctions()); RegisterModule(new SVBots()); RegisterModule(new GSCLoader()); + RegisterModule(new image_loader()); RegisterModule(new Map()); RegisterModule(new Patches()); RegisterModule(new stats()); diff --git a/src/game/t4/mp/symbols.h b/src/game/t4/mp/symbols.h index 605df41f..5abf34e9 100644 --- a/src/game/t4/mp/symbols.h +++ b/src/game/t4/mp/symbols.h @@ -44,9 +44,13 @@ const int NUM_BSP_OR_DYNAMIC_SPAWNS = 6; static auto s_bspOrDynamicSpawns = reinterpret_cast(0x82035D30); // Functions +struct StreamAllocBlockInfo; + static auto CG_BoldGameMessage = reinterpret_cast(0x8216EC88); static auto CG_DrawActive = reinterpret_cast(0x82159560); static auto CG_GameMessage = reinterpret_cast(0x8216EC68); +typedef void (*CG_RegisterGraphics_t)(int localClientNum, const char *mapname); +static CG_RegisterGraphics_t CG_RegisterGraphics = reinterpret_cast(0x8216F338); static auto CG_Init = reinterpret_cast( 0x82171A30); @@ -72,6 +76,8 @@ static auto CL_WritePacket = reinterpret_cast(0x82 typedef void (*Com_Printf_t)(int channel, const char *fmt, ...); static Com_Printf_t Com_Printf = reinterpret_cast(0x82271BE0); +typedef void (*Com_PrintError_t)(int channel, const char *fmt, ...); +static Com_PrintError_t Com_PrintError = reinterpret_cast(0x82271D00); static auto Com_InitDvars = reinterpret_cast(0x82272BF8); @@ -112,6 +118,18 @@ static auto R_AddCmdDrawText = reinterpret_cast(0x82401C30); static auto R_CheckDvarModified = reinterpret_cast(0x8240D860); +typedef void (*R_StreamLoadImage_t)(GfxImage *image, double imageDistSq); +static R_StreamLoadImage_t R_StreamLoadImage = reinterpret_cast(0x82410190); +typedef int (*RB_StreamQueueCommandSetHighMip_t)(GfxImage *image, unsigned __int8 *pixels); +static RB_StreamQueueCommandSetHighMip_t RB_StreamQueueCommandSetHighMip = + reinterpret_cast(0x82428320); +typedef int (*R_StreamAlloc_Alloc_t)(unsigned int size, int priority, StreamAllocBlockInfo **block, + unsigned int *streamSlot); +static R_StreamAlloc_Alloc_t R_StreamAlloc_Alloc = reinterpret_cast(0x82436728); +typedef void (*R_StreamAlloc_SetImage_t)(StreamAllocBlockInfo *block, __int16 streamSlot, GfxImage *image); +static R_StreamAlloc_SetImage_t R_StreamAlloc_SetImage = reinterpret_cast(0x82436A08); +typedef unsigned int *r_streamBufferBase_t; +static r_streamBufferBase_t r_streamBufferBase = reinterpret_cast(0x85F03DCC); static auto ScriptEnt_GetMethod = reinterpret_cast(0x82244B50); static auto Scr_AddArray = reinterpret_cast(0x82345C80); From d9ddc32e35c8daa35eddd8d956d1145f86cb9110 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 08:49:34 +0100 Subject: [PATCH 05/20] refactor: move dds handling to module, cleanup iw4 loader --- .../iw4/mp_tu6/components/image_loader.cpp | 342 +----------------- src/game/t4/mp/components/image_loader.cpp | 173 +-------- src/image/dds_image.cpp | 181 +++++++++ src/image/dds_image.h | 57 +++ 4 files changed, 270 insertions(+), 483 deletions(-) create mode 100644 src/image/dds_image.cpp create mode 100644 src/image/dds_image.h diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index 4b29aedd..24270518 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -2,6 +2,7 @@ #include "common/config.h" #include "events.h" #include "image_loader.h" +#include "image/dds_image.h" #include "xenos_texture.h" #ifndef INVALID_FILE_ATTRIBUTES @@ -12,82 +13,9 @@ namespace { namespace game = iw4::mp_tu6; -const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); -const uint32_t DDS_HEADER_SIZE = 124; -const uint32_t DDS_PIXEL_FORMAT_SIZE = 32; -const uint32_t DDPF_ALPHAPIXELS = 0x1; -const uint32_t DDPF_FOURCC = 0x4; -const uint32_t DDPF_RGB = 0x40; -const uint32_t DDPF_LUMINANCE = 0x20000; -const uint32_t DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'); -const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); -const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); -const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); -const uint32_t DDSCAPS2_CUBEMAP = 0x200; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; -const uint32_t DDSCAPS2_CUBEMAP_ALL_FACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | - DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | - DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; const uint32_t IW4_STREAM_PIXEL_SIZE_MASK = 0x3FFFFFF; -const uint32_t DEBUG_LINKED_IMAGE_LIMIT = 128; -const uint32_t DEBUG_STREAM_IMAGE_LIMIT = 128; -const uint32_t DEBUG_REPLACEMENT_FILE_LIMIT = 64; -uint32_t g_debugLinkedImageCount = 0; -uint32_t g_debugStreamImageCount = 0; - -struct DDSHeader -{ - uint32_t magic; - uint32_t size; - uint32_t flags; - uint32_t height; - uint32_t width; - uint32_t pitchOrLinearSize; - uint32_t depth; - uint32_t mipMapCount; - uint32_t reserved1[11]; - struct - { - uint32_t size; - uint32_t flags; - uint32_t fourCC; - uint32_t rgbBitCount; - uint32_t rBitMask; - uint32_t gBitMask; - uint32_t bBitMask; - uint32_t aBitMask; - } pixelFormat; - uint32_t caps; - uint32_t caps2; - uint32_t caps3; - uint32_t caps4; - uint32_t reserved2; -}; -static_assert(sizeof(DDSHeader) == 128, ""); - -struct DDSImage -{ - DDSHeader header; - std::vector data; -}; - -void DebugLog(const char *format, ...) -{ - char buffer[1024]; - va_list args; - va_start(args, format); - _vsnprintf(buffer, sizeof(buffer), format, args); - va_end(args); - buffer[sizeof(buffer) - 1] = '\0'; - - DbgPrint("[codxe][IW4 TU6] image_loader: debug: %s", buffer); -} +typedef image::DdsImage DDSImage; void PrintImageError(const char *format, ...) { @@ -98,8 +26,7 @@ void PrintImageError(const char *format, ...) va_end(args); buffer[sizeof(buffer) - 1] = '\0'; - DbgPrint("[codxe][IW4 TU6] image_loader: %s", buffer); - game::Com_Printf(0, "[codxe][IW4 TU6] image_loader: %s", buffer); + game::Com_Printf(0, "%s", buffer); } void PrintImageInfo(const char *format, ...) @@ -111,8 +38,7 @@ void PrintImageInfo(const char *format, ...) va_end(args); buffer[sizeof(buffer) - 1] = '\0'; - DbgPrint("[codxe][IW4 TU6] image_loader: %s", buffer); - game::Com_Printf(0, "[codxe][IW4 TU6] image_loader: %s", buffer); + game::Com_Printf(0, "%s", buffer); } bool ImageFileExists(const std::string &path) @@ -126,112 +52,9 @@ std::string GetReplacementDirectory() return Config::GetModBasePath() + "\\images"; } -void DebugListReplacementFiles() -{ - const std::string replacementDirectory = GetReplacementDirectory(); - DebugLog("replacement directory='%s'\n", replacementDirectory.c_str()); - - const DWORD attributes = GetFileAttributesA(replacementDirectory.c_str()); - if (attributes == INVALID_FILE_ATTRIBUTES) - { - DebugLog("replacement directory missing/inaccessible error=0x%08X\n", GetLastError()); - return; - } - - if ((attributes & FILE_ATTRIBUTE_DIRECTORY) == 0) - { - DebugLog("replacement path exists but is not a directory\n"); - return; - } - - WIN32_FIND_DATAA findData; - const std::string searchPath = replacementDirectory + "\\*.dds"; - HANDLE findHandle = FindFirstFileA(searchPath.c_str(), &findData); - if (findHandle == INVALID_HANDLE_VALUE) - { - DebugLog("no replacement DDS files matched '%s' error=0x%08X\n", searchPath.c_str(), GetLastError()); - return; - } - - uint32_t replacementFileCount = 0; - do - { - if ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) - { - if (replacementFileCount < DEBUG_REPLACEMENT_FILE_LIMIT) - DebugLog("replacement file[%u]='%s'\n", replacementFileCount, findData.cFileName); - replacementFileCount++; - } - } while (FindNextFileA(findHandle, &findData) != 0); - - FindClose(findHandle); - DebugLog("replacement file count=%u\n", replacementFileCount); -} - -void SwapDDSHeaderEndian(DDSHeader &header) -{ - header.magic = _byteswap_ulong(header.magic); - header.size = _byteswap_ulong(header.size); - header.flags = _byteswap_ulong(header.flags); - header.height = _byteswap_ulong(header.height); - header.width = _byteswap_ulong(header.width); - header.pitchOrLinearSize = _byteswap_ulong(header.pitchOrLinearSize); - header.depth = _byteswap_ulong(header.depth); - header.mipMapCount = _byteswap_ulong(header.mipMapCount); - - for (int i = 0; i < 11; i++) - header.reserved1[i] = _byteswap_ulong(header.reserved1[i]); - - header.pixelFormat.size = _byteswap_ulong(header.pixelFormat.size); - header.pixelFormat.flags = _byteswap_ulong(header.pixelFormat.flags); - header.pixelFormat.fourCC = _byteswap_ulong(header.pixelFormat.fourCC); - header.pixelFormat.rgbBitCount = _byteswap_ulong(header.pixelFormat.rgbBitCount); - header.pixelFormat.rBitMask = _byteswap_ulong(header.pixelFormat.rBitMask); - header.pixelFormat.gBitMask = _byteswap_ulong(header.pixelFormat.gBitMask); - header.pixelFormat.bBitMask = _byteswap_ulong(header.pixelFormat.bBitMask); - header.pixelFormat.aBitMask = _byteswap_ulong(header.pixelFormat.aBitMask); - - header.caps = _byteswap_ulong(header.caps); - header.caps2 = _byteswap_ulong(header.caps2); - header.caps3 = _byteswap_ulong(header.caps3); - header.caps4 = _byteswap_ulong(header.caps4); - header.reserved2 = _byteswap_ulong(header.reserved2); -} - DDSImage ReadDDSFile(const std::string &filepath) { - DDSImage ddsImage; - std::ifstream file(filepath.c_str(), std::ios::binary); - - if (!file.is_open()) - return ddsImage; - - file.read(reinterpret_cast(&ddsImage.header), sizeof(DDSHeader)); - if (!file || file.gcount() != sizeof(DDSHeader)) - return DDSImage(); - - if (_byteswap_ulong(ddsImage.header.magic) != DDS_MAGIC) - return DDSImage(); - - SwapDDSHeaderEndian(ddsImage.header); - - file.seekg(0, std::ios::end); - const std::streampos fileSize = file.tellg(); - if (fileSize == std::streampos(-1)) - return DDSImage(); - - file.seekg(sizeof(DDSHeader), std::ios::beg); - const size_t dataSize = static_cast(fileSize) - sizeof(DDSHeader); - ddsImage.data.resize(dataSize); - - if (dataSize > 0) - { - file.read(reinterpret_cast(&ddsImage.data[0]), dataSize); - if (!file || static_cast(file.gcount()) != dataSize) - return DDSImage(); - } - - return ddsImage; + return image::LoadDdsFromFile(filepath); } std::string GetReplacementPath(const char *imageName) @@ -239,75 +62,6 @@ std::string GetReplacementPath(const char *imageName) return GetReplacementDirectory() + "\\" + imageName + ".dds"; } -bool DDSIsCubemap(const DDSImage &ddsImage) -{ - return (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP) != 0 || - (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; -} - -uint32_t GetDDSMipCount(const DDSImage &ddsImage) -{ - return max(1u, ddsImage.header.mipMapCount); -} - -uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel) -{ - return max(1u, dimension >> mipLevel); -} - -bool GetDDSFormat(const DDSImage &ddsImage, GPUTEXTUREFORMAT *format) -{ - const DDSHeader &header = ddsImage.header; - - if ((header.pixelFormat.flags & DDPF_FOURCC) != 0) - { - switch (header.pixelFormat.fourCC) - { - case DXT1_FOURCC: - *format = GPUTEXTUREFORMAT_DXT1; - return true; - case DXT3_FOURCC: - *format = GPUTEXTUREFORMAT_DXT2_3; - return true; - case DXT5_FOURCC: - *format = GPUTEXTUREFORMAT_DXT4_5; - return true; - case DXN_FOURCC: - *format = GPUTEXTUREFORMAT_DXN; - return true; - default: - return false; - } - } - - if ((header.pixelFormat.flags & DDPF_LUMINANCE) != 0) - { - if (header.pixelFormat.rgbBitCount == 8 && header.pixelFormat.rBitMask == 0x000000FF) - { - *format = GPUTEXTUREFORMAT_8; - return true; - } - - if ((header.pixelFormat.flags & DDPF_ALPHAPIXELS) != 0 && header.pixelFormat.rgbBitCount == 16 && - header.pixelFormat.rBitMask == 0x000000FF && header.pixelFormat.gBitMask == 0x0000FF00) - { - *format = GPUTEXTUREFORMAT_8_8; - return true; - } - } - - if ((header.pixelFormat.flags & DDPF_RGB) != 0 && (header.pixelFormat.flags & DDPF_ALPHAPIXELS) != 0 && - header.pixelFormat.rgbBitCount == 32 && header.pixelFormat.rBitMask == 0x00FF0000 && - header.pixelFormat.gBitMask == 0x0000FF00 && header.pixelFormat.bBitMask == 0x000000FF && - header.pixelFormat.aBitMask == 0xFF000000) - { - *format = GPUTEXTUREFORMAT_8_8_8_8; - return true; - } - - return false; -} - bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, const std::string &path, GPUTEXTUREFORMAT *ddsFormat) { @@ -317,14 +71,15 @@ bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, co return false; } - if (ddsImage.header.size != DDS_HEADER_SIZE || ddsImage.header.pixelFormat.size != DDS_PIXEL_FORMAT_SIZE) + if (ddsImage.header.size != image::DDS_HEADER_SIZE || + ddsImage.header.pixelFormat.size != image::DDS_PIXEL_FORMAT_SIZE) { PrintImageError("image '%s' has an invalid DDS header: size=%u pixelFormatSize=%u\n", image->name, ddsImage.header.size, ddsImage.header.pixelFormat.size); return false; } - if (!GetDDSFormat(ddsImage, ddsFormat)) + if (!ddsImage.GetGpuFormat(ddsFormat)) { PrintImageError("image '%s' has an unsupported DDS format: flags=0x%X fourCC=0x%X bitCount=%u\n", image->name, ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC, @@ -420,7 +175,7 @@ bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsI bool ValidateResidentMipCount(const game::GfxImage *image, const DDSImage &ddsImage, uint32_t textureLevelCount) { - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (ddsMipCount != textureLevelCount) { PrintImageError("image '%s' mip count does not match DDS: image=%u dds=%u\n", image->name, textureLevelCount, @@ -484,22 +239,6 @@ bool ImageHasStreamedParts(const game::GfxImage *image) return false; } -void DebugLogImageState(const char *source, const game::GfxImage *image, bool replacementExists, - const std::string &replacementPath) -{ - if (image == NULL) - return; - - DebugLog("%s image='%s' replacement=%u path='%s' mapType=%u size=%ux%u depth=%u levels=%u streaming=%u pixels=%p " - "card=%d streamPixels=[0x%08X,0x%08X,0x%08X,0x%08X]\n", - source, image->name != NULL ? image->name : "", replacementExists ? 1u : 0u, replacementPath.c_str(), - static_cast(image->mapType), static_cast(image->width), - static_cast(image->height), static_cast(image->depth), - static_cast(image->levelCount), image->streaming ? 1u : 0u, image->pixels, - image->cardMemory.platform[0], image->streams[0].pixelSize, image->streams[1].pixelSize, - image->streams[2].pixelSize, image->streams[3].pixelSize); -} - bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) { if (image->mapType != game::MAPTYPE_2D) @@ -635,10 +374,10 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) return false; } - if (levelCount != 1u || GetDDSMipCount(ddsImage) != 1u) + if (levelCount != 1u || ddsImage.GetMipCount() != 1u) { PrintImageError("image '%s' cube replacement must be base-level only: imageMips=%u ddsMips=%u\n", image->name, - levelCount, GetDDSMipCount(ddsImage)); + levelCount, ddsImage.GetMipCount()); return false; } @@ -685,7 +424,7 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) bool ValidateReplacementShape(const game::GfxImage *image, const DDSImage &ddsImage) { - const bool ddsIsCubemap = DDSIsCubemap(ddsImage); + const bool ddsIsCubemap = ddsImage.IsCubemap(); if (image->mapType == game::MAPTYPE_2D && ddsIsCubemap) { @@ -696,7 +435,7 @@ bool ValidateReplacementShape(const game::GfxImage *image, const DDSImage &ddsIm if (image->mapType == game::MAPTYPE_CUBE && !ddsIsCubemap) { GPUTEXTUREFORMAT ddsFormat; - if (!GetDDSFormat(ddsImage, &ddsFormat)) + if (!ddsImage.GetGpuFormat(&ddsFormat)) return false; const uint32_t faceSize = @@ -717,17 +456,11 @@ void Image_Replace(game::GfxImage *image) return; const std::string replacementPath = GetReplacementPath(image->name); - const bool replacementExists = ImageFileExists(replacementPath); - if (!replacementExists) + if (!ImageFileExists(replacementPath)) return; - DebugLogImageState("resident candidate", image, replacementExists, replacementPath); - if (ImageHasStreamedParts(image)) - { - PrintImageInfo("found streamed replacement for image '%s'; waiting for streamed data\n", image->name); return; - } if (image->pixels == NULL || image->cardMemory.platform[0] <= 0) { @@ -764,12 +497,12 @@ void Image_Replace(game::GfxImage *image) bool FindMipLevelForDimensions(const DDSImage &ddsImage, uint32_t width, uint32_t height, uint32_t *mipLevel) { - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); for (uint32_t currentMip = 0; currentMip < ddsMipCount; ++currentMip) { - if (GetMipDimension(ddsImage.header.width, currentMip) == width && - GetMipDimension(ddsImage.header.height, currentMip) == height) + if (image::GetMipDimension(ddsImage.header.width, currentMip) == width && + image::GetMipDimension(ddsImage.header.height, currentMip) == height) { *mipLevel = currentMip; return true; @@ -827,7 +560,7 @@ bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImag return false; } - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (image->levelCount != 1u || ddsMipCount != 1u) { PrintImageError("streamed cube image '%s' must be base-level only: imageMips=%u ddsMips=%u\n", image->name, @@ -905,13 +638,13 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u return false; } - if (DDSIsCubemap(ddsImage)) + if (ddsImage.IsCubemap()) { PrintImageError("streamed image '%s' is 2D but replacement DDS is a cubemap\n", image->name); return false; } - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (!ValidateDDSDataSize(image, ddsImage, ddsFormat, ddsMipCount, 1u)) return false; @@ -957,13 +690,6 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u return false; } - DebugLog("stream replacement image='%s' part=%u startMip=%u streamLevels=%u replaceLevels=%u packedMips=%u " - "texturePitch=%u streamPitch=%u format=%u endian=%u\n", - image->name, imagePartIndex, startMipLevel, levelCount, replaceLevelCount, - static_cast(texture->Format.PackedMips), static_cast(texture->Format.Pitch), - streamBasePitch, static_cast(texture->Format.DataFormat), - static_cast(texture->Format.Endian)); - uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, ddsFormat, startMipLevel); size_t destinationOffset = 0; @@ -1022,17 +748,6 @@ void TryReplaceStreamPart(game::GfxImage *image, uint32_t imagePartIndex) const std::string replacementPath = GetReplacementPath(image->name); const bool replacementExists = ImageFileExists(replacementPath); - if (g_debugStreamImageCount < DEBUG_STREAM_IMAGE_LIMIT || replacementExists || imagePartIndex >= 4u) - { - DebugLog("ImageCache_InitImage image='%s' part=%u replacement=%u path='%s' mapType=%u size=%ux%u levels=%u " - "streaming=%u pixels=%p card=%d streamPixelSize=0x%08X\n", - image->name, imagePartIndex, replacementExists ? 1u : 0u, replacementPath.c_str(), - static_cast(image->mapType), static_cast(image->width), - static_cast(image->height), static_cast(image->levelCount), - image->streaming ? 1u : 0u, image->pixels, image->cardMemory.platform[0], - imagePartIndex < 4u ? image->streams[imagePartIndex].pixelSize : 0u); - } - g_debugStreamImageCount++; if (imagePartIndex >= 4u) return; @@ -1048,19 +763,7 @@ void TryReplaceStreamPart(game::GfxImage *image, uint32_t imagePartIndex) void OnDBLinkXAssetPre(game::XAssetType &type, game::XAssetHeader *header) { if (type == game::ASSET_TYPE_IMAGE && header != NULL) - { - game::GfxImage *image = header->image; - if (image != NULL && image->name != NULL) - { - const std::string replacementPath = GetReplacementPath(image->name); - const bool replacementExists = ImageFileExists(replacementPath); - if (g_debugLinkedImageCount < DEBUG_LINKED_IMAGE_LIMIT || replacementExists) - DebugLogImageState("DB_LinkXAssetPre", image, replacementExists, replacementPath); - g_debugLinkedImageCount++; - } - Image_Replace(header->image); - } } Detour ImageCache_InitImage_Detour; @@ -1075,15 +778,10 @@ void ImageCache_InitImage_Hook(game::GfxImage *image, game::GfxImage *remoteImag image_loader::image_loader() { - DebugLog("construct activeMod='%s' modBase='%s'\n", Config::active_mod.c_str(), Config::GetModBasePath().c_str()); - DebugListReplacementFiles(); - Events::OnDBLinkXAssetPre(OnDBLinkXAssetPre); - DebugLog("registered DB_LinkXAssetPre image callback\n"); ImageCache_InitImage_Detour = Detour(iw4::mp_tu6::ImageCache_InitImage, ImageCache_InitImage_Hook); ImageCache_InitImage_Detour.Install(); - DebugLog("installed ImageCache_InitImage detour target=%p\n", iw4::mp_tu6::ImageCache_InitImage); } image_loader::~image_loader() diff --git a/src/game/t4/mp/components/image_loader.cpp b/src/game/t4/mp/components/image_loader.cpp index 0e1582e2..a4f1f5ff 100644 --- a/src/game/t4/mp/components/image_loader.cpp +++ b/src/game/t4/mp/components/image_loader.cpp @@ -1,6 +1,7 @@ #include "pch.h" #include "common/config.h" #include "image_loader.h" +#include "image/dds_image.h" #include "xenos_texture.h" namespace @@ -10,129 +11,13 @@ namespace game = t4::mp; const int CON_CHANNEL_ERROR = 1; const int CON_CHANNEL_CONSOLEONLY = 7; -const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); -const uint32_t DDS_HEADER_SIZE = 124; -const uint32_t DDS_PIXEL_FORMAT_SIZE = 32; -const uint32_t DDPF_FOURCC = 0x4; - -const uint32_t DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'); -const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); -const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); -const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); - -const uint32_t DDSCAPS2_CUBEMAP = 0x200; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; -const uint32_t DDSCAPS2_CUBEMAP_ALL_FACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | - DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | - DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; - std::set g_streamedImageReplacements; -struct DDSHeader -{ - uint32_t magic; - uint32_t size; - uint32_t flags; - uint32_t height; - uint32_t width; - uint32_t pitchOrLinearSize; - uint32_t depth; - uint32_t mipMapCount; - uint32_t reserved1[11]; - struct - { - uint32_t size; - uint32_t flags; - uint32_t fourCC; - uint32_t rgbBitCount; - uint32_t rBitMask; - uint32_t gBitMask; - uint32_t bBitMask; - uint32_t aBitMask; - } pixelFormat; - uint32_t caps; - uint32_t caps2; - uint32_t caps3; - uint32_t caps4; - uint32_t reserved2; -}; -static_assert(sizeof(DDSHeader) == 128, ""); - -struct DDSImage -{ - DDSHeader header; - std::vector data; -}; - -void SwapDDSHeaderEndian(DDSHeader &header) -{ - header.magic = _byteswap_ulong(header.magic); - header.size = _byteswap_ulong(header.size); - header.flags = _byteswap_ulong(header.flags); - header.height = _byteswap_ulong(header.height); - header.width = _byteswap_ulong(header.width); - header.pitchOrLinearSize = _byteswap_ulong(header.pitchOrLinearSize); - header.depth = _byteswap_ulong(header.depth); - header.mipMapCount = _byteswap_ulong(header.mipMapCount); - - for (int i = 0; i < 11; i++) - header.reserved1[i] = _byteswap_ulong(header.reserved1[i]); - - header.pixelFormat.size = _byteswap_ulong(header.pixelFormat.size); - header.pixelFormat.flags = _byteswap_ulong(header.pixelFormat.flags); - header.pixelFormat.fourCC = _byteswap_ulong(header.pixelFormat.fourCC); - header.pixelFormat.rgbBitCount = _byteswap_ulong(header.pixelFormat.rgbBitCount); - header.pixelFormat.rBitMask = _byteswap_ulong(header.pixelFormat.rBitMask); - header.pixelFormat.gBitMask = _byteswap_ulong(header.pixelFormat.gBitMask); - header.pixelFormat.bBitMask = _byteswap_ulong(header.pixelFormat.bBitMask); - header.pixelFormat.aBitMask = _byteswap_ulong(header.pixelFormat.aBitMask); - - header.caps = _byteswap_ulong(header.caps); - header.caps2 = _byteswap_ulong(header.caps2); - header.caps3 = _byteswap_ulong(header.caps3); - header.caps4 = _byteswap_ulong(header.caps4); - header.reserved2 = _byteswap_ulong(header.reserved2); -} +typedef image::DdsImage DDSImage; DDSImage ReadDDSFile(const std::string &filepath) { - DDSImage ddsImage; - std::ifstream file(filepath.c_str(), std::ios::binary); - - if (!file.is_open()) - return ddsImage; - - file.read(reinterpret_cast(&ddsImage.header), sizeof(DDSHeader)); - if (!file || file.gcount() != sizeof(DDSHeader)) - return DDSImage(); - - if (_byteswap_ulong(ddsImage.header.magic) != DDS_MAGIC) - return DDSImage(); - - SwapDDSHeaderEndian(ddsImage.header); - - file.seekg(0, std::ios::end); - const std::streampos fileSize = file.tellg(); - if (fileSize == std::streampos(-1) || fileSize < static_cast(sizeof(DDSHeader))) - return DDSImage(); - - file.seekg(sizeof(DDSHeader), std::ios::beg); - const size_t dataSize = static_cast(fileSize) - sizeof(DDSHeader); - - ddsImage.data.resize(dataSize); - if (dataSize > 0) - { - file.read(reinterpret_cast(&ddsImage.data[0]), dataSize); - if (!file || static_cast(file.gcount()) != dataSize) - return DDSImage(); - } - - return ddsImage; + return image::LoadDdsFromFile(filepath); } std::string GetReplacementPath(const char *imageName) @@ -140,41 +25,6 @@ std::string GetReplacementPath(const char *imageName) return Config::GetModBasePath() + "\\images\\" + imageName + ".dds"; } -bool DDSIsCubemap(const DDSImage &ddsImage) -{ - return (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP) != 0 || - (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; -} - -uint32_t GetDDSMipCount(const DDSImage &ddsImage) -{ - return max(1u, static_cast(ddsImage.header.mipMapCount)); -} - -bool GetDDSFormat(const DDSImage &ddsImage, GPUTEXTUREFORMAT *format) -{ - if ((ddsImage.header.pixelFormat.flags & DDPF_FOURCC) == 0) - return false; - - switch (ddsImage.header.pixelFormat.fourCC) - { - case DXT1_FOURCC: - *format = GPUTEXTUREFORMAT_DXT1; - return true; - case DXT3_FOURCC: - *format = GPUTEXTUREFORMAT_DXT2_3; - return true; - case DXT5_FOURCC: - *format = GPUTEXTUREFORMAT_DXT4_5; - return true; - case DXN_FOURCC: - *format = GPUTEXTUREFORMAT_DXN; - return true; - default: - return false; - } -} - bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, const std::string &path, GPUTEXTUREFORMAT *ddsFormat) { @@ -185,14 +35,15 @@ bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, co return false; } - if (ddsImage.header.size != DDS_HEADER_SIZE || ddsImage.header.pixelFormat.size != DDS_PIXEL_FORMAT_SIZE) + if (ddsImage.header.size != image::DDS_HEADER_SIZE || + ddsImage.header.pixelFormat.size != image::DDS_PIXEL_FORMAT_SIZE) { game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an invalid DDS header: size=%u pixelFormatSize=%u\n", image->name, ddsImage.header.size, ddsImage.header.pixelFormat.size); return false; } - if (!GetDDSFormat(ddsImage, ddsFormat)) + if (!ddsImage.GetGpuFormat(ddsFormat)) { game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an unsupported DDS format: flags=0x%X fourCC=0x%X\n", image->name, ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC); @@ -317,7 +168,7 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage, uint32_t const uint32_t mipTailBaseLevel = image->texture.basemap->Format.PackedMips != 0 ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (ddsFirstMipLevel >= ddsMipCount) { game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement DDS has no mip %u: mipCount=%u\n", image->name, @@ -514,7 +365,7 @@ void Image_Replace(game::GfxImage *image) if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) return; - const bool ddsIsCubemap = DDSIsCubemap(ddsImage); + const bool ddsIsCubemap = ddsImage.IsCubemap(); const bool ddsMatchesImageDimensions = image->width == ddsImage.header.width && image->height == ddsImage.header.height; const bool ddsMatchesStreamDimensions = image->streaming && image->mapType == game::MAPTYPE_2D && !ddsIsCubemap && @@ -541,7 +392,7 @@ void Image_Replace(game::GfxImage *image) return; } - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (ddsMipCount < 2u) { game::Com_PrintError(CON_CHANNEL_ERROR, @@ -671,7 +522,7 @@ bool R_StreamLoadImageReplacement(game::GfxImage *image, double imageDistSq) const uint32_t streamWidth = static_cast(image->width) * 2u; const uint32_t streamHeight = static_cast(image->height) * 2u; - if (DDSIsCubemap(ddsImage) || ddsImage.header.width != streamWidth || ddsImage.header.height != streamHeight) + if (ddsImage.IsCubemap() || ddsImage.header.width != streamWidth || ddsImage.header.height != streamHeight) { game::Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadImageReplacement: Image '%s' dimensions do not match streamed mip: " @@ -680,12 +531,12 @@ bool R_StreamLoadImageReplacement(game::GfxImage *image, double imageDistSq) return true; } - if (GetDDSMipCount(ddsImage) < 2u) + if (ddsImage.GetMipCount() < 2u) { game::Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadImageReplacement: Image '%s' replacement DDS must include stream and " "resident mips: mipCount=%u\n", - image->name, GetDDSMipCount(ddsImage)); + image->name, ddsImage.GetMipCount()); return true; } diff --git a/src/image/dds_image.cpp b/src/image/dds_image.cpp new file mode 100644 index 00000000..c3aae9cb --- /dev/null +++ b/src/image/dds_image.cpp @@ -0,0 +1,181 @@ +#include "pch.h" +#include "image/dds_image.h" + +namespace image +{ +namespace +{ +const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); +const uint32_t DDPF_ALPHAPIXELS = 0x1; +const uint32_t DDPF_FOURCC = 0x4; +const uint32_t DDPF_RGB = 0x40; +const uint32_t DDPF_LUMINANCE = 0x20000; + +const uint32_t DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'); +const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); +const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); +const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); + +const uint32_t DDSCAPS2_CUBEMAP = 0x200; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; +const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; +const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; +const uint32_t DDSCAPS2_CUBEMAP_ALL_FACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | + DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | + DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; + +void SwapDdsHeaderEndian(DdsHeader &header) +{ + header.magic = _byteswap_ulong(header.magic); + header.size = _byteswap_ulong(header.size); + header.flags = _byteswap_ulong(header.flags); + header.height = _byteswap_ulong(header.height); + header.width = _byteswap_ulong(header.width); + header.pitchOrLinearSize = _byteswap_ulong(header.pitchOrLinearSize); + header.depth = _byteswap_ulong(header.depth); + header.mipMapCount = _byteswap_ulong(header.mipMapCount); + + for (int i = 0; i < 11; i++) + header.reserved1[i] = _byteswap_ulong(header.reserved1[i]); + + header.pixelFormat.size = _byteswap_ulong(header.pixelFormat.size); + header.pixelFormat.flags = _byteswap_ulong(header.pixelFormat.flags); + header.pixelFormat.fourCC = _byteswap_ulong(header.pixelFormat.fourCC); + header.pixelFormat.rgbBitCount = _byteswap_ulong(header.pixelFormat.rgbBitCount); + header.pixelFormat.rBitMask = _byteswap_ulong(header.pixelFormat.rBitMask); + header.pixelFormat.gBitMask = _byteswap_ulong(header.pixelFormat.gBitMask); + header.pixelFormat.bBitMask = _byteswap_ulong(header.pixelFormat.bBitMask); + header.pixelFormat.aBitMask = _byteswap_ulong(header.pixelFormat.aBitMask); + + header.caps = _byteswap_ulong(header.caps); + header.caps2 = _byteswap_ulong(header.caps2); + header.caps3 = _byteswap_ulong(header.caps3); + header.caps4 = _byteswap_ulong(header.caps4); + header.reserved2 = _byteswap_ulong(header.reserved2); +} +} // namespace + +bool DdsImage::IsValid() const +{ + return header.magic == DDS_MAGIC && header.size == DDS_HEADER_SIZE && + header.pixelFormat.size == DDS_PIXEL_FORMAT_SIZE && !data.empty(); +} + +bool DdsImage::IsCubemap() const +{ + return (header.caps2 & DDSCAPS2_CUBEMAP) != 0 || + (header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; +} + +uint32_t DdsImage::GetMipCount() const +{ + return max(1u, static_cast(header.mipMapCount)); +} + +bool DdsImage::GetGpuFormat(GPUTEXTUREFORMAT *format) const +{ + if (format == NULL) + return false; + + if ((header.pixelFormat.flags & DDPF_FOURCC) != 0) + { + switch (header.pixelFormat.fourCC) + { + case DXT1_FOURCC: + *format = GPUTEXTUREFORMAT_DXT1; + return true; + case DXT3_FOURCC: + *format = GPUTEXTUREFORMAT_DXT2_3; + return true; + case DXT5_FOURCC: + *format = GPUTEXTUREFORMAT_DXT4_5; + return true; + case DXN_FOURCC: + *format = GPUTEXTUREFORMAT_DXN; + return true; + default: + return false; + } + } + + if ((header.pixelFormat.flags & DDPF_LUMINANCE) != 0) + { + if (header.pixelFormat.rgbBitCount == 8 && header.pixelFormat.rBitMask == 0x000000FF) + { + *format = GPUTEXTUREFORMAT_8; + return true; + } + + if ((header.pixelFormat.flags & DDPF_ALPHAPIXELS) != 0 && header.pixelFormat.rgbBitCount == 16 && + header.pixelFormat.rBitMask == 0x000000FF && header.pixelFormat.gBitMask == 0x0000FF00) + { + *format = GPUTEXTUREFORMAT_8_8; + return true; + } + } + + if ((header.pixelFormat.flags & DDPF_RGB) != 0 && (header.pixelFormat.flags & DDPF_ALPHAPIXELS) != 0 && + header.pixelFormat.rgbBitCount == 32 && header.pixelFormat.rBitMask == 0x00FF0000 && + header.pixelFormat.gBitMask == 0x0000FF00 && header.pixelFormat.bBitMask == 0x000000FF && + header.pixelFormat.aBitMask == 0xFF000000) + { + *format = GPUTEXTUREFORMAT_8_8_8_8; + return true; + } + + return false; +} + +DdsImage LoadDdsFromFile(const std::string &path) +{ + DdsImage image = {}; + std::ifstream file(path.c_str(), std::ios::binary); + + if (!file.is_open()) + return image; + + file.read(reinterpret_cast(&image.header), sizeof(DdsHeader)); + if (!file || file.gcount() != sizeof(DdsHeader)) + return DdsImage(); + + if (_byteswap_ulong(image.header.magic) != DDS_MAGIC) + return DdsImage(); + + SwapDdsHeaderEndian(image.header); + + file.seekg(0, std::ios::end); + const std::streampos fileSize = file.tellg(); + if (fileSize == std::streampos(-1) || fileSize < static_cast(sizeof(DdsHeader))) + return DdsImage(); + + file.seekg(sizeof(DdsHeader), std::ios::beg); + const size_t dataSize = static_cast(fileSize) - sizeof(DdsHeader); + image.data.resize(dataSize); + + if (dataSize > 0) + { + file.read(reinterpret_cast(&image.data[0]), dataSize); + if (!file || static_cast(file.gcount()) != dataSize) + return DdsImage(); + } + + return image; +} + +bool LoadDdsFromFile(const std::string &path, DdsImage *out) +{ + if (out == NULL) + return false; + + *out = LoadDdsFromFile(path); + return out->IsValid(); +} + +uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel) +{ + return max(1u, dimension >> mipLevel); +} +} // namespace image diff --git a/src/image/dds_image.h b/src/image/dds_image.h new file mode 100644 index 00000000..3165bb83 --- /dev/null +++ b/src/image/dds_image.h @@ -0,0 +1,57 @@ +#pragma once + +#include +#include +#include + +namespace image +{ +const uint32_t DDS_HEADER_SIZE = 124u; +const uint32_t DDS_PIXEL_FORMAT_SIZE = 32u; + +struct DdsHeader +{ + uint32_t magic; + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; + uint32_t mipMapCount; + uint32_t reserved1[11]; + struct + { + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t rgbBitCount; + uint32_t rBitMask; + uint32_t gBitMask; + uint32_t bBitMask; + uint32_t aBitMask; + } pixelFormat; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +static_assert(sizeof(DdsHeader) == 128, ""); + +struct DdsImage +{ + DdsHeader header; + std::vector data; + + bool IsValid() const; + bool IsCubemap() const; + uint32_t GetMipCount() const; + bool GetGpuFormat(GPUTEXTUREFORMAT *format) const; +}; + +DdsImage LoadDdsFromFile(const std::string &path); +bool LoadDdsFromFile(const std::string &path, DdsImage *out); +uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel); +} // namespace image From c8690c39e3d5c176f2b3825103e3a3dbcf2318a0 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 09:28:36 +0100 Subject: [PATCH 06/20] refactor: split dds types --- src/game/iw3/mp/components/image_loader.cpp | 128 +++++++------ .../iw4/mp_tu6/components/image_loader.cpp | 148 +++++++------- src/game/t4/mp/components/image_loader.cpp | 122 ++++++------ src/image/dds_image.cpp | 181 ------------------ src/image/dds_image.h | 57 ------ src/image/dds_loader.cpp | 167 ++++++++++++++++ src/image/dds_loader.h | 12 ++ src/image/dds_types.h | 107 +++++++++++ src/{ => image}/xenos_texture.cpp | 5 +- src/{ => image}/xenos_texture.h | 3 + 10 files changed, 499 insertions(+), 431 deletions(-) delete mode 100644 src/image/dds_image.cpp delete mode 100644 src/image/dds_image.h create mode 100644 src/image/dds_loader.cpp create mode 100644 src/image/dds_loader.h create mode 100644 src/image/dds_types.h rename src/{ => image}/xenos_texture.cpp (99%) rename src/{ => image}/xenos_texture.h (98%) diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index eee098eb..7b31cc39 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -2,7 +2,7 @@ #include "common/config.h" #include "command.h" #include "image_loader.h" -#include "xenos_texture.h" +#include "image/xenos_texture.h" // Forgive me for this dreadful code. It was hacked together until semi working and not touched since. // TODO: refactor and generalise for the other games. @@ -237,7 +237,7 @@ size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTU for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) { const uint32_t mipLevel = firstMipLevel + localMipLevel; - const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); + const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); if (levelSize == 0) return 0; @@ -253,7 +253,7 @@ uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) { - const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); + const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); if (levelSize == 0) return 0; @@ -270,7 +270,7 @@ size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXT for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) { - const uint32_t levelSize = xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); + const uint32_t levelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); if (levelSize == 0) return 0; @@ -295,7 +295,8 @@ bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const DDSImage &d if (ddsImage.data.size() < *requiredDDSSize) return false; - const uint32_t baseSize = xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 1u); + const uint32_t baseSize = + image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 1u); const size_t mipBytes = CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); *requiredTextureBytes = static_cast(baseSize) + mipBytes; @@ -361,13 +362,13 @@ void Image_DbgPrint(const GfxImage *image) break; } - const xenos_texture::TextureFormatInfo *formatInfo = - xenos_texture::GetTextureFormatInfo(image->texture.basemap->Format.DataFormat); - const uint32_t MipTailBaseLevel = xenos_texture::GetMipTailBaseLevel(image->width, image->height); - const uint32_t MipLevelCount = xenos_texture::GetTextureLevelCount(image->texture.basemap); + const image::xenos_texture::TextureFormatInfo *formatInfo = + image::xenos_texture::GetTextureFormatInfo(image->texture.basemap->Format.DataFormat); + const uint32_t MipTailBaseLevel = image::xenos_texture::GetMipTailBaseLevel(image->width, image->height); + const uint32_t MipLevelCount = image::xenos_texture::GetTextureLevelCount(image->texture.basemap); const uint32_t faceCount = image->mapType == MAPTYPE_CUBE ? 6u : 1u; const uint32_t BaseSize = - xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); + image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); const uint32_t bitsPerPixel = formatInfo != NULL ? formatInfo->bitsPerPixel : 0u; const uint32_t bytesPerBlock = formatInfo != NULL ? formatInfo->bytesPerBlock : 0u; @@ -404,7 +405,7 @@ void Image_Dump(const GfxImage *image) const uint32_t faceCount = image->mapType == MAPTYPE_CUBE ? 6u : 1u; uint32_t BaseSize = - xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); + image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); DDSHeader header; memset(&header, 0, sizeof(DDSHeader)); @@ -415,7 +416,7 @@ void Image_Dump(const GfxImage *image) header.height = _byteswap_ulong(image->height); header.width = _byteswap_ulong(image->width); header.depth = _byteswap_ulong(image->depth); - header.mipMapCount = _byteswap_ulong(xenos_texture::GetTextureLevelCount(image->texture.basemap)); + header.mipMapCount = _byteswap_ulong(image::xenos_texture::GetTextureLevelCount(image->texture.basemap)); auto format = image->texture.basemap->Format.DataFormat; switch (format) @@ -524,15 +525,15 @@ void Image_Dump(const GfxImage *image) unsigned char *face_pixels = image->pixels + (i * face_size); // Offset for each face std::vector swappedFace(face_pixels, face_pixels + face_size); - xenos_texture::ApplyGpuEndian(swappedFace.data(), swappedFace.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(swappedFace.data(), swappedFace.size(), + static_cast(image->texture.basemap->Format.Endian)); // Create buffer for linear texture data std::vector linearFace(face_size); - if (!xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), - image->texture.basemap->Format.Pitch, linearFace.data(), rowPitch, - swappedFace.data())) + if (!image::xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), + image->texture.basemap->Format.Pitch, linearFace.data(), + rowPitch, swappedFace.data())) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile cube image '%s' face %d\n", image->name, i); @@ -551,8 +552,8 @@ void Image_Dump(const GfxImage *image) std::vector pixelData(image->pixels, image->pixels + image->baseSize); - xenos_texture::ApplyGpuEndian(pixelData.data(), pixelData.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(pixelData.data(), pixelData.size(), + static_cast(image->texture.basemap->Format.Endian)); // Create a linear data buffer to hold the untiled texture std::vector linearData(image->baseSize); @@ -584,9 +585,9 @@ void Image_Dump(const GfxImage *image) return; } - if (!xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), - image->texture.basemap->Format.Pitch, linearData.data(), rowPitch, - pixelData.data())) + if (!image::xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), + image->texture.basemap->Format.Pitch, linearData.data(), rowPitch, + pixelData.data())) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile image '%s'\n", image->name); return; @@ -752,8 +753,8 @@ void Cmd_imagedump() output_file.write(reinterpret_cast(&header), sizeof(DDSHeader)); - xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), + static_cast(image->texture.basemap->Format.Endian)); // Calculate row pitch based on format uint32_t rowPitch; @@ -786,8 +787,8 @@ void Cmd_imagedump() std::vector linearData(buffer.size()); std::vector bufferAsUint8(buffer.begin(), buffer.end()); - if (!xenos_texture::UntileTextureLevel(width, height, 0, static_cast(format), 0, linearData.data(), - rowPitch, bufferAsUint8.data())) + if (!image::xenos_texture::UntileTextureLevel(width, height, 0, static_cast(format), 0, + linearData.data(), rowPitch, bufferAsUint8.data())) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile highmip image '%s'\n", assetName.c_str()); continue; @@ -809,9 +810,9 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFir } const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); - const uint32_t levelCount = xenos_texture::GetTextureLevelCount(image->texture.basemap); + const uint32_t levelCount = image::xenos_texture::GetTextureLevelCount(image->texture.basemap); const uint32_t mipTailBaseLevel = image->texture.basemap->Format.PackedMips != 0 - ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) + ? image::xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); if (ddsFirstMipLevel >= ddsMipCount) @@ -823,9 +824,9 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFir const uint32_t replaceLevelCount = min(levelCount, ddsMipCount - ddsFirstMipLevel); const uint32_t nonPackedLevelCount = max(1u, min(replaceLevelCount, mipTailBaseLevel)); - unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); - unsigned char *mipData = - xenos_texture::GetTextureMipBase(image->texture.basemap, baseData, image->width, image->height, format, 1u); + unsigned char *baseData = image::xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); + unsigned char *mipData = image::xenos_texture::GetTextureMipBase(image->texture.basemap, baseData, image->width, + image->height, format, 1u); size_t requiredDDSSize = 0; size_t requiredTextureBytes = 0; @@ -864,10 +865,10 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFir for (uint32_t localMipLevel = 0; localMipLevel < nonPackedLevelCount; localMipLevel++) { const uint32_t ddsMipLevel = ddsFirstMipLevel + localMipLevel; - uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, ddsMipLevel, format); - uint32_t ddsMipLevelSize = - xenos_texture::CalculateLinearLevelSize(ddsImage.header.width, ddsImage.header.height, ddsMipLevel, format); - uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize( + uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, ddsMipLevel, format); + uint32_t ddsMipLevelSize = image::xenos_texture::CalculateLinearLevelSize( + ddsImage.header.width, ddsImage.header.height, ddsMipLevel, format); + uint32_t tiledMipLevelSize = image::xenos_texture::CalculateTiledLevelSize( image->width, image->height, localMipLevel, format, image->texture.basemap->Format.Pitch); if (ddsMipLevelSize == 0 || tiledMipLevelSize == 0 || rowPitch == 0) @@ -888,21 +889,21 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFir std::vector levelData(ddsImage.data.begin() + ddsOffset, ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); - xenos_texture::ApplyGpuEndian(levelData.data(), levelData.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(levelData.data(), levelData.size(), + static_cast(image->texture.basemap->Format.Endian)); unsigned char *destination = baseData; if (localMipLevel > 0) { - destination = mipData + xenos_texture::CalculateMipLevelOffset(image->width, image->height, localMipLevel, - format, 1u); + destination = mipData + image::xenos_texture::CalculateMipLevelOffset(image->width, image->height, + localMipLevel, format, 1u); } std::vector tiledData(tiledMipLevelSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, format, - image->texture.basemap->Format.Pitch, tiledData.data(), tiledData.size(), - levelData.data(), levelData.size(), rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, format, + image->texture.basemap->Format.Pitch, tiledData.data(), + tiledData.size(), levelData.data(), levelData.size(), rowPitch)) { Com_PrintError( CON_CHANNEL_ERROR, @@ -929,13 +930,13 @@ bool Image_Replace_Cube(GfxImage *image, const DDSImage &ddsImage) const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); - unsigned int face_size = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0, format); - unsigned int rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, 0, format); - unsigned int tiledFaceSize = xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0, format, - image->texture.basemap->Format.Pitch); + unsigned int face_size = image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0, format); + unsigned int rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0, format); + unsigned int tiledFaceSize = image::xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0, format, + image->texture.basemap->Format.Pitch); unsigned int tiledBaseSize = - xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 6u); - unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); + image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 6u); + unsigned char *baseData = image::xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); if (face_size == 0 || rowPitch == 0 || tiledFaceSize == 0 || tiledBaseSize < tiledFaceSize * 6u) { @@ -981,9 +982,9 @@ bool Image_Replace_Cube(GfxImage *image, const DDSImage &ddsImage) // Create a buffer for the tiled texture data std::vector tiledData(tiledFaceSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, 0, static_cast(format), - image->texture.basemap->Format.Pitch, tiledData.data(), tiledData.size(), - face_pixels, face_size, rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0, static_cast(format), + image->texture.basemap->Format.Pitch, tiledData.data(), + tiledData.size(), face_pixels, face_size, rowPitch)) { Com_PrintError( CON_CHANNEL_ERROR, @@ -992,8 +993,8 @@ bool Image_Replace_Cube(GfxImage *image, const DDSImage &ddsImage) return false; } - xenos_texture::ApplyGpuEndian(tiledData.data(), tiledData.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(tiledData.data(), tiledData.size(), + static_cast(image->texture.basemap->Format.Endian)); // Copy the data to the image memcpy(face_destination, tiledData.data(), tiledFaceSize); @@ -1091,7 +1092,8 @@ void Image_Replace(GfxImage *image) if (image->mapType == MAPTYPE_CUBE && !ddsIsCubemap) { - const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0, ddsFormat); + const uint32_t faceSize = + image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0, ddsFormat); if (faceSize == 0 || ddsImage.data.size() < static_cast(faceSize) * 6u) { Com_PrintError(CON_CHANNEL_ERROR, @@ -1242,11 +1244,11 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe return false; } - const uint32_t sourceSize = - xenos_texture::CalculateLinearLevelSize(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat); - const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, 0u, ddsFormat); - const uint32_t tiledSize = - xenos_texture::CalculateTiledLevelSize(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat, 0u); + const uint32_t sourceSize = image::xenos_texture::CalculateLinearLevelSize( + ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, 0u, ddsFormat); + const uint32_t tiledSize = image::xenos_texture::CalculateTiledLevelSize( + ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat, 0u); if (sourceSize == 0 || rowPitch == 0 || tiledSize == 0) { @@ -1273,11 +1275,11 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe } std::vector buffer(ddsImage.data.begin(), ddsImage.data.begin() + sourceSize); - xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), + static_cast(image->texture.basemap->Format.Endian)); - if (!xenos_texture::TileTextureLevel(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat, 0u, outData, - bytesToRead, buffer.data(), buffer.size(), rowPitch)) + if (!image::xenos_texture::TileTextureLevel(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat, 0u, + outData, bytesToRead, buffer.data(), buffer.size(), rowPitch)) { Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Failed to tile image '%s'\n", asset_name.c_str()); diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index 24270518..4ee7cf4e 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -2,8 +2,8 @@ #include "common/config.h" #include "events.h" #include "image_loader.h" -#include "image/dds_image.h" -#include "xenos_texture.h" +#include "image/dds_loader.h" +#include "image/xenos_texture.h" #ifndef INVALID_FILE_ATTRIBUTES #define INVALID_FILE_ATTRIBUTES ((DWORD) - 1) @@ -71,19 +71,19 @@ bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, co return false; } - if (ddsImage.header.size != image::DDS_HEADER_SIZE || - ddsImage.header.pixelFormat.size != image::DDS_PIXEL_FORMAT_SIZE) + if (ddsImage.header.dwSize != image::DDS_HEADER_SIZE || + ddsImage.header.ddspf.dwSize != image::DDS_PIXEL_FORMAT_SIZE) { PrintImageError("image '%s' has an invalid DDS header: size=%u pixelFormatSize=%u\n", image->name, - ddsImage.header.size, ddsImage.header.pixelFormat.size); + ddsImage.header.dwSize, ddsImage.header.ddspf.dwSize); return false; } if (!ddsImage.GetGpuFormat(ddsFormat)) { PrintImageError("image '%s' has an unsupported DDS format: flags=0x%X fourCC=0x%X bitCount=%u\n", image->name, - ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC, - ddsImage.header.pixelFormat.rgbBitCount); + ddsImage.header.ddspf.dwFlags, ddsImage.header.ddspf.dwFourCC, + ddsImage.header.ddspf.dwRGBBitCount); return false; } @@ -106,7 +106,7 @@ size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTU for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) { const uint32_t mipLevel = firstMipLevel + localMipLevel; - const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); + const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); if (levelSize == 0) return 0; @@ -122,7 +122,7 @@ uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) { - const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); + const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); if (levelSize == 0) return 0; @@ -139,7 +139,7 @@ size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXT for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) { - const uint32_t levelSize = xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); + const uint32_t levelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); if (levelSize == 0) return 0; @@ -161,7 +161,7 @@ bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsI return false; const D3DBaseTexture *texture = &image->texture.basemap; - const uint32_t baseSize = xenos_texture::CalculateBaseSize(texture, image->width, image->height, 1u); + const uint32_t baseSize = image::xenos_texture::CalculateBaseSize(texture, image->width, image->height, 1u); const size_t mipBytes = CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); @@ -189,8 +189,8 @@ bool ValidateResidentMipCount(const game::GfxImage *image, const DDSImage &ddsIm bool ValidateDDSDataSize(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t mipCount, uint32_t faceCount) { - const size_t expectedSize = - CalculateRequiredLinearDataSize(ddsImage.header.width, ddsImage.header.height, format, 0u, mipCount, faceCount); + const size_t expectedSize = CalculateRequiredLinearDataSize(ddsImage.header.dwWidth, ddsImage.header.dwHeight, + format, 0u, mipCount, faceCount); if (expectedSize == 0) { PrintImageError("image '%s' has unsupported DDS dimensions or format\n", image->name); @@ -249,18 +249,19 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) const D3DBaseTexture *texture = &image->texture.basemap; const GPUTEXTUREFORMAT format = static_cast(texture->Format.DataFormat); - const uint32_t levelCount = xenos_texture::GetTextureLevelCount(texture); - const uint32_t mipTailBaseLevel = - texture->Format.PackedMips != 0 ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; + const uint32_t levelCount = image::xenos_texture::GetTextureLevelCount(texture); + const uint32_t mipTailBaseLevel = texture->Format.PackedMips != 0 + ? image::xenos_texture::GetMipTailBaseLevel(image->width, image->height) + : levelCount; if (!ValidateResidentMipCount(image, ddsImage, levelCount)) return false; if (!ValidateDDSDataSize(image, ddsImage, format, levelCount, 1u)) return false; const uint32_t nonPackedLevelCount = max(1u, min(levelCount, mipTailBaseLevel)); - unsigned char *baseData = xenos_texture::GetTextureBase(texture, image->pixels); + unsigned char *baseData = image::xenos_texture::GetTextureBase(texture, image->pixels); unsigned char *mipData = - xenos_texture::GetTextureMipBase(texture, baseData, image->width, image->height, format, 1u); + image::xenos_texture::GetTextureMipBase(texture, baseData, image->width, image->height, format, 1u); size_t requiredDDSSize = 0; size_t requiredTextureBytes = 0; @@ -298,11 +299,11 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) for (uint32_t mipLevel = 0; mipLevel < nonPackedLevelCount; ++mipLevel) { - const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, mipLevel, format); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, mipLevel, format); const uint32_t ddsMipLevelSize = - xenos_texture::CalculateLinearLevelSize(image->width, image->height, mipLevel, format); - const uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize(image->width, image->height, mipLevel, - format, texture->Format.Pitch); + image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, mipLevel, format); + const uint32_t tiledMipLevelSize = image::xenos_texture::CalculateTiledLevelSize( + image->width, image->height, mipLevel, format, texture->Format.Pitch); if (ddsMipLevelSize == 0 || tiledMipLevelSize == 0 || rowPitch == 0) { @@ -319,19 +320,20 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) std::vector levelData(ddsImage.data.begin() + ddsOffset, ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); - xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), static_cast(texture->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), + static_cast(texture->Format.Endian)); unsigned char *destination = baseData; if (mipLevel > 0) { - destination = - mipData + xenos_texture::CalculateMipLevelOffset(image->width, image->height, mipLevel, format, 1u); + destination = mipData + image::xenos_texture::CalculateMipLevelOffset(image->width, image->height, mipLevel, + format, 1u); } std::vector tiledData(tiledMipLevelSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, mipLevel, format, texture->Format.Pitch, - &tiledData[0], tiledData.size(), &levelData[0], levelData.size(), - rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, mipLevel, format, + texture->Format.Pitch, &tiledData[0], tiledData.size(), + &levelData[0], levelData.size(), rowPitch)) { PrintImageError("failed to tile image '%s' mip level %u\n", image->name, mipLevel); return false; @@ -354,13 +356,13 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) const D3DBaseTexture *texture = &image->texture.basemap; const GPUTEXTUREFORMAT format = static_cast(texture->Format.DataFormat); - const uint32_t levelCount = xenos_texture::GetTextureLevelCount(texture); - const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); - const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); + const uint32_t levelCount = image::xenos_texture::GetTextureLevelCount(texture); + const uint32_t faceSize = image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); const uint32_t tiledFaceSize = - xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, format, texture->Format.Pitch); - const uint32_t tiledBaseSize = xenos_texture::CalculateBaseSize(texture, image->width, image->height, 6u); - unsigned char *baseData = xenos_texture::GetTextureBase(texture, image->pixels); + image::xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, format, texture->Format.Pitch); + const uint32_t tiledBaseSize = image::xenos_texture::CalculateBaseSize(texture, image->width, image->height, 6u); + unsigned char *baseData = image::xenos_texture::GetTextureBase(texture, image->pixels); if (faceSize == 0 || rowPitch == 0 || tiledFaceSize == 0 || tiledBaseSize < tiledFaceSize * 6u) { @@ -408,14 +410,15 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) unsigned char *faceDestination = baseData + (faceIndex * tiledFaceSize); std::vector tiledData(tiledFaceSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, 0u, format, texture->Format.Pitch, - &tiledData[0], tiledData.size(), facePixels, faceSize, rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0u, format, texture->Format.Pitch, + &tiledData[0], tiledData.size(), facePixels, faceSize, rowPitch)) { PrintImageError("failed to tile cube image '%s' face %u\n", image->name, faceIndex); return false; } - xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), static_cast(texture->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), + static_cast(texture->Format.Endian)); memcpy(faceDestination, &tiledData[0], tiledFaceSize); } @@ -438,8 +441,8 @@ bool ValidateReplacementShape(const game::GfxImage *image, const DDSImage &ddsIm if (!ddsImage.GetGpuFormat(&ddsFormat)) return false; - const uint32_t faceSize = - xenos_texture::CalculateLinearLevelSize(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat); + const uint32_t faceSize = image::xenos_texture::CalculateLinearLevelSize( + ddsImage.header.dwWidth, ddsImage.header.dwHeight, 0u, ddsFormat); if (faceSize == 0 || ddsImage.data.size() < static_cast(faceSize) * 6u) { PrintImageError("image '%s' is a cubemap but replacement DDS is not a valid 6-face cubemap\n", image->name); @@ -473,10 +476,10 @@ void Image_Replace(game::GfxImage *image) if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) return; - if (image->width != ddsImage.header.width || image->height != ddsImage.header.height) + if (image->width != ddsImage.header.dwWidth || image->height != ddsImage.header.dwHeight) { PrintImageError("image '%s' dimensions do not match DDS: image=%ux%u dds=%ux%u\n", image->name, image->width, - image->height, ddsImage.header.width, ddsImage.header.height); + image->height, ddsImage.header.dwWidth, ddsImage.header.dwHeight); return; } @@ -501,8 +504,8 @@ bool FindMipLevelForDimensions(const DDSImage &ddsImage, uint32_t width, uint32_ for (uint32_t currentMip = 0; currentMip < ddsMipCount; ++currentMip) { - if (image::GetMipDimension(ddsImage.header.width, currentMip) == width && - image::GetMipDimension(ddsImage.header.height, currentMip) == height) + if (image::GetMipDimension(ddsImage.header.dwWidth, currentMip) == width && + image::GetMipDimension(ddsImage.header.dwHeight, currentMip) == height) { *mipLevel = currentMip; return true; @@ -516,21 +519,21 @@ bool ValidateStreamReplacementData(const game::GfxImage *image, const DDSImage & uint32_t startMipLevel, uint32_t levelCount, uint32_t basePitch, size_t *requiredDDSSize, size_t *requiredTextureBytes) { - *requiredDDSSize = CalculateRequiredLinearDataSize(ddsImage.header.width, ddsImage.header.height, format, + *requiredDDSSize = CalculateRequiredLinearDataSize(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, startMipLevel, levelCount, 1u); if (*requiredDDSSize == 0) return false; const uint32_t ddsOffset = - CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, startMipLevel); + CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, startMipLevel); if (static_cast(ddsOffset) + *requiredDDSSize > ddsImage.data.size()) return false; *requiredTextureBytes = 0; for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) { - const uint32_t levelSize = - xenos_texture::CalculateTiledLevelSize(image->width, image->height, localMipLevel, format, basePitch); + const uint32_t levelSize = image::xenos_texture::CalculateTiledLevelSize(image->width, image->height, + localMipLevel, format, basePitch); if (levelSize == 0) return false; @@ -553,10 +556,10 @@ bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImag return false; } - if (image->width != ddsImage.header.width || image->height != ddsImage.header.height) + if (image->width != ddsImage.header.dwWidth || image->height != ddsImage.header.dwHeight) { PrintImageError("streamed cube image '%s' dimensions do not match DDS: image=%ux%u dds=%ux%u\n", image->name, - image->width, image->height, ddsImage.header.width, ddsImage.header.height); + image->width, image->height, ddsImage.header.dwWidth, ddsImage.header.dwHeight); return false; } @@ -571,10 +574,11 @@ bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImag if (!ValidateDDSDataSize(image, ddsImage, ddsFormat, 1u, 6u)) return false; - const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, 0u, ddsFormat); - const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, ddsFormat); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, ddsFormat); + const uint32_t faceSize = + image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, ddsFormat); const uint32_t tiledFaceSize = - xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, ddsFormat, 0u); + image::xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, ddsFormat, 0u); const size_t requiredTextureBytes = static_cast(tiledFaceSize) * 6u; if (rowPitch == 0 || faceSize == 0 || tiledFaceSize == 0) @@ -597,15 +601,15 @@ bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImag const unsigned char *facePixels = &ddsImage.data[faceIndex * faceSize]; std::vector tiledData(tiledFaceSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, 0u, ddsFormat, 0u, &tiledData[0], - tiledData.size(), facePixels, faceSize, rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0u, ddsFormat, 0u, &tiledData[0], + tiledData.size(), facePixels, faceSize, rowPitch)) { PrintImageError("failed to tile streamed cube image '%s' face %u\n", image->name, faceIndex); return false; } - xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), - static_cast(image->texture.basemap.Format.Endian)); + image::xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), + static_cast(image->texture.basemap.Format.Endian)); memcpy(image->pixels + static_cast(faceIndex) * tiledFaceSize, &tiledData[0], tiledFaceSize); } @@ -652,8 +656,8 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u if (!FindMipLevelForDimensions(ddsImage, image->width, image->height, &startMipLevel)) { PrintImageError("streamed image '%s' part %u dimensions do not exist in DDS: part=%ux%u dds=%ux%u\n", - image->name, imagePartIndex, image->width, image->height, ddsImage.header.width, - ddsImage.header.height); + image->name, imagePartIndex, image->width, image->height, ddsImage.header.dwWidth, + ddsImage.header.dwHeight); return false; } @@ -663,11 +667,12 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u levelCount = max(1u, static_cast(image->levelCount)); const D3DBaseTexture *texture = &image->texture.basemap; - const uint32_t textureLevelCount = xenos_texture::GetTextureLevelCount(texture); + const uint32_t textureLevelCount = image::xenos_texture::GetTextureLevelCount(texture); levelCount = max(1u, min(levelCount, textureLevelCount)); - const uint32_t mipTailBaseLevel = - texture->Format.PackedMips != 0 ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; + const uint32_t mipTailBaseLevel = texture->Format.PackedMips != 0 + ? image::xenos_texture::GetMipTailBaseLevel(image->width, image->height) + : levelCount; const uint32_t replaceLevelCount = max(1u, min(levelCount, mipTailBaseLevel)); if (startMipLevel + replaceLevelCount > ddsMipCount) @@ -690,17 +695,18 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u return false; } - uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, ddsFormat, startMipLevel); + uint32_t ddsOffset = + CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, ddsFormat, startMipLevel); size_t destinationOffset = 0; for (uint32_t localMipLevel = 0; localMipLevel < replaceLevelCount; ++localMipLevel) { const uint32_t globalMipLevel = startMipLevel + localMipLevel; const uint32_t rowPitch = - xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, globalMipLevel, ddsFormat); - const uint32_t ddsMipLevelSize = xenos_texture::CalculateLinearLevelSize( - ddsImage.header.width, ddsImage.header.height, globalMipLevel, ddsFormat); - const uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize( + image::xenos_texture::CalculateLinearRowPitch(ddsImage.header.dwWidth, globalMipLevel, ddsFormat); + const uint32_t ddsMipLevelSize = image::xenos_texture::CalculateLinearLevelSize( + ddsImage.header.dwWidth, ddsImage.header.dwHeight, globalMipLevel, ddsFormat); + const uint32_t tiledMipLevelSize = image::xenos_texture::CalculateTiledLevelSize( image->width, image->height, localMipLevel, ddsFormat, streamBasePitch); if (rowPitch == 0 || ddsMipLevelSize == 0 || tiledMipLevelSize == 0) @@ -720,13 +726,13 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u std::vector levelData(ddsImage.data.begin() + ddsOffset, ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); - xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), - static_cast(image->texture.basemap.Format.Endian)); + image::xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), + static_cast(image->texture.basemap.Format.Endian)); std::vector tiledData(tiledMipLevelSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, ddsFormat, streamBasePitch, - &tiledData[0], tiledData.size(), &levelData[0], levelData.size(), - rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, ddsFormat, + streamBasePitch, &tiledData[0], tiledData.size(), &levelData[0], + levelData.size(), rowPitch)) { PrintImageError("failed to tile streamed image '%s' part %u mip %u\n", image->name, imagePartIndex, localMipLevel); diff --git a/src/game/t4/mp/components/image_loader.cpp b/src/game/t4/mp/components/image_loader.cpp index a4f1f5ff..ca9fc3e4 100644 --- a/src/game/t4/mp/components/image_loader.cpp +++ b/src/game/t4/mp/components/image_loader.cpp @@ -1,8 +1,8 @@ #include "pch.h" #include "common/config.h" #include "image_loader.h" -#include "image/dds_image.h" -#include "xenos_texture.h" +#include "image/dds_loader.h" +#include "image/xenos_texture.h" namespace { @@ -35,18 +35,18 @@ bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, co return false; } - if (ddsImage.header.size != image::DDS_HEADER_SIZE || - ddsImage.header.pixelFormat.size != image::DDS_PIXEL_FORMAT_SIZE) + if (ddsImage.header.dwSize != image::DDS_HEADER_SIZE || + ddsImage.header.ddspf.dwSize != image::DDS_PIXEL_FORMAT_SIZE) { game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an invalid DDS header: size=%u pixelFormatSize=%u\n", - image->name, ddsImage.header.size, ddsImage.header.pixelFormat.size); + image->name, ddsImage.header.dwSize, ddsImage.header.ddspf.dwSize); return false; } if (!ddsImage.GetGpuFormat(ddsFormat)) { game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an unsupported DDS format: flags=0x%X fourCC=0x%X\n", - image->name, ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC); + image->name, ddsImage.header.ddspf.dwFlags, ddsImage.header.ddspf.dwFourCC); return false; } @@ -69,7 +69,7 @@ size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTU for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) { const uint32_t mipLevel = firstMipLevel + localMipLevel; - const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); + const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); if (levelSize == 0) return 0; @@ -85,7 +85,7 @@ uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) { - const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); + const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); if (levelSize == 0) return 0; @@ -102,7 +102,7 @@ size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXT for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) { - const uint32_t levelSize = xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); + const uint32_t levelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); if (levelSize == 0) return 0; @@ -117,9 +117,9 @@ bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsI size_t *requiredTextureBytes) { const size_t ddsMipOffset = - CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel); + CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); const size_t requiredLinearSize = CalculateRequiredLinearDataSize( - ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel, replacementLevelCount, 1u); + ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel, replacementLevelCount, 1u); *requiredDDSSize = ddsMipOffset + requiredLinearSize; if (requiredLinearSize == 0 || (ddsFirstMipLevel > 0 && ddsMipOffset == 0)) return false; @@ -127,7 +127,8 @@ bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsI if (ddsImage.data.size() < *requiredDDSSize) return false; - const uint32_t baseSize = xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 1u); + const uint32_t baseSize = + image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 1u); const size_t mipBytes = CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); *requiredTextureBytes = static_cast(baseSize) + mipBytes; @@ -164,9 +165,9 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage, uint32_t } const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); - const uint32_t levelCount = xenos_texture::GetTextureLevelCount(image->texture.basemap); + const uint32_t levelCount = image::xenos_texture::GetTextureLevelCount(image->texture.basemap); const uint32_t mipTailBaseLevel = image->texture.basemap->Format.PackedMips != 0 - ? xenos_texture::GetMipTailBaseLevel(image->width, image->height) + ? image::xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (ddsFirstMipLevel >= ddsMipCount) @@ -178,9 +179,9 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage, uint32_t const uint32_t replaceLevelCount = min(levelCount, ddsMipCount - ddsFirstMipLevel); const uint32_t nonPackedLevelCount = max(1u, min(replaceLevelCount, mipTailBaseLevel)); - unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); - unsigned char *mipData = - xenos_texture::GetTextureMipBase(image->texture.basemap, baseData, image->width, image->height, format, 1u); + unsigned char *baseData = image::xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); + unsigned char *mipData = image::xenos_texture::GetTextureMipBase(image->texture.basemap, baseData, image->width, + image->height, format, 1u); size_t requiredDDSSize = 0; size_t requiredTextureBytes = 0; @@ -216,15 +217,17 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage, uint32_t return false; } - uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel); + uint32_t ddsOffset = + CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); for (uint32_t localMipLevel = 0; localMipLevel < nonPackedLevelCount; localMipLevel++) { const uint32_t ddsMipLevel = ddsFirstMipLevel + localMipLevel; - const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, ddsMipLevel, format); - const uint32_t ddsMipLevelSize = - xenos_texture::CalculateLinearLevelSize(ddsImage.header.width, ddsImage.header.height, ddsMipLevel, format); - const uint32_t tiledMipLevelSize = xenos_texture::CalculateTiledLevelSize( + const uint32_t rowPitch = + image::xenos_texture::CalculateLinearRowPitch(ddsImage.header.dwWidth, ddsMipLevel, format); + const uint32_t ddsMipLevelSize = image::xenos_texture::CalculateLinearLevelSize( + ddsImage.header.dwWidth, ddsImage.header.dwHeight, ddsMipLevel, format); + const uint32_t tiledMipLevelSize = image::xenos_texture::CalculateTiledLevelSize( image->width, image->height, localMipLevel, format, image->texture.basemap->Format.Pitch); if (ddsMipLevelSize == 0 || tiledMipLevelSize == 0 || rowPitch == 0) @@ -244,20 +247,20 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage, uint32_t std::vector levelData(ddsImage.data.begin() + ddsOffset, ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); - xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), + static_cast(image->texture.basemap->Format.Endian)); unsigned char *destination = baseData; if (localMipLevel > 0) { - destination = mipData + xenos_texture::CalculateMipLevelOffset(image->width, image->height, localMipLevel, - format, 1u); + destination = mipData + image::xenos_texture::CalculateMipLevelOffset(image->width, image->height, + localMipLevel, format, 1u); } std::vector tiledData(tiledMipLevelSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, format, - image->texture.basemap->Format.Pitch, &tiledData[0], tiledData.size(), - &levelData[0], levelData.size(), rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, format, + image->texture.basemap->Format.Pitch, &tiledData[0], + tiledData.size(), &levelData[0], levelData.size(), rowPitch)) { game::Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_2D: Failed to tile mip level %u for image '%s'\n", localMipLevel, image->name); @@ -280,13 +283,13 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) } const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); - const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); - const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); - const uint32_t tiledFaceSize = xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, format, - image->texture.basemap->Format.Pitch); + const uint32_t faceSize = image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); + const uint32_t tiledFaceSize = image::xenos_texture::CalculateTiledLevelSize( + image->width, image->height, 0u, format, image->texture.basemap->Format.Pitch); const uint32_t tiledBaseSize = - xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 6u); - unsigned char *baseData = xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); + image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 6u); + unsigned char *baseData = image::xenos_texture::GetTextureBase(image->texture.basemap, image->pixels); if (faceSize == 0 || rowPitch == 0 || tiledFaceSize == 0 || tiledBaseSize < tiledFaceSize * 6u) { @@ -334,17 +337,17 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) unsigned char *faceDestination = baseData + (faceIndex * tiledFaceSize); std::vector tiledData(tiledFaceSize); - if (!xenos_texture::TileTextureLevel(image->width, image->height, 0u, static_cast(format), - image->texture.basemap->Format.Pitch, &tiledData[0], tiledData.size(), - facePixels, faceSize, rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0u, static_cast(format), + image->texture.basemap->Format.Pitch, &tiledData[0], + tiledData.size(), facePixels, faceSize, rowPitch)) { game::Com_PrintError(CON_CHANNEL_ERROR, "Image_Replace_Cube: Failed to tile image '%s' face %u\n", image->name, faceIndex); return false; } - xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), + static_cast(image->texture.basemap->Format.Endian)); memcpy(faceDestination, &tiledData[0], tiledFaceSize); } @@ -367,10 +370,10 @@ void Image_Replace(game::GfxImage *image) const bool ddsIsCubemap = ddsImage.IsCubemap(); const bool ddsMatchesImageDimensions = - image->width == ddsImage.header.width && image->height == ddsImage.header.height; + image->width == ddsImage.header.dwWidth && image->height == ddsImage.header.dwHeight; const bool ddsMatchesStreamDimensions = image->streaming && image->mapType == game::MAPTYPE_2D && !ddsIsCubemap && - ddsImage.header.width == static_cast(image->width) * 2u && - ddsImage.header.height == static_cast(image->height) * 2u; + ddsImage.header.dwWidth == static_cast(image->width) * 2u && + ddsImage.header.dwHeight == static_cast(image->height) * 2u; uint32_t ddsFirstMipLevel = 0; if (image->mapType == game::MAPTYPE_2D && ddsIsCubemap) @@ -387,8 +390,8 @@ void Image_Replace(game::GfxImage *image) "Streamed image '%s' replacement must include the streamed mip: expected=%ux%u " "got=%ux%u %s\n", image->name, static_cast(image->width) * 2u, - static_cast(image->height) * 2u, ddsImage.header.width, - ddsImage.header.height, replacementPath.c_str()); + static_cast(image->height) * 2u, ddsImage.header.dwWidth, + ddsImage.header.dwHeight, replacementPath.c_str()); return; } @@ -398,7 +401,7 @@ void Image_Replace(game::GfxImage *image) game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement DDS starts at the streamed mip but has no resident mip: " "%ux%u mipCount=%u\n", - image->name, ddsImage.header.width, ddsImage.header.height, ddsMipCount); + image->name, ddsImage.header.dwWidth, ddsImage.header.dwHeight, ddsMipCount); return; } @@ -409,14 +412,15 @@ void Image_Replace(game::GfxImage *image) game::Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' dimensions do not match DDS file: image=%ux%u dds=%ux%u " "%s\n", - image->name, image->width, image->height, ddsImage.header.width, ddsImage.header.height, - replacementPath.c_str()); + image->name, image->width, image->height, ddsImage.header.dwWidth, + ddsImage.header.dwHeight, replacementPath.c_str()); return; } if (image->mapType == game::MAPTYPE_CUBE && !ddsIsCubemap) { - const uint32_t faceSize = xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, ddsFormat); + const uint32_t faceSize = + image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, ddsFormat); if (faceSize == 0 || ddsImage.data.size() < static_cast(faceSize) * 6u) { game::Com_PrintError(CON_CHANNEL_ERROR, @@ -522,12 +526,12 @@ bool R_StreamLoadImageReplacement(game::GfxImage *image, double imageDistSq) const uint32_t streamWidth = static_cast(image->width) * 2u; const uint32_t streamHeight = static_cast(image->height) * 2u; - if (ddsImage.IsCubemap() || ddsImage.header.width != streamWidth || ddsImage.header.height != streamHeight) + if (ddsImage.IsCubemap() || ddsImage.header.dwWidth != streamWidth || ddsImage.header.dwHeight != streamHeight) { game::Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadImageReplacement: Image '%s' dimensions do not match streamed mip: " "expected=%ux%u got=%ux%u\n", - image->name, streamWidth, streamHeight, ddsImage.header.width, ddsImage.header.height); + image->name, streamWidth, streamHeight, ddsImage.header.dwWidth, ddsImage.header.dwHeight); return true; } @@ -548,9 +552,11 @@ bool R_StreamLoadImageReplacement(game::GfxImage *image, double imageDistSq) } const uint32_t streamSize = image->baseSize * 4u; - const uint32_t sourceSize = xenos_texture::CalculateLinearLevelSize(streamWidth, streamHeight, 0u, ddsFormat); - const uint32_t rowPitch = xenos_texture::CalculateLinearRowPitch(streamWidth, 0u, ddsFormat); - const uint32_t tiledSize = xenos_texture::CalculateTiledLevelSize(streamWidth, streamHeight, 0u, ddsFormat, 0u); + const uint32_t sourceSize = + image::xenos_texture::CalculateLinearLevelSize(streamWidth, streamHeight, 0u, ddsFormat); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(streamWidth, 0u, ddsFormat); + const uint32_t tiledSize = + image::xenos_texture::CalculateTiledLevelSize(streamWidth, streamHeight, 0u, ddsFormat, 0u); if (sourceSize == 0 || rowPitch == 0 || tiledSize == 0) { @@ -597,11 +603,11 @@ bool R_StreamLoadImageReplacement(game::GfxImage *image, double imageDistSq) } std::vector buffer(ddsImage.data.begin(), ddsImage.data.begin() + sourceSize); - xenos_texture::ApplyGpuEndian(&buffer[0], buffer.size(), - static_cast(image->texture.basemap->Format.Endian)); + image::xenos_texture::ApplyGpuEndian(&buffer[0], buffer.size(), + static_cast(image->texture.basemap->Format.Endian)); - if (!xenos_texture::TileTextureLevel(streamWidth, streamHeight, 0u, ddsFormat, 0u, destination, streamSize, - &buffer[0], buffer.size(), rowPitch)) + if (!image::xenos_texture::TileTextureLevel(streamWidth, streamHeight, 0u, ddsFormat, 0u, destination, streamSize, + &buffer[0], buffer.size(), rowPitch)) { memset(destination, 0, streamSize); game::Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadImageReplacement: Failed to tile streamed image '%s'\n", diff --git a/src/image/dds_image.cpp b/src/image/dds_image.cpp deleted file mode 100644 index c3aae9cb..00000000 --- a/src/image/dds_image.cpp +++ /dev/null @@ -1,181 +0,0 @@ -#include "pch.h" -#include "image/dds_image.h" - -namespace image -{ -namespace -{ -const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); -const uint32_t DDPF_ALPHAPIXELS = 0x1; -const uint32_t DDPF_FOURCC = 0x4; -const uint32_t DDPF_RGB = 0x40; -const uint32_t DDPF_LUMINANCE = 0x20000; - -const uint32_t DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'); -const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); -const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); -const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); - -const uint32_t DDSCAPS2_CUBEMAP = 0x200; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; -const uint32_t DDSCAPS2_CUBEMAP_ALL_FACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | - DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | - DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; - -void SwapDdsHeaderEndian(DdsHeader &header) -{ - header.magic = _byteswap_ulong(header.magic); - header.size = _byteswap_ulong(header.size); - header.flags = _byteswap_ulong(header.flags); - header.height = _byteswap_ulong(header.height); - header.width = _byteswap_ulong(header.width); - header.pitchOrLinearSize = _byteswap_ulong(header.pitchOrLinearSize); - header.depth = _byteswap_ulong(header.depth); - header.mipMapCount = _byteswap_ulong(header.mipMapCount); - - for (int i = 0; i < 11; i++) - header.reserved1[i] = _byteswap_ulong(header.reserved1[i]); - - header.pixelFormat.size = _byteswap_ulong(header.pixelFormat.size); - header.pixelFormat.flags = _byteswap_ulong(header.pixelFormat.flags); - header.pixelFormat.fourCC = _byteswap_ulong(header.pixelFormat.fourCC); - header.pixelFormat.rgbBitCount = _byteswap_ulong(header.pixelFormat.rgbBitCount); - header.pixelFormat.rBitMask = _byteswap_ulong(header.pixelFormat.rBitMask); - header.pixelFormat.gBitMask = _byteswap_ulong(header.pixelFormat.gBitMask); - header.pixelFormat.bBitMask = _byteswap_ulong(header.pixelFormat.bBitMask); - header.pixelFormat.aBitMask = _byteswap_ulong(header.pixelFormat.aBitMask); - - header.caps = _byteswap_ulong(header.caps); - header.caps2 = _byteswap_ulong(header.caps2); - header.caps3 = _byteswap_ulong(header.caps3); - header.caps4 = _byteswap_ulong(header.caps4); - header.reserved2 = _byteswap_ulong(header.reserved2); -} -} // namespace - -bool DdsImage::IsValid() const -{ - return header.magic == DDS_MAGIC && header.size == DDS_HEADER_SIZE && - header.pixelFormat.size == DDS_PIXEL_FORMAT_SIZE && !data.empty(); -} - -bool DdsImage::IsCubemap() const -{ - return (header.caps2 & DDSCAPS2_CUBEMAP) != 0 || - (header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; -} - -uint32_t DdsImage::GetMipCount() const -{ - return max(1u, static_cast(header.mipMapCount)); -} - -bool DdsImage::GetGpuFormat(GPUTEXTUREFORMAT *format) const -{ - if (format == NULL) - return false; - - if ((header.pixelFormat.flags & DDPF_FOURCC) != 0) - { - switch (header.pixelFormat.fourCC) - { - case DXT1_FOURCC: - *format = GPUTEXTUREFORMAT_DXT1; - return true; - case DXT3_FOURCC: - *format = GPUTEXTUREFORMAT_DXT2_3; - return true; - case DXT5_FOURCC: - *format = GPUTEXTUREFORMAT_DXT4_5; - return true; - case DXN_FOURCC: - *format = GPUTEXTUREFORMAT_DXN; - return true; - default: - return false; - } - } - - if ((header.pixelFormat.flags & DDPF_LUMINANCE) != 0) - { - if (header.pixelFormat.rgbBitCount == 8 && header.pixelFormat.rBitMask == 0x000000FF) - { - *format = GPUTEXTUREFORMAT_8; - return true; - } - - if ((header.pixelFormat.flags & DDPF_ALPHAPIXELS) != 0 && header.pixelFormat.rgbBitCount == 16 && - header.pixelFormat.rBitMask == 0x000000FF && header.pixelFormat.gBitMask == 0x0000FF00) - { - *format = GPUTEXTUREFORMAT_8_8; - return true; - } - } - - if ((header.pixelFormat.flags & DDPF_RGB) != 0 && (header.pixelFormat.flags & DDPF_ALPHAPIXELS) != 0 && - header.pixelFormat.rgbBitCount == 32 && header.pixelFormat.rBitMask == 0x00FF0000 && - header.pixelFormat.gBitMask == 0x0000FF00 && header.pixelFormat.bBitMask == 0x000000FF && - header.pixelFormat.aBitMask == 0xFF000000) - { - *format = GPUTEXTUREFORMAT_8_8_8_8; - return true; - } - - return false; -} - -DdsImage LoadDdsFromFile(const std::string &path) -{ - DdsImage image = {}; - std::ifstream file(path.c_str(), std::ios::binary); - - if (!file.is_open()) - return image; - - file.read(reinterpret_cast(&image.header), sizeof(DdsHeader)); - if (!file || file.gcount() != sizeof(DdsHeader)) - return DdsImage(); - - if (_byteswap_ulong(image.header.magic) != DDS_MAGIC) - return DdsImage(); - - SwapDdsHeaderEndian(image.header); - - file.seekg(0, std::ios::end); - const std::streampos fileSize = file.tellg(); - if (fileSize == std::streampos(-1) || fileSize < static_cast(sizeof(DdsHeader))) - return DdsImage(); - - file.seekg(sizeof(DdsHeader), std::ios::beg); - const size_t dataSize = static_cast(fileSize) - sizeof(DdsHeader); - image.data.resize(dataSize); - - if (dataSize > 0) - { - file.read(reinterpret_cast(&image.data[0]), dataSize); - if (!file || static_cast(file.gcount()) != dataSize) - return DdsImage(); - } - - return image; -} - -bool LoadDdsFromFile(const std::string &path, DdsImage *out) -{ - if (out == NULL) - return false; - - *out = LoadDdsFromFile(path); - return out->IsValid(); -} - -uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel) -{ - return max(1u, dimension >> mipLevel); -} -} // namespace image diff --git a/src/image/dds_image.h b/src/image/dds_image.h deleted file mode 100644 index 3165bb83..00000000 --- a/src/image/dds_image.h +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace image -{ -const uint32_t DDS_HEADER_SIZE = 124u; -const uint32_t DDS_PIXEL_FORMAT_SIZE = 32u; - -struct DdsHeader -{ - uint32_t magic; - uint32_t size; - uint32_t flags; - uint32_t height; - uint32_t width; - uint32_t pitchOrLinearSize; - uint32_t depth; - uint32_t mipMapCount; - uint32_t reserved1[11]; - struct - { - uint32_t size; - uint32_t flags; - uint32_t fourCC; - uint32_t rgbBitCount; - uint32_t rBitMask; - uint32_t gBitMask; - uint32_t bBitMask; - uint32_t aBitMask; - } pixelFormat; - uint32_t caps; - uint32_t caps2; - uint32_t caps3; - uint32_t caps4; - uint32_t reserved2; -}; - -static_assert(sizeof(DdsHeader) == 128, ""); - -struct DdsImage -{ - DdsHeader header; - std::vector data; - - bool IsValid() const; - bool IsCubemap() const; - uint32_t GetMipCount() const; - bool GetGpuFormat(GPUTEXTUREFORMAT *format) const; -}; - -DdsImage LoadDdsFromFile(const std::string &path); -bool LoadDdsFromFile(const std::string &path, DdsImage *out); -uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel); -} // namespace image diff --git a/src/image/dds_loader.cpp b/src/image/dds_loader.cpp new file mode 100644 index 00000000..8bea3657 --- /dev/null +++ b/src/image/dds_loader.cpp @@ -0,0 +1,167 @@ +#include "pch.h" +#include "image/dds_loader.h" + +namespace image +{ +namespace +{ +const size_t DDS_FILE_HEADER_SIZE = sizeof(uint32_t) + sizeof(DDS_HEADER); + +void SwapDDSHeaderEndian(DDS_HEADER &header) +{ + header.dwSize = _byteswap_ulong(header.dwSize); + header.dwFlags = _byteswap_ulong(header.dwFlags); + header.dwHeight = _byteswap_ulong(header.dwHeight); + header.dwWidth = _byteswap_ulong(header.dwWidth); + header.dwPitchOrLinearSize = _byteswap_ulong(header.dwPitchOrLinearSize); + header.dwDepth = _byteswap_ulong(header.dwDepth); + header.dwMipMapCount = _byteswap_ulong(header.dwMipMapCount); + + for (int i = 0; i < 11; i++) + header.dwReserved1[i] = _byteswap_ulong(header.dwReserved1[i]); + + header.ddspf.dwSize = _byteswap_ulong(header.ddspf.dwSize); + header.ddspf.dwFlags = _byteswap_ulong(header.ddspf.dwFlags); + header.ddspf.dwFourCC = _byteswap_ulong(header.ddspf.dwFourCC); + header.ddspf.dwRGBBitCount = _byteswap_ulong(header.ddspf.dwRGBBitCount); + header.ddspf.dwRBitMask = _byteswap_ulong(header.ddspf.dwRBitMask); + header.ddspf.dwGBitMask = _byteswap_ulong(header.ddspf.dwGBitMask); + header.ddspf.dwBBitMask = _byteswap_ulong(header.ddspf.dwBBitMask); + header.ddspf.dwABitMask = _byteswap_ulong(header.ddspf.dwABitMask); + + header.dwCaps = _byteswap_ulong(header.dwCaps); + header.dwCaps2 = _byteswap_ulong(header.dwCaps2); + header.dwCaps3 = _byteswap_ulong(header.dwCaps3); + header.dwCaps4 = _byteswap_ulong(header.dwCaps4); + header.dwReserved2 = _byteswap_ulong(header.dwReserved2); +} + +bool IsValidDdsImage(const DdsImage &image) +{ + return image.header.dwSize == DDS_HEADER_SIZE && image.header.ddspf.dwSize == DDS_PIXEL_FORMAT_SIZE && + !image.data.empty(); +} +} // namespace + +bool DdsImage::IsCubemap() const +{ + const uint32_t cubemapFaces = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | DDSCAPS2_CUBEMAP_POSITIVEY | + DDSCAPS2_CUBEMAP_NEGATIVEY | DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; + + return (header.dwCaps2 & DDSCAPS2_CUBEMAP) != 0 || (header.dwCaps2 & cubemapFaces) == cubemapFaces; +} + +uint32_t DdsImage::GetMipCount() const +{ + return max(1u, static_cast(header.dwMipMapCount)); +} + +bool DdsImage::GetGpuFormat(GPUTEXTUREFORMAT *format) const +{ + if (format == NULL) + return false; + + if ((header.ddspf.dwFlags & DDPF_FOURCC) != 0) + { + switch (header.ddspf.dwFourCC) + { + case DXT1_FOURCC: + *format = GPUTEXTUREFORMAT_DXT1; + return true; + case DXT3_FOURCC: + *format = GPUTEXTUREFORMAT_DXT2_3; + return true; + case DXT5_FOURCC: + *format = GPUTEXTUREFORMAT_DXT4_5; + return true; + case DXN_FOURCC: + *format = GPUTEXTUREFORMAT_DXN; + return true; + default: + return false; + } + } + + if ((header.ddspf.dwFlags & DDPF_LUMINANCE) != 0) + { + if (header.ddspf.dwRGBBitCount == 8 && header.ddspf.dwRBitMask == 0x000000FF) + { + *format = GPUTEXTUREFORMAT_8; + return true; + } + + if ((header.ddspf.dwFlags & DDPF_ALPHAPIXELS) != 0 && header.ddspf.dwRGBBitCount == 16 && + header.ddspf.dwRBitMask == 0x000000FF && header.ddspf.dwGBitMask == 0x0000FF00) + { + *format = GPUTEXTUREFORMAT_8_8; + return true; + } + } + + if ((header.ddspf.dwFlags & DDPF_RGB) != 0 && (header.ddspf.dwFlags & DDPF_ALPHAPIXELS) != 0 && + header.ddspf.dwRGBBitCount == 32 && header.ddspf.dwRBitMask == 0x00FF0000 && + header.ddspf.dwGBitMask == 0x0000FF00 && header.ddspf.dwBBitMask == 0x000000FF && + header.ddspf.dwABitMask == 0xFF000000) + { + *format = GPUTEXTUREFORMAT_8_8_8_8; + return true; + } + + return false; +} + +DdsImage LoadDdsFromFile(const std::string &path) +{ + DdsImage image = {}; + std::ifstream file(path.c_str(), std::ios::binary); + + if (!file.is_open()) + return image; + + uint32_t magic = 0; + file.read(reinterpret_cast(&magic), sizeof(magic)); + if (!file || file.gcount() != sizeof(magic)) + return DdsImage(); + + if (_byteswap_ulong(magic) != DDS_MAGIC) + return DdsImage(); + + file.read(reinterpret_cast(&image.header), sizeof(DDS_HEADER)); + if (!file || file.gcount() != sizeof(DDS_HEADER)) + return DdsImage(); + + SwapDDSHeaderEndian(image.header); + + file.seekg(0, std::ios::end); + const std::streampos fileSize = file.tellg(); + if (fileSize == std::streampos(-1) || fileSize < static_cast(DDS_FILE_HEADER_SIZE)) + return DdsImage(); + + file.seekg(DDS_FILE_HEADER_SIZE, std::ios::beg); + const size_t dataSize = static_cast(fileSize) - DDS_FILE_HEADER_SIZE; + image.data.resize(dataSize); + + if (dataSize > 0) + { + file.read(reinterpret_cast(&image.data[0]), dataSize); + if (!file || static_cast(file.gcount()) != dataSize) + return DdsImage(); + } + + return image; +} + +bool LoadDdsFromFile(const std::string &path, DdsImage *out) +{ + if (out == NULL) + return false; + + *out = LoadDdsFromFile(path); + return IsValidDdsImage(*out); +} + +uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel) +{ + return max(1u, dimension >> mipLevel); +} +} // namespace image diff --git a/src/image/dds_loader.h b/src/image/dds_loader.h new file mode 100644 index 00000000..5b3449dc --- /dev/null +++ b/src/image/dds_loader.h @@ -0,0 +1,12 @@ +#pragma once + +#include "image/dds_types.h" + +#include + +namespace image +{ +DdsImage LoadDdsFromFile(const std::string &path); +bool LoadDdsFromFile(const std::string &path, DdsImage *out); +uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel); +} // namespace image diff --git a/src/image/dds_types.h b/src/image/dds_types.h new file mode 100644 index 00000000..7b427b8c --- /dev/null +++ b/src/image/dds_types.h @@ -0,0 +1,107 @@ +#pragma once + +#include +#include + +namespace image +{ +enum DDS_CONSTANTS +{ + DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '), + DDS_HEADER_SIZE = 124u, + DDS_PIXEL_FORMAT_SIZE = 32u, +}; + +enum DDS_FOURCC +{ + DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'), + DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'), + DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'), + DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'), +}; + +enum DDP_FLAGS +{ + DDPF_ALPHAPIXELS = 0x1, + DDPF_ALPHA = 0x2, + DDPF_FOURCC = 0x4, + DDPF_RGB = 0x40, + DDPF_YUV = 0x200, + DDPF_LUMINANCE = 0x20000, +}; + +enum DDS_HEADER_FLAGS +{ + DDSD_CAPS = 0x1, + DDSD_HEIGHT = 0x2, + DDSD_WIDTH = 0x4, + DDSD_PITCH = 0x8, + DDSD_PIXELFORMAT = 0x1000, + DDSD_MIPMAPCOUNT = 0x20000, + DDSD_LINEARSIZE = 0x80000, + DDSD_DEPTH = 0x800000, +}; + +enum DDS_HEADER_CAPS +{ + DDSCAPS_COMPLEX = 0x8, + DDSCAPS_TEXTURE = 0x1000, + DDSCAPS_MIPMAP = 0x400000, +}; + +enum DDS_HEADER_CAPS2 +{ + DDSCAPS2_CUBEMAP = 0x200, + DDSCAPS2_CUBEMAP_POSITIVEX = 0x400, + DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800, + DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000, + DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000, + DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000, + DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000, + DDSCAPS2_VOLUME = 0x200000, +}; + +struct DDS_PIXELFORMAT +{ + uint32_t dwSize; + uint32_t dwFlags; + uint32_t dwFourCC; + uint32_t dwRGBBitCount; + uint32_t dwRBitMask; + uint32_t dwGBitMask; + uint32_t dwBBitMask; + uint32_t dwABitMask; +}; + +static_assert(sizeof(DDS_PIXELFORMAT) == 32, ""); + +struct DDS_HEADER +{ + uint32_t dwSize; + uint32_t dwFlags; + uint32_t dwHeight; + uint32_t dwWidth; + uint32_t dwPitchOrLinearSize; + uint32_t dwDepth; + uint32_t dwMipMapCount; + uint32_t dwReserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t dwCaps; + uint32_t dwCaps2; + uint32_t dwCaps3; + uint32_t dwCaps4; + uint32_t dwReserved2; +}; + +static_assert(sizeof(DDS_HEADER) == DDS_HEADER_SIZE, ""); + +struct DdsImage +{ + DDS_HEADER header; + std::vector data; + + bool IsCubemap() const; + uint32_t GetMipCount() const; + bool GetGpuFormat(GPUTEXTUREFORMAT *format) const; +}; +} // namespace image diff --git a/src/xenos_texture.cpp b/src/image/xenos_texture.cpp similarity index 99% rename from src/xenos_texture.cpp rename to src/image/xenos_texture.cpp index 45cf7994..64ea2de7 100644 --- a/src/xenos_texture.cpp +++ b/src/image/xenos_texture.cpp @@ -1,6 +1,8 @@ #include "pch.h" -#include "xenos_texture.h" +#include "image/xenos_texture.h" +namespace image +{ namespace { struct TextureLevelLayout @@ -373,3 +375,4 @@ bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint return true; } } // namespace xenos_texture +} // namespace image diff --git a/src/xenos_texture.h b/src/image/xenos_texture.h similarity index 98% rename from src/xenos_texture.h rename to src/image/xenos_texture.h index d410730b..a7d17de6 100644 --- a/src/xenos_texture.h +++ b/src/image/xenos_texture.h @@ -3,6 +3,8 @@ #include #include +namespace image +{ namespace xenos_texture { struct TextureFormatInfo @@ -39,3 +41,4 @@ bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint void *destination, size_t destinationSize, uint32_t destinationRowPitch, const void *source, size_t sourceSize); } // namespace xenos_texture +} // namespace image From 3b55ec15b703b5125a2f2b46290b57ff4b4491fc Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 09:40:37 +0100 Subject: [PATCH 07/20] refactor: implement endian byte swap utility functions --- src/image/dds_loader.cpp | 50 ++++++++++++++------------- src/utils/endian.cpp | 74 ++++++++++++++++++++++++++++++++++++++++ src/utils/endian.h | 16 +++++++++ 3 files changed, 116 insertions(+), 24 deletions(-) create mode 100644 src/utils/endian.cpp create mode 100644 src/utils/endian.h diff --git a/src/image/dds_loader.cpp b/src/image/dds_loader.cpp index 8bea3657..9c2e273e 100644 --- a/src/image/dds_loader.cpp +++ b/src/image/dds_loader.cpp @@ -1,5 +1,6 @@ #include "pch.h" #include "image/dds_loader.h" +#include "utils/endian.h" namespace image { @@ -9,31 +10,31 @@ const size_t DDS_FILE_HEADER_SIZE = sizeof(uint32_t) + sizeof(DDS_HEADER); void SwapDDSHeaderEndian(DDS_HEADER &header) { - header.dwSize = _byteswap_ulong(header.dwSize); - header.dwFlags = _byteswap_ulong(header.dwFlags); - header.dwHeight = _byteswap_ulong(header.dwHeight); - header.dwWidth = _byteswap_ulong(header.dwWidth); - header.dwPitchOrLinearSize = _byteswap_ulong(header.dwPitchOrLinearSize); - header.dwDepth = _byteswap_ulong(header.dwDepth); - header.dwMipMapCount = _byteswap_ulong(header.dwMipMapCount); + utils::endian::ByteSwap(header.dwSize); + utils::endian::ByteSwap(header.dwFlags); + utils::endian::ByteSwap(header.dwHeight); + utils::endian::ByteSwap(header.dwWidth); + utils::endian::ByteSwap(header.dwPitchOrLinearSize); + utils::endian::ByteSwap(header.dwDepth); + utils::endian::ByteSwap(header.dwMipMapCount); for (int i = 0; i < 11; i++) - header.dwReserved1[i] = _byteswap_ulong(header.dwReserved1[i]); - - header.ddspf.dwSize = _byteswap_ulong(header.ddspf.dwSize); - header.ddspf.dwFlags = _byteswap_ulong(header.ddspf.dwFlags); - header.ddspf.dwFourCC = _byteswap_ulong(header.ddspf.dwFourCC); - header.ddspf.dwRGBBitCount = _byteswap_ulong(header.ddspf.dwRGBBitCount); - header.ddspf.dwRBitMask = _byteswap_ulong(header.ddspf.dwRBitMask); - header.ddspf.dwGBitMask = _byteswap_ulong(header.ddspf.dwGBitMask); - header.ddspf.dwBBitMask = _byteswap_ulong(header.ddspf.dwBBitMask); - header.ddspf.dwABitMask = _byteswap_ulong(header.ddspf.dwABitMask); - - header.dwCaps = _byteswap_ulong(header.dwCaps); - header.dwCaps2 = _byteswap_ulong(header.dwCaps2); - header.dwCaps3 = _byteswap_ulong(header.dwCaps3); - header.dwCaps4 = _byteswap_ulong(header.dwCaps4); - header.dwReserved2 = _byteswap_ulong(header.dwReserved2); + utils::endian::ByteSwap(header.dwReserved1[i]); + + utils::endian::ByteSwap(header.ddspf.dwSize); + utils::endian::ByteSwap(header.ddspf.dwFlags); + utils::endian::ByteSwap(header.ddspf.dwFourCC); + utils::endian::ByteSwap(header.ddspf.dwRGBBitCount); + utils::endian::ByteSwap(header.ddspf.dwRBitMask); + utils::endian::ByteSwap(header.ddspf.dwGBitMask); + utils::endian::ByteSwap(header.ddspf.dwBBitMask); + utils::endian::ByteSwap(header.ddspf.dwABitMask); + + utils::endian::ByteSwap(header.dwCaps); + utils::endian::ByteSwap(header.dwCaps2); + utils::endian::ByteSwap(header.dwCaps3); + utils::endian::ByteSwap(header.dwCaps4); + utils::endian::ByteSwap(header.dwReserved2); } bool IsValidDdsImage(const DdsImage &image) @@ -123,7 +124,8 @@ DdsImage LoadDdsFromFile(const std::string &path) if (!file || file.gcount() != sizeof(magic)) return DdsImage(); - if (_byteswap_ulong(magic) != DDS_MAGIC) + utils::endian::ByteSwap(magic); + if (magic != DDS_MAGIC) return DdsImage(); file.read(reinterpret_cast(&image.header), sizeof(DDS_HEADER)); diff --git a/src/utils/endian.cpp b/src/utils/endian.cpp new file mode 100644 index 00000000..0c980856 --- /dev/null +++ b/src/utils/endian.cpp @@ -0,0 +1,74 @@ +#include "pch.h" +#include "utils/endian.h" + +#include + +namespace utils +{ +namespace endian +{ +namespace +{ +uint16_t ByteSwapped(uint16_t value) +{ + return static_cast((value >> 8) | (value << 8)); +} + +int16_t ByteSwapped(int16_t value) +{ + return static_cast(ByteSwapped(static_cast(value))); +} + +uint32_t ByteSwapped(uint32_t value) +{ + return _byteswap_ulong(value); +} + +int32_t ByteSwapped(int32_t value) +{ + return static_cast(ByteSwapped(static_cast(value))); +} + +uint64_t ByteSwapped(uint64_t value) +{ + return (static_cast(ByteSwapped(static_cast(value))) << 32) | + ByteSwapped(static_cast(value >> 32)); +} + +int64_t ByteSwapped(int64_t value) +{ + return static_cast(ByteSwapped(static_cast(value))); +} +} // namespace + +void ByteSwap(uint16_t &value) +{ + value = ByteSwapped(value); +} + +void ByteSwap(int16_t &value) +{ + value = ByteSwapped(value); +} + +void ByteSwap(uint32_t &value) +{ + value = ByteSwapped(value); +} + +void ByteSwap(int32_t &value) +{ + value = ByteSwapped(value); +} + +void ByteSwap(uint64_t &value) +{ + value = ByteSwapped(value); +} + +void ByteSwap(int64_t &value) +{ + value = ByteSwapped(value); +} +} // namespace endian +} // namespace utils diff --git a/src/utils/endian.h b/src/utils/endian.h new file mode 100644 index 00000000..a9d59097 --- /dev/null +++ b/src/utils/endian.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace utils +{ +namespace endian +{ +void ByteSwap(uint16_t &value); +void ByteSwap(int16_t &value); +void ByteSwap(uint32_t &value); +void ByteSwap(int32_t &value); +void ByteSwap(uint64_t &value); +void ByteSwap(int64_t &value); +} // namespace endian +} // namespace utils From 002e00ddaa3a4ea708f888515c329c8d236d0ba4 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 09:48:57 +0100 Subject: [PATCH 08/20] refactor: cleanup IW3 loader --- src/game/iw3/mp/components/image_loader.cpp | 496 ++++++-------------- 1 file changed, 148 insertions(+), 348 deletions(-) diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index 7b31cc39..e57bfc6d 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -2,183 +2,17 @@ #include "common/config.h" #include "command.h" #include "image_loader.h" +#include "image/dds_loader.h" #include "image/xenos_texture.h" +#include "utils/endian.h" // Forgive me for this dreadful code. It was hacked together until semi working and not touched since. // TODO: refactor and generalise for the other games. namespace { -// DDS Constants -const uint32_t DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '); -const uint32_t DDS_HEADER_SIZE = 124; -const uint32_t DDS_PIXEL_FORMAT_SIZE = 32; -const uint32_t DDSD_CAPS = 0x1; -const uint32_t DDSD_HEIGHT = 0x2; -const uint32_t DDSD_WIDTH = 0x4; -const uint32_t DDSD_PIXELFORMAT = 0x1000; -const uint32_t DDSD_LINEARSIZE = 0x80000; -const uint32_t DDPF_FOURCC = 0x4; -const uint32_t DDPF_RGB = 0x40; -const uint32_t DDPF_ALPHAPIXELS = 0x1; -const uint32_t DDSCAPS_TEXTURE = 0x1000; -const uint32_t DDSCAPS_MIPMAP = 0x400000; -const uint32_t DDPF_LUMINANCE = 0x20000; - -// DDS Pixel Formats (FourCC Codes) -const uint32_t DXT1_FOURCC = MAKEFOURCC('D', 'X', 'T', '1'); -const uint32_t DXT3_FOURCC = MAKEFOURCC('D', 'X', 'T', '3'); -const uint32_t DXT5_FOURCC = MAKEFOURCC('D', 'X', 'T', '5'); -const uint32_t DXN_FOURCC = MAKEFOURCC('A', 'T', 'I', '2'); // (DXN / BC5) - std::set g_streamedImageReplacements; -// Additional DDS Cubemap Flags -const uint32_t DDSCAPS2_CUBEMAP = 0x200; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x400; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000; -const uint32_t DDSCAPS2_CUBEMAP_ALL_FACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | - DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | - DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ; - -// DDS Header Structure (with inline endian swapping) -struct DDSHeader -{ - uint32_t magic; - uint32_t size; - uint32_t flags; - uint32_t height; - uint32_t width; - uint32_t pitchOrLinearSize; - uint32_t depth; - uint32_t mipMapCount; - uint32_t reserved1[11]; - struct - { - uint32_t size; - uint32_t flags; - uint32_t fourCC; - uint32_t rgbBitCount; - uint32_t rBitMask; - uint32_t gBitMask; - uint32_t bBitMask; - uint32_t aBitMask; - } pixelFormat; - uint32_t caps; - uint32_t caps2; - uint32_t caps3; - uint32_t caps4; - uint32_t reserved2; -}; - -static_assert(sizeof(DDSHeader) == 128, ""); - -struct DDSImage -{ - DDSHeader header; - std::vector data; -}; - -// Function to swap all necessary fields from little-endian to big-endian -void SwapDDSHeaderEndian(DDSHeader &header) -{ - header.magic = _byteswap_ulong(header.magic); - header.size = _byteswap_ulong(header.size); - header.flags = _byteswap_ulong(header.flags); - header.height = _byteswap_ulong(header.height); - header.width = _byteswap_ulong(header.width); - header.pitchOrLinearSize = _byteswap_ulong(header.pitchOrLinearSize); - header.depth = _byteswap_ulong(header.depth); - header.mipMapCount = _byteswap_ulong(header.mipMapCount); - - for (int i = 0; i < 11; i++) - header.reserved1[i] = _byteswap_ulong(header.reserved1[i]); - - header.pixelFormat.size = _byteswap_ulong(header.pixelFormat.size); - header.pixelFormat.flags = _byteswap_ulong(header.pixelFormat.flags); - header.pixelFormat.fourCC = _byteswap_ulong(header.pixelFormat.fourCC); - header.pixelFormat.rgbBitCount = _byteswap_ulong(header.pixelFormat.rgbBitCount); - header.pixelFormat.rBitMask = _byteswap_ulong(header.pixelFormat.rBitMask); - header.pixelFormat.gBitMask = _byteswap_ulong(header.pixelFormat.gBitMask); - header.pixelFormat.bBitMask = _byteswap_ulong(header.pixelFormat.bBitMask); - header.pixelFormat.aBitMask = _byteswap_ulong(header.pixelFormat.aBitMask); - - header.caps = _byteswap_ulong(header.caps); - header.caps2 = _byteswap_ulong(header.caps2); - header.caps3 = _byteswap_ulong(header.caps3); - header.caps4 = _byteswap_ulong(header.caps4); - header.reserved2 = _byteswap_ulong(header.reserved2); -} - -DDSImage ReadDDSFile(const std::string &filepath) -{ - DDSImage ddsImage; - std::ifstream file(filepath, std::ios::binary); - - if (!file.is_open()) - { - return ddsImage; // Return empty DDSImage - } - - // Read DDS header (raw, little-endian) - file.read(reinterpret_cast(&ddsImage.header), sizeof(DDSHeader)); - if (!file || file.gcount() != sizeof(DDSHeader)) - { - file.close(); - return ddsImage; - } - - // Swap only the magic number to big-endian for proper validation - uint32_t magicSwapped = _byteswap_ulong(ddsImage.header.magic); - - if (magicSwapped != 0x20534444) // 'DDS ' in big-endian - { - file.close(); - return ddsImage; - } - - // Swap header fields to big-endian for Xbox 360 - SwapDDSHeaderEndian(ddsImage.header); - - // Move to end of file to get total file size - file.seekg(0, std::ios::end); - std::streampos fileSize = file.tellg(); - - // Ensure fileSize is valid before proceeding - if (fileSize == std::streampos(-1)) - { - file.close(); - return ddsImage; - } - - // Move back to after the header - file.seekg(sizeof(DDSHeader), std::ios::beg); - - // Compute data size safely - size_t dataSize = static_cast(fileSize) - sizeof(DDSHeader); - - // Read image data - ddsImage.data.resize(dataSize); - if (dataSize > 0) - { - file.read(reinterpret_cast(ddsImage.data.data()), dataSize); - if (!file || static_cast(file.gcount()) != dataSize) - { - ddsImage.data.clear(); - file.close(); - return ddsImage; - } - } - - file.close(); - - return ddsImage; -} - std::string extract_filename(const char *filename) { std::string path(filename); @@ -194,41 +28,115 @@ std::string extract_filename(const char *filename) return path.substr(start, end - start); } -bool DDSIsCubemap(const DDSImage &ddsImage) +void ByteSwapDDSPixelFormat(image::DDS_PIXELFORMAT &pixelFormat) { - return (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP) != 0 || - (ddsImage.header.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) == DDSCAPS2_CUBEMAP_ALL_FACES; + utils::endian::ByteSwap(pixelFormat.dwSize); + utils::endian::ByteSwap(pixelFormat.dwFlags); + utils::endian::ByteSwap(pixelFormat.dwFourCC); + utils::endian::ByteSwap(pixelFormat.dwRGBBitCount); + utils::endian::ByteSwap(pixelFormat.dwRBitMask); + utils::endian::ByteSwap(pixelFormat.dwGBitMask); + utils::endian::ByteSwap(pixelFormat.dwBBitMask); + utils::endian::ByteSwap(pixelFormat.dwABitMask); } -uint32_t GetDDSMipCount(const DDSImage &ddsImage) +void ByteSwapDDSHeader(image::DDS_HEADER &header) { - return max(1u, static_cast(ddsImage.header.mipMapCount)); + utils::endian::ByteSwap(header.dwSize); + utils::endian::ByteSwap(header.dwFlags); + utils::endian::ByteSwap(header.dwHeight); + utils::endian::ByteSwap(header.dwWidth); + utils::endian::ByteSwap(header.dwPitchOrLinearSize); + utils::endian::ByteSwap(header.dwDepth); + utils::endian::ByteSwap(header.dwMipMapCount); + + for (int i = 0; i < 11; i++) + utils::endian::ByteSwap(header.dwReserved1[i]); + + ByteSwapDDSPixelFormat(header.ddspf); + utils::endian::ByteSwap(header.dwCaps); + utils::endian::ByteSwap(header.dwCaps2); + utils::endian::ByteSwap(header.dwCaps3); + utils::endian::ByteSwap(header.dwCaps4); + utils::endian::ByteSwap(header.dwReserved2); } -bool GetDDSFormat(const DDSImage &ddsImage, GPUTEXTUREFORMAT *format) +void WriteDDSHeader(std::ofstream &file, image::DDS_HEADER header) { - if ((ddsImage.header.pixelFormat.flags & DDPF_FOURCC) == 0) - return false; + uint32_t magic = image::DDS_MAGIC; + utils::endian::ByteSwap(magic); + ByteSwapDDSHeader(header); + + file.write(reinterpret_cast(&magic), sizeof(magic)); + file.write(reinterpret_cast(&header), sizeof(header)); +} - switch (ddsImage.header.pixelFormat.fourCC) +bool PopulateDDSPixelFormat(image::DDS_PIXELFORMAT &pixelFormat, uint32_t gpuFormat) +{ + memset(&pixelFormat, 0, sizeof(pixelFormat)); + pixelFormat.dwSize = image::DDS_PIXEL_FORMAT_SIZE; + + switch (gpuFormat) { - case DXT1_FOURCC: - *format = GPUTEXTUREFORMAT_DXT1; + case GPUTEXTUREFORMAT_DXT1: + pixelFormat.dwFlags = image::DDPF_FOURCC; + pixelFormat.dwFourCC = image::DXT1_FOURCC; return true; - case DXT3_FOURCC: - *format = GPUTEXTUREFORMAT_DXT2_3; + case GPUTEXTUREFORMAT_DXT2_3: + pixelFormat.dwFlags = image::DDPF_FOURCC; + pixelFormat.dwFourCC = image::DXT3_FOURCC; + return true; + case GPUTEXTUREFORMAT_DXT4_5: + pixelFormat.dwFlags = image::DDPF_FOURCC; + pixelFormat.dwFourCC = image::DXT5_FOURCC; + return true; + case GPUTEXTUREFORMAT_DXN: + pixelFormat.dwFlags = image::DDPF_FOURCC; + pixelFormat.dwFourCC = image::DXN_FOURCC; + return true; + case GPUTEXTUREFORMAT_8: + pixelFormat.dwFlags = image::DDPF_LUMINANCE; + pixelFormat.dwRGBBitCount = 8; + pixelFormat.dwRBitMask = 0x000000FF; return true; - case DXT5_FOURCC: - *format = GPUTEXTUREFORMAT_DXT4_5; + case GPUTEXTUREFORMAT_8_8: + pixelFormat.dwFlags = image::DDPF_LUMINANCE | image::DDPF_ALPHAPIXELS; + pixelFormat.dwRGBBitCount = 16; + pixelFormat.dwRBitMask = 0x000000FF; + pixelFormat.dwGBitMask = 0x0000FF00; return true; - case DXN_FOURCC: - *format = GPUTEXTUREFORMAT_DXN; + case GPUTEXTUREFORMAT_8_8_8_8: + pixelFormat.dwFlags = image::DDPF_RGB | image::DDPF_ALPHAPIXELS; + pixelFormat.dwRGBBitCount = 32; + pixelFormat.dwRBitMask = 0x00FF0000; + pixelFormat.dwGBitMask = 0x0000FF00; + pixelFormat.dwBBitMask = 0x000000FF; + pixelFormat.dwABitMask = 0xFF000000; return true; default: return false; } } +bool PopulateDDSHeader(image::DDS_HEADER &header, uint32_t width, uint32_t height, uint32_t depth, + uint32_t mipMapCount, uint32_t pitchOrLinearSize, uint32_t caps, uint32_t caps2, + uint32_t gpuFormat) +{ + memset(&header, 0, sizeof(header)); + header.dwSize = image::DDS_HEADER_SIZE; + header.dwFlags = image::DDSD_CAPS | image::DDSD_HEIGHT | image::DDSD_WIDTH | image::DDSD_PIXELFORMAT | + image::DDSD_LINEARSIZE; + header.dwHeight = height; + header.dwWidth = width; + header.dwPitchOrLinearSize = pitchOrLinearSize; + header.dwDepth = depth; + header.dwMipMapCount = mipMapCount; + header.dwCaps = caps; + header.dwCaps2 = caps2; + + return PopulateDDSPixelFormat(header.ddspf, gpuFormat); +} + size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) { @@ -280,14 +188,14 @@ size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXT return requiredSize; } -bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, +bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const image::DdsImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t ddsFirstMipLevel, uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) { const size_t ddsMipOffset = - CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel); + CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); const size_t requiredLinearSize = CalculateRequiredLinearDataSize( - ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel, replacementLevelCount, 1u); + ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel, replacementLevelCount, 1u); *requiredDDSSize = ddsMipOffset + requiredLinearSize; if (requiredLinearSize == 0 || (ddsFirstMipLevel > 0 && ddsMipOffset == 0)) return false; @@ -307,7 +215,7 @@ bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const DDSImage &d return true; } -bool ValidateCubeReplacementData(const iw3::mp::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, +bool ValidateCubeReplacementData(const iw3::mp::GfxImage *image, const image::DdsImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t faceSize, uint32_t tiledBaseSize, size_t *requiredDDSSize) { *requiredDDSSize = static_cast(faceSize) * 6u; @@ -407,77 +315,23 @@ void Image_Dump(const GfxImage *image) uint32_t BaseSize = image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); - DDSHeader header; - memset(&header, 0, sizeof(DDSHeader)); - - header.magic = _byteswap_ulong(DDS_MAGIC); - header.size = _byteswap_ulong(DDS_HEADER_SIZE); - header.flags = _byteswap_ulong(DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE); - header.height = _byteswap_ulong(image->height); - header.width = _byteswap_ulong(image->width); - header.depth = _byteswap_ulong(image->depth); - header.mipMapCount = _byteswap_ulong(image::xenos_texture::GetTextureLevelCount(image->texture.basemap)); - auto format = image->texture.basemap->Format.DataFormat; - switch (format) + uint32_t caps2 = 0u; + if (image->mapType == mp::MAPTYPE_CUBE) { - case GPUTEXTUREFORMAT_DXT1: - header.pixelFormat.fourCC = _byteswap_ulong(DXT1_FOURCC); - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_DXT2_3: - header.pixelFormat.fourCC = _byteswap_ulong(DXT3_FOURCC); - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_DXT4_5: - header.pixelFormat.fourCC = _byteswap_ulong(DXT5_FOURCC); - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_DXN: - header.pixelFormat.fourCC = _byteswap_ulong(DXN_FOURCC); - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_LUMINANCE); - header.pixelFormat.rgbBitCount = _byteswap_ulong(8); - header.pixelFormat.rBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.gBitMask = 0; - header.pixelFormat.bBitMask = 0; - header.pixelFormat.aBitMask = 0; - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_8_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_LUMINANCE | DDPF_ALPHAPIXELS); - header.pixelFormat.rgbBitCount = _byteswap_ulong(16); - header.pixelFormat.rBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.gBitMask = _byteswap_ulong(0x0000FF00); - header.pixelFormat.bBitMask = 0; - header.pixelFormat.aBitMask = 0; - header.pitchOrLinearSize = BaseSize; - break; - case GPUTEXTUREFORMAT_8_8_8_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_RGB | DDPF_ALPHAPIXELS); - header.pixelFormat.rgbBitCount = _byteswap_ulong(32); - header.pixelFormat.rBitMask = _byteswap_ulong(0x00FF0000); - header.pixelFormat.gBitMask = _byteswap_ulong(0x0000FF00); - header.pixelFormat.bBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.aBitMask = _byteswap_ulong(0xFF000000); - header.pitchOrLinearSize = BaseSize; - break; - default: - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); - return; + caps2 = image::DDSCAPS2_CUBEMAP | image::DDSCAPS2_CUBEMAP_POSITIVEX | + image::DDSCAPS2_CUBEMAP_NEGATIVEX | image::DDSCAPS2_CUBEMAP_POSITIVEY | + image::DDSCAPS2_CUBEMAP_NEGATIVEY | image::DDSCAPS2_CUBEMAP_POSITIVEZ | + image::DDSCAPS2_CUBEMAP_NEGATIVEZ; } - // Set texture capabilities - header.caps = _byteswap_ulong(DDSCAPS_TEXTURE | DDSCAPS_MIPMAP); - - // Handle Cubemaps - if (image->mapType == mp::MAPTYPE_CUBE) + image::DDS_HEADER header; + if (!PopulateDDSHeader(header, image->width, image->height, image->depth, + image::xenos_texture::GetTextureLevelCount(image->texture.basemap), BaseSize, + image::DDSCAPS_TEXTURE | image::DDSCAPS_MIPMAP, caps2, format)) { - header.caps2 = _byteswap_ulong(DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | - DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | - DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ); + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); + return; } std::string filename = std::string(DUMP_DIR) + "\\" + "images"; @@ -498,7 +352,7 @@ void Image_Dump(const GfxImage *image) if (image->mapType == MAPTYPE_CUBE) { - file.write(reinterpret_cast(&header), sizeof(DDSHeader)); + WriteDDSHeader(file, header); unsigned int face_size = 0; unsigned int rowPitch = 0; @@ -548,7 +402,7 @@ void Image_Dump(const GfxImage *image) else if (image->mapType == MAPTYPE_2D) { // TODO: write mip levels - file.write(reinterpret_cast(&header), sizeof(DDSHeader)); + WriteDDSHeader(file, header); std::vector pixelData(image->pixels, image->pixels + image->baseSize); @@ -675,66 +529,10 @@ void Cmd_imagedump() auto height = image->height * 2; auto baseSize = width * height * 4; - DDSHeader header; - memset(&header, 0, sizeof(DDSHeader)); - - header.magic = _byteswap_ulong(DDS_MAGIC); - header.size = _byteswap_ulong(DDS_HEADER_SIZE); - header.flags = _byteswap_ulong(DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE); - header.width = _byteswap_ulong(width); - header.height = _byteswap_ulong(height); - header.depth = _byteswap_ulong(image->depth); - header.mipMapCount = _byteswap_ulong(1); - header.caps = _byteswap_ulong(DDSCAPS_TEXTURE); - header.pitchOrLinearSize = baseSize; - auto format = image->texture.basemap->Format.DataFormat; - switch (format) + image::DDS_HEADER header; + if (!PopulateDDSHeader(header, width, height, image->depth, 1u, baseSize, image::DDSCAPS_TEXTURE, 0u, format)) { - case GPUTEXTUREFORMAT_DXT1: - header.pixelFormat.fourCC = _byteswap_ulong(DXT1_FOURCC); - - break; - case GPUTEXTUREFORMAT_DXT2_3: - header.pixelFormat.fourCC = _byteswap_ulong(DXT3_FOURCC); - - break; - case GPUTEXTUREFORMAT_DXT4_5: - header.pixelFormat.fourCC = _byteswap_ulong(DXT5_FOURCC); - - break; - case GPUTEXTUREFORMAT_DXN: - header.pixelFormat.fourCC = _byteswap_ulong(DXN_FOURCC); - - break; - case GPUTEXTUREFORMAT_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_LUMINANCE); - header.pixelFormat.rgbBitCount = _byteswap_ulong(8); - header.pixelFormat.rBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.gBitMask = 0; - header.pixelFormat.bBitMask = 0; - header.pixelFormat.aBitMask = 0; - - break; - case GPUTEXTUREFORMAT_8_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_LUMINANCE | DDPF_ALPHAPIXELS); - header.pixelFormat.rgbBitCount = _byteswap_ulong(16); - header.pixelFormat.rBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.gBitMask = _byteswap_ulong(0x0000FF00); - header.pixelFormat.bBitMask = 0; - header.pixelFormat.aBitMask = 0; - - break; - case GPUTEXTUREFORMAT_8_8_8_8: - header.pixelFormat.flags = _byteswap_ulong(DDPF_RGB | DDPF_ALPHAPIXELS); - header.pixelFormat.rgbBitCount = _byteswap_ulong(32); - header.pixelFormat.rBitMask = _byteswap_ulong(0x00FF0000); - header.pixelFormat.gBitMask = _byteswap_ulong(0x0000FF00); - header.pixelFormat.bBitMask = _byteswap_ulong(0x000000FF); - header.pixelFormat.aBitMask = _byteswap_ulong(0xFF000000); - - break; - default: Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); return; } @@ -751,7 +549,7 @@ void Cmd_imagedump() return; } - output_file.write(reinterpret_cast(&header), sizeof(DDSHeader)); + WriteDDSHeader(output_file, header); image::xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), static_cast(image->texture.basemap->Format.Endian)); @@ -801,7 +599,7 @@ void Cmd_imagedump() } } -bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFirstMipLevel) +bool Image_Replace_2D(GfxImage *image, const image::DdsImage &ddsImage, uint32_t ddsFirstMipLevel) { if (image->mapType != MAPTYPE_2D) { @@ -814,7 +612,7 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFir const uint32_t mipTailBaseLevel = image->texture.basemap->Format.PackedMips != 0 ? image::xenos_texture::GetMipTailBaseLevel(image->width, image->height) : levelCount; - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (ddsFirstMipLevel >= ddsMipCount) { Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement DDS has no mip %u: mipCount=%u\n", image->name, @@ -860,14 +658,14 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFir return false; } - uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.width, ddsImage.header.height, format, ddsFirstMipLevel); + uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); for (uint32_t localMipLevel = 0; localMipLevel < nonPackedLevelCount; localMipLevel++) { const uint32_t ddsMipLevel = ddsFirstMipLevel + localMipLevel; - uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, ddsMipLevel, format); + uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(ddsImage.header.dwWidth, ddsMipLevel, format); uint32_t ddsMipLevelSize = image::xenos_texture::CalculateLinearLevelSize( - ddsImage.header.width, ddsImage.header.height, ddsMipLevel, format); + ddsImage.header.dwWidth, ddsImage.header.dwHeight, ddsMipLevel, format); uint32_t tiledMipLevelSize = image::xenos_texture::CalculateTiledLevelSize( image->width, image->height, localMipLevel, format, image->texture.basemap->Format.Pitch); @@ -920,7 +718,7 @@ bool Image_Replace_2D(GfxImage *image, const DDSImage &ddsImage, uint32_t ddsFir return true; } -bool Image_Replace_Cube(GfxImage *image, const DDSImage &ddsImage) +bool Image_Replace_Cube(GfxImage *image, const image::DdsImage &ddsImage) { if (image->mapType != MAPTYPE_CUBE) { @@ -1013,25 +811,26 @@ void Image_Replace(GfxImage *image) return; } - DDSImage ddsImage = ReadDDSFile(replacement_path.c_str()); + image::DdsImage ddsImage = image::LoadDdsFromFile(replacement_path.c_str()); if (ddsImage.data.empty()) { Com_PrintError(CON_CHANNEL_ERROR, "Failed to load DDS file: %s\n", replacement_path.c_str()); return; } - if (ddsImage.header.size != DDS_HEADER_SIZE || ddsImage.header.pixelFormat.size != DDS_PIXEL_FORMAT_SIZE) + if (ddsImage.header.dwSize != image::DDS_HEADER_SIZE || + ddsImage.header.ddspf.dwSize != image::DDS_PIXEL_FORMAT_SIZE) { Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an invalid DDS header: size=%u pixelFormatSize=%u\n", - image->name, ddsImage.header.size, ddsImage.header.pixelFormat.size); + image->name, ddsImage.header.dwSize, ddsImage.header.ddspf.dwSize); return; } GPUTEXTUREFORMAT ddsFormat; - if (!GetDDSFormat(ddsImage, &ddsFormat)) + if (!ddsImage.GetGpuFormat(&ddsFormat)) { Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' has an unsupported DDS format: flags=0x%X fourCC=0x%X\n", - image->name, ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC); + image->name, ddsImage.header.ddspf.dwFlags, ddsImage.header.ddspf.dwFourCC); return; } @@ -1043,12 +842,12 @@ void Image_Replace(GfxImage *image) return; } - const bool ddsIsCubemap = DDSIsCubemap(ddsImage); + const bool ddsIsCubemap = ddsImage.IsCubemap(); const bool ddsMatchesImageDimensions = - image->width == ddsImage.header.width && image->height == ddsImage.header.height; + image->width == ddsImage.header.dwWidth && image->height == ddsImage.header.dwHeight; const bool ddsMatchesStreamDimensions = image->streaming && image->mapType == MAPTYPE_2D && !ddsIsCubemap && - ddsImage.header.width == static_cast(image->width) * 2u && - ddsImage.header.height == static_cast(image->height) * 2u; + ddsImage.header.dwWidth == static_cast(image->width) * 2u && + ddsImage.header.dwHeight == static_cast(image->height) * 2u; uint32_t ddsFirstMipLevel = 0; if (image->mapType == MAPTYPE_2D && ddsIsCubemap) @@ -1065,18 +864,18 @@ void Image_Replace(GfxImage *image) "Streamed image '%s' replacement must include the streamed mip: expected=%ux%u got=%ux%u " "%s\n", image->name, static_cast(image->width) * 2u, - static_cast(image->height) * 2u, ddsImage.header.width, ddsImage.header.height, + static_cast(image->height) * 2u, ddsImage.header.dwWidth, ddsImage.header.dwHeight, replacement_path.c_str()); return; } - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (ddsMipCount < 2u) { Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' replacement DDS starts at the streamed mip but has no resident mip: " "%ux%u mipCount=%u\n", - image->name, ddsImage.header.width, ddsImage.header.height, ddsMipCount); + image->name, ddsImage.header.dwWidth, ddsImage.header.dwHeight, ddsMipCount); return; } @@ -1085,7 +884,7 @@ void Image_Replace(GfxImage *image) else if (!ddsMatchesImageDimensions) { Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' dimensions do not match DDS file: image=%ux%u dds=%ux%u %s\n", - image->name, image->width, image->height, ddsImage.header.width, ddsImage.header.height, + image->name, image->width, image->height, ddsImage.header.dwWidth, ddsImage.header.dwHeight, replacement_path.c_str()); return; } @@ -1183,7 +982,7 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe const auto tryReplaceHighMipDDS = [&](const std::string &replacement_path, bool quietDimensionMismatch) -> bool { - DDSImage ddsImage = ReadDDSFile(replacement_path.c_str()); + image::DdsImage ddsImage = image::LoadDdsFromFile(replacement_path.c_str()); if (ddsImage.data.empty()) { Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Failed to load DDS file: %s\n", @@ -1191,22 +990,23 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe return false; } - if (ddsImage.header.size != DDS_HEADER_SIZE || ddsImage.header.pixelFormat.size != DDS_PIXEL_FORMAT_SIZE) + if (ddsImage.header.dwSize != image::DDS_HEADER_SIZE || + ddsImage.header.ddspf.dwSize != image::DDS_PIXEL_FORMAT_SIZE) { Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Image '%s' has an invalid DDS header: size=%u " "pixelFormatSize=%u\n", - asset_name.c_str(), ddsImage.header.size, ddsImage.header.pixelFormat.size); + asset_name.c_str(), ddsImage.header.dwSize, ddsImage.header.ddspf.dwSize); return false; } GPUTEXTUREFORMAT ddsFormat; - if (!GetDDSFormat(ddsImage, &ddsFormat)) + if (!ddsImage.GetGpuFormat(&ddsFormat)) { Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Image '%s' has an unsupported DDS format: flags=0x%X " "fourCC=0x%X\n", - asset_name.c_str(), ddsImage.header.pixelFormat.flags, ddsImage.header.pixelFormat.fourCC); + asset_name.c_str(), ddsImage.header.ddspf.dwFlags, ddsImage.header.ddspf.dwFourCC); return false; } @@ -1220,21 +1020,21 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe return false; } - if (ddsImage.header.width != highMipWidth || ddsImage.header.height != highMipHeight) + if (ddsImage.header.dwWidth != highMipWidth || ddsImage.header.dwHeight != highMipHeight) { if (!quietDimensionMismatch) { Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Image '%s' dimensions do not match streamed mip: " "expected=%ux%u got=%ux%u\n", - asset_name.c_str(), highMipWidth, highMipHeight, ddsImage.header.width, - ddsImage.header.height); + asset_name.c_str(), highMipWidth, highMipHeight, ddsImage.header.dwWidth, + ddsImage.header.dwHeight); } return false; } - const uint32_t ddsMipCount = GetDDSMipCount(ddsImage); + const uint32_t ddsMipCount = ddsImage.GetMipCount(); if (ddsMipCount < 2u) { Com_PrintError(CON_CHANNEL_ERROR, @@ -1245,10 +1045,10 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe } const uint32_t sourceSize = image::xenos_texture::CalculateLinearLevelSize( - ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat); - const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(ddsImage.header.width, 0u, ddsFormat); + ddsImage.header.dwWidth, ddsImage.header.dwHeight, 0u, ddsFormat); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(ddsImage.header.dwWidth, 0u, ddsFormat); const uint32_t tiledSize = image::xenos_texture::CalculateTiledLevelSize( - ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat, 0u); + ddsImage.header.dwWidth, ddsImage.header.dwHeight, 0u, ddsFormat, 0u); if (sourceSize == 0 || rowPitch == 0 || tiledSize == 0) { @@ -1278,7 +1078,7 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe image::xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), static_cast(image->texture.basemap->Format.Endian)); - if (!image::xenos_texture::TileTextureLevel(ddsImage.header.width, ddsImage.header.height, 0u, ddsFormat, 0u, + if (!image::xenos_texture::TileTextureLevel(ddsImage.header.dwWidth, ddsImage.header.dwHeight, 0u, ddsFormat, 0u, outData, bytesToRead, buffer.data(), buffer.size(), rowPitch)) { Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Failed to tile image '%s'\n", From ff7b04c502221b67354c1a2e87cc42c45d43f071 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 10:15:22 +0100 Subject: [PATCH 09/20] refactor: extract image writing --- codxe.vcxproj | 11 +- src/game/iw3/mp/components/image_loader.cpp | 121 +------------------- src/image/dds_writer.cpp | 116 +++++++++++++++++++ src/image/dds_writer.h | 12 ++ 4 files changed, 143 insertions(+), 117 deletions(-) create mode 100644 src/image/dds_writer.cpp create mode 100644 src/image/dds_writer.h diff --git a/codxe.vcxproj b/codxe.vcxproj index b6c187ed..e56323e0 100644 --- a/codxe.vcxproj +++ b/codxe.vcxproj @@ -79,7 +79,10 @@ - + + + + @@ -205,7 +208,11 @@ - + + + + + diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index e57bfc6d..4e918e8e 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -3,8 +3,8 @@ #include "command.h" #include "image_loader.h" #include "image/dds_loader.h" +#include "image/dds_writer.h" #include "image/xenos_texture.h" -#include "utils/endian.h" // Forgive me for this dreadful code. It was hacked together until semi working and not touched since. // TODO: refactor and generalise for the other games. @@ -28,115 +28,6 @@ std::string extract_filename(const char *filename) return path.substr(start, end - start); } -void ByteSwapDDSPixelFormat(image::DDS_PIXELFORMAT &pixelFormat) -{ - utils::endian::ByteSwap(pixelFormat.dwSize); - utils::endian::ByteSwap(pixelFormat.dwFlags); - utils::endian::ByteSwap(pixelFormat.dwFourCC); - utils::endian::ByteSwap(pixelFormat.dwRGBBitCount); - utils::endian::ByteSwap(pixelFormat.dwRBitMask); - utils::endian::ByteSwap(pixelFormat.dwGBitMask); - utils::endian::ByteSwap(pixelFormat.dwBBitMask); - utils::endian::ByteSwap(pixelFormat.dwABitMask); -} - -void ByteSwapDDSHeader(image::DDS_HEADER &header) -{ - utils::endian::ByteSwap(header.dwSize); - utils::endian::ByteSwap(header.dwFlags); - utils::endian::ByteSwap(header.dwHeight); - utils::endian::ByteSwap(header.dwWidth); - utils::endian::ByteSwap(header.dwPitchOrLinearSize); - utils::endian::ByteSwap(header.dwDepth); - utils::endian::ByteSwap(header.dwMipMapCount); - - for (int i = 0; i < 11; i++) - utils::endian::ByteSwap(header.dwReserved1[i]); - - ByteSwapDDSPixelFormat(header.ddspf); - utils::endian::ByteSwap(header.dwCaps); - utils::endian::ByteSwap(header.dwCaps2); - utils::endian::ByteSwap(header.dwCaps3); - utils::endian::ByteSwap(header.dwCaps4); - utils::endian::ByteSwap(header.dwReserved2); -} - -void WriteDDSHeader(std::ofstream &file, image::DDS_HEADER header) -{ - uint32_t magic = image::DDS_MAGIC; - utils::endian::ByteSwap(magic); - ByteSwapDDSHeader(header); - - file.write(reinterpret_cast(&magic), sizeof(magic)); - file.write(reinterpret_cast(&header), sizeof(header)); -} - -bool PopulateDDSPixelFormat(image::DDS_PIXELFORMAT &pixelFormat, uint32_t gpuFormat) -{ - memset(&pixelFormat, 0, sizeof(pixelFormat)); - pixelFormat.dwSize = image::DDS_PIXEL_FORMAT_SIZE; - - switch (gpuFormat) - { - case GPUTEXTUREFORMAT_DXT1: - pixelFormat.dwFlags = image::DDPF_FOURCC; - pixelFormat.dwFourCC = image::DXT1_FOURCC; - return true; - case GPUTEXTUREFORMAT_DXT2_3: - pixelFormat.dwFlags = image::DDPF_FOURCC; - pixelFormat.dwFourCC = image::DXT3_FOURCC; - return true; - case GPUTEXTUREFORMAT_DXT4_5: - pixelFormat.dwFlags = image::DDPF_FOURCC; - pixelFormat.dwFourCC = image::DXT5_FOURCC; - return true; - case GPUTEXTUREFORMAT_DXN: - pixelFormat.dwFlags = image::DDPF_FOURCC; - pixelFormat.dwFourCC = image::DXN_FOURCC; - return true; - case GPUTEXTUREFORMAT_8: - pixelFormat.dwFlags = image::DDPF_LUMINANCE; - pixelFormat.dwRGBBitCount = 8; - pixelFormat.dwRBitMask = 0x000000FF; - return true; - case GPUTEXTUREFORMAT_8_8: - pixelFormat.dwFlags = image::DDPF_LUMINANCE | image::DDPF_ALPHAPIXELS; - pixelFormat.dwRGBBitCount = 16; - pixelFormat.dwRBitMask = 0x000000FF; - pixelFormat.dwGBitMask = 0x0000FF00; - return true; - case GPUTEXTUREFORMAT_8_8_8_8: - pixelFormat.dwFlags = image::DDPF_RGB | image::DDPF_ALPHAPIXELS; - pixelFormat.dwRGBBitCount = 32; - pixelFormat.dwRBitMask = 0x00FF0000; - pixelFormat.dwGBitMask = 0x0000FF00; - pixelFormat.dwBBitMask = 0x000000FF; - pixelFormat.dwABitMask = 0xFF000000; - return true; - default: - return false; - } -} - -bool PopulateDDSHeader(image::DDS_HEADER &header, uint32_t width, uint32_t height, uint32_t depth, - uint32_t mipMapCount, uint32_t pitchOrLinearSize, uint32_t caps, uint32_t caps2, - uint32_t gpuFormat) -{ - memset(&header, 0, sizeof(header)); - header.dwSize = image::DDS_HEADER_SIZE; - header.dwFlags = image::DDSD_CAPS | image::DDSD_HEIGHT | image::DDSD_WIDTH | image::DDSD_PIXELFORMAT | - image::DDSD_LINEARSIZE; - header.dwHeight = height; - header.dwWidth = width; - header.dwPitchOrLinearSize = pitchOrLinearSize; - header.dwDepth = depth; - header.dwMipMapCount = mipMapCount; - header.dwCaps = caps; - header.dwCaps2 = caps2; - - return PopulateDDSPixelFormat(header.ddspf, gpuFormat); -} - size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) { @@ -326,7 +217,7 @@ void Image_Dump(const GfxImage *image) } image::DDS_HEADER header; - if (!PopulateDDSHeader(header, image->width, image->height, image->depth, + if (!image::CreateDdsHeader(header, image->width, image->height, image->depth, image::xenos_texture::GetTextureLevelCount(image->texture.basemap), BaseSize, image::DDSCAPS_TEXTURE | image::DDSCAPS_MIPMAP, caps2, format)) { @@ -352,7 +243,7 @@ void Image_Dump(const GfxImage *image) if (image->mapType == MAPTYPE_CUBE) { - WriteDDSHeader(file, header); + image::WriteDdsHeader(file, header); unsigned int face_size = 0; unsigned int rowPitch = 0; @@ -402,7 +293,7 @@ void Image_Dump(const GfxImage *image) else if (image->mapType == MAPTYPE_2D) { // TODO: write mip levels - WriteDDSHeader(file, header); + image::WriteDdsHeader(file, header); std::vector pixelData(image->pixels, image->pixels + image->baseSize); @@ -531,7 +422,7 @@ void Cmd_imagedump() auto format = image->texture.basemap->Format.DataFormat; image::DDS_HEADER header; - if (!PopulateDDSHeader(header, width, height, image->depth, 1u, baseSize, image::DDSCAPS_TEXTURE, 0u, format)) + if (!image::CreateDdsHeader(header, width, height, image->depth, 1u, baseSize, image::DDSCAPS_TEXTURE, 0u, format)) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); return; @@ -549,7 +440,7 @@ void Cmd_imagedump() return; } - WriteDDSHeader(output_file, header); + image::WriteDdsHeader(output_file, header); image::xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), static_cast(image->texture.basemap->Format.Endian)); diff --git a/src/image/dds_writer.cpp b/src/image/dds_writer.cpp new file mode 100644 index 00000000..072ff3cf --- /dev/null +++ b/src/image/dds_writer.cpp @@ -0,0 +1,116 @@ +#include "pch.h" +#include "image/dds_writer.h" +#include "utils/endian.h" + +namespace image +{ +namespace +{ +void ByteSwapDDSPixelFormat(DDS_PIXELFORMAT &pixelFormat) +{ + utils::endian::ByteSwap(pixelFormat.dwSize); + utils::endian::ByteSwap(pixelFormat.dwFlags); + utils::endian::ByteSwap(pixelFormat.dwFourCC); + utils::endian::ByteSwap(pixelFormat.dwRGBBitCount); + utils::endian::ByteSwap(pixelFormat.dwRBitMask); + utils::endian::ByteSwap(pixelFormat.dwGBitMask); + utils::endian::ByteSwap(pixelFormat.dwBBitMask); + utils::endian::ByteSwap(pixelFormat.dwABitMask); +} + +void ByteSwapDDSHeader(DDS_HEADER &header) +{ + utils::endian::ByteSwap(header.dwSize); + utils::endian::ByteSwap(header.dwFlags); + utils::endian::ByteSwap(header.dwHeight); + utils::endian::ByteSwap(header.dwWidth); + utils::endian::ByteSwap(header.dwPitchOrLinearSize); + utils::endian::ByteSwap(header.dwDepth); + utils::endian::ByteSwap(header.dwMipMapCount); + + for (int i = 0; i < 11; i++) + utils::endian::ByteSwap(header.dwReserved1[i]); + + ByteSwapDDSPixelFormat(header.ddspf); + utils::endian::ByteSwap(header.dwCaps); + utils::endian::ByteSwap(header.dwCaps2); + utils::endian::ByteSwap(header.dwCaps3); + utils::endian::ByteSwap(header.dwCaps4); + utils::endian::ByteSwap(header.dwReserved2); +} + +bool PopulateDdsPixelFormat(DDS_PIXELFORMAT &pixelFormat, uint32_t gpuFormat) +{ + memset(&pixelFormat, 0, sizeof(pixelFormat)); + pixelFormat.dwSize = DDS_PIXEL_FORMAT_SIZE; + + switch (gpuFormat) + { + case GPUTEXTUREFORMAT_DXT1: + pixelFormat.dwFlags = DDPF_FOURCC; + pixelFormat.dwFourCC = DXT1_FOURCC; + return true; + case GPUTEXTUREFORMAT_DXT2_3: + pixelFormat.dwFlags = DDPF_FOURCC; + pixelFormat.dwFourCC = DXT3_FOURCC; + return true; + case GPUTEXTUREFORMAT_DXT4_5: + pixelFormat.dwFlags = DDPF_FOURCC; + pixelFormat.dwFourCC = DXT5_FOURCC; + return true; + case GPUTEXTUREFORMAT_DXN: + pixelFormat.dwFlags = DDPF_FOURCC; + pixelFormat.dwFourCC = DXN_FOURCC; + return true; + case GPUTEXTUREFORMAT_8: + pixelFormat.dwFlags = DDPF_LUMINANCE; + pixelFormat.dwRGBBitCount = 8; + pixelFormat.dwRBitMask = 0x000000FF; + return true; + case GPUTEXTUREFORMAT_8_8: + pixelFormat.dwFlags = DDPF_LUMINANCE | DDPF_ALPHAPIXELS; + pixelFormat.dwRGBBitCount = 16; + pixelFormat.dwRBitMask = 0x000000FF; + pixelFormat.dwGBitMask = 0x0000FF00; + return true; + case GPUTEXTUREFORMAT_8_8_8_8: + pixelFormat.dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS; + pixelFormat.dwRGBBitCount = 32; + pixelFormat.dwRBitMask = 0x00FF0000; + pixelFormat.dwGBitMask = 0x0000FF00; + pixelFormat.dwBBitMask = 0x000000FF; + pixelFormat.dwABitMask = 0xFF000000; + return true; + default: + return false; + } +} +} // namespace + +bool CreateDdsHeader(DDS_HEADER &header, uint32_t width, uint32_t height, uint32_t depth, uint32_t mipMapCount, + uint32_t pitchOrLinearSize, uint32_t caps, uint32_t caps2, uint32_t gpuFormat) +{ + memset(&header, 0, sizeof(header)); + header.dwSize = DDS_HEADER_SIZE; + header.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE; + header.dwHeight = height; + header.dwWidth = width; + header.dwPitchOrLinearSize = pitchOrLinearSize; + header.dwDepth = depth; + header.dwMipMapCount = mipMapCount; + header.dwCaps = caps; + header.dwCaps2 = caps2; + + return PopulateDdsPixelFormat(header.ddspf, gpuFormat); +} + +void WriteDdsHeader(std::ofstream &file, DDS_HEADER header) +{ + uint32_t magic = DDS_MAGIC; + utils::endian::ByteSwap(magic); + ByteSwapDDSHeader(header); + + file.write(reinterpret_cast(&magic), sizeof(magic)); + file.write(reinterpret_cast(&header), sizeof(header)); +} +} // namespace image diff --git a/src/image/dds_writer.h b/src/image/dds_writer.h new file mode 100644 index 00000000..c9d5a998 --- /dev/null +++ b/src/image/dds_writer.h @@ -0,0 +1,12 @@ +#pragma once + +#include "image/dds_types.h" + +#include + +namespace image +{ +bool CreateDdsHeader(DDS_HEADER &header, uint32_t width, uint32_t height, uint32_t depth, uint32_t mipMapCount, + uint32_t pitchOrLinearSize, uint32_t caps, uint32_t caps2, uint32_t gpuFormat); +void WriteDdsHeader(std::ofstream &file, DDS_HEADER header); +} // namespace image From 104d6ed25abc76899fbb25fc8eb303e0839d8028 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 11:31:36 +0100 Subject: [PATCH 10/20] refactor: reduce duplication with shared image helpers --- src/game/iw3/mp/components/image_loader.cpp | 213 +++--------------- .../iw4/mp_tu6/components/image_loader.cpp | 68 +----- src/game/t4/mp/components/image_loader.cpp | 60 +---- src/image/texture_layout.cpp | 57 +++++ src/image/texture_layout.h | 13 ++ 5 files changed, 115 insertions(+), 296 deletions(-) create mode 100644 src/image/texture_layout.cpp create mode 100644 src/image/texture_layout.h diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index 4e918e8e..62d8eb02 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -4,11 +4,9 @@ #include "image_loader.h" #include "image/dds_loader.h" #include "image/dds_writer.h" +#include "image/texture_layout.h" #include "image/xenos_texture.h" -// Forgive me for this dreadful code. It was hacked together until semi working and not touched since. -// TODO: refactor and generalise for the other games. - namespace { std::set g_streamedImageReplacements; @@ -28,64 +26,13 @@ std::string extract_filename(const char *filename) return path.substr(start, end - start); } -size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, - uint32_t levelCount, uint32_t faceCount) -{ - size_t requiredSize = 0; - - for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) - { - const uint32_t mipLevel = firstMipLevel + localMipLevel; - const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); - if (levelSize == 0) - return 0; - - requiredSize += static_cast(levelSize) * faceCount; - } - - return requiredSize; -} - -uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t mipLevel) -{ - uint32_t offset = 0; - - for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) - { - const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); - if (levelSize == 0) - return 0; - - offset += levelSize; - } - - return offset; -} - -size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, - uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) -{ - size_t requiredSize = 0; - - for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) - { - const uint32_t levelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); - if (levelSize == 0) - return 0; - - requiredSize += static_cast(levelSize) * faceCount; - } - - return requiredSize; -} - bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const image::DdsImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t ddsFirstMipLevel, uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) { const size_t ddsMipOffset = - CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); - const size_t requiredLinearSize = CalculateRequiredLinearDataSize( + image::CalculateDdsMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); + const size_t requiredLinearSize = image::CalculateRequiredLinearDataSize( ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel, replacementLevelCount, 1u); *requiredDDSSize = ddsMipOffset + requiredLinearSize; if (requiredLinearSize == 0 || (ddsFirstMipLevel > 0 && ddsMipOffset == 0)) @@ -97,7 +44,7 @@ bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const image::DdsI const uint32_t baseSize = image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 1u); const size_t mipBytes = - CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); + image::CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); *requiredTextureBytes = static_cast(baseSize) + mipBytes; const int cardMemory = image->cardMemory.platform[0]; if (cardMemory > 0 && *requiredTextureBytes > static_cast(cardMemory)) @@ -106,8 +53,9 @@ bool Validate2DReplacementData(const iw3::mp::GfxImage *image, const image::DdsI return true; } -bool ValidateCubeReplacementData(const iw3::mp::GfxImage *image, const image::DdsImage &ddsImage, GPUTEXTUREFORMAT format, - uint32_t faceSize, uint32_t tiledBaseSize, size_t *requiredDDSSize) +bool ValidateCubeReplacementData(const iw3::mp::GfxImage *image, const image::DdsImage &ddsImage, + GPUTEXTUREFORMAT format, uint32_t faceSize, uint32_t tiledBaseSize, + size_t *requiredDDSSize) { *requiredDDSSize = static_cast(faceSize) * 6u; if (faceSize == 0 || *requiredDDSSize == 0) @@ -129,55 +77,6 @@ namespace iw3 { namespace mp { -void Image_DbgPrint(const GfxImage *image) -{ - const int format = image->texture.basemap->Format.DataFormat; - char *format_str; - switch (format) - { - case GPUTEXTUREFORMAT_DXT1: - format_str = "DXT1"; - break; - case GPUTEXTUREFORMAT_DXT2_3: - format_str = "DXT2_3"; - break; - case GPUTEXTUREFORMAT_DXT4_5: - format_str = "DXT4_5"; - break; - case GPUTEXTUREFORMAT_DXN: - format_str = "DXN"; - break; - case GPUTEXTUREFORMAT_8: - format_str = "8"; - break; - case GPUTEXTUREFORMAT_8_8: - format_str = "8_8"; - break; - case GPUTEXTUREFORMAT_8_8_8_8: - format_str = "8_8_8_8"; - break; - default: - format_str = "UNKNOWN"; - break; - } - - const image::xenos_texture::TextureFormatInfo *formatInfo = - image::xenos_texture::GetTextureFormatInfo(image->texture.basemap->Format.DataFormat); - const uint32_t MipTailBaseLevel = image::xenos_texture::GetMipTailBaseLevel(image->width, image->height); - const uint32_t MipLevelCount = image::xenos_texture::GetTextureLevelCount(image->texture.basemap); - const uint32_t faceCount = image->mapType == MAPTYPE_CUBE ? 6u : 1u; - const uint32_t BaseSize = - image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); - const uint32_t bitsPerPixel = formatInfo != NULL ? formatInfo->bitsPerPixel : 0u; - const uint32_t bytesPerBlock = formatInfo != NULL ? formatInfo->bytesPerBlock : 0u; - - Com_Printf(CON_CHANNEL_CONSOLEONLY, - "Image_DbgPrint: Dumping image Name='%s', Type=%d, Dimensions=%dx%d, MipLevels=%d, MipTailBaseLevel=%d, " - "Format=%s, BitsPerPixel=%d, BytesPerBlock=%d, Endian=%d, BaseSize=%d\n", - image->name, image->mapType, image->width, image->height, MipLevelCount, MipTailBaseLevel, format_str, - bitsPerPixel, bytesPerBlock, image->texture.basemap->Format.Endian, BaseSize); -} - void Image_Dump(const GfxImage *image) { // TODO: cleanup empty files if failed @@ -210,16 +109,15 @@ void Image_Dump(const GfxImage *image) uint32_t caps2 = 0u; if (image->mapType == mp::MAPTYPE_CUBE) { - caps2 = image::DDSCAPS2_CUBEMAP | image::DDSCAPS2_CUBEMAP_POSITIVEX | - image::DDSCAPS2_CUBEMAP_NEGATIVEX | image::DDSCAPS2_CUBEMAP_POSITIVEY | - image::DDSCAPS2_CUBEMAP_NEGATIVEY | image::DDSCAPS2_CUBEMAP_POSITIVEZ | - image::DDSCAPS2_CUBEMAP_NEGATIVEZ; + caps2 = image::DDSCAPS2_CUBEMAP | image::DDSCAPS2_CUBEMAP_POSITIVEX | image::DDSCAPS2_CUBEMAP_NEGATIVEX | + image::DDSCAPS2_CUBEMAP_POSITIVEY | image::DDSCAPS2_CUBEMAP_NEGATIVEY | + image::DDSCAPS2_CUBEMAP_POSITIVEZ | image::DDSCAPS2_CUBEMAP_NEGATIVEZ; } image::DDS_HEADER header; if (!image::CreateDdsHeader(header, image->width, image->height, image->depth, - image::xenos_texture::GetTextureLevelCount(image->texture.basemap), BaseSize, - image::DDSCAPS_TEXTURE | image::DDSCAPS_MIPMAP, caps2, format)) + image::xenos_texture::GetTextureLevelCount(image->texture.basemap), BaseSize, + image::DDSCAPS_TEXTURE | image::DDSCAPS_MIPMAP, caps2, format)) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); return; @@ -245,21 +143,12 @@ void Image_Dump(const GfxImage *image) { image::WriteDdsHeader(file, header); - unsigned int face_size = 0; - unsigned int rowPitch = 0; const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); - - switch (format) + const uint32_t faceSize = + image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); + if (faceSize == 0 || rowPitch == 0) { - case GPUTEXTUREFORMAT_DXT1: - face_size = (image->width / 4) * (image->height / 4) * 8; - rowPitch = (image->width / 4) * 8; // 8 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_8_8_8_8: - face_size = image->width * image->height * 4; - rowPitch = image->width * 4; // 4 bytes per pixel - break; - default: Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported cube map format %d!\n", format); return; } @@ -267,14 +156,14 @@ void Image_Dump(const GfxImage *image) // TODO: handle mip levels per face for cubemaps for (int i = 0; i < 6; i++) { - unsigned char *face_pixels = image->pixels + (i * face_size); // Offset for each face + unsigned char *face_pixels = image->pixels + (i * faceSize); // Offset for each face - std::vector swappedFace(face_pixels, face_pixels + face_size); + std::vector swappedFace(face_pixels, face_pixels + faceSize); image::xenos_texture::ApplyGpuEndian(swappedFace.data(), swappedFace.size(), static_cast(image->texture.basemap->Format.Endian)); // Create buffer for linear texture data - std::vector linearFace(face_size); + std::vector linearFace(faceSize); if (!image::xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), image->texture.basemap->Format.Pitch, linearFace.data(), @@ -303,29 +192,10 @@ void Image_Dump(const GfxImage *image) // Create a linear data buffer to hold the untiled texture std::vector linearData(image->baseSize); - // Calculate row pitch based on format - uint32_t rowPitch; auto format = image->texture.basemap->Format.DataFormat; - - switch (format) + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); + if (rowPitch == 0) { - case GPUTEXTUREFORMAT_DXT1: - case GPUTEXTUREFORMAT_DXT2_3: - case GPUTEXTUREFORMAT_DXT4_5: - case GPUTEXTUREFORMAT_DXN: - // Block compressed formats use 4x4 blocks - rowPitch = ((image->width + 3) / 4) * (format == GPUTEXTUREFORMAT_DXT1 ? 8 : 16); - break; - case GPUTEXTUREFORMAT_8: - rowPitch = image->width; - break; - case GPUTEXTUREFORMAT_8_8: - rowPitch = image->width * 2; - break; - case GPUTEXTUREFORMAT_8_8_8_8: - rowPitch = image->width * 4; - break; - default: Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); return; } @@ -363,13 +233,10 @@ void Cmd_imagedump() CreateDirectoryA(DUMP_DIR, 0); CreateDirectoryA((std::string(DUMP_DIR) + "\\images").c_str(), 0); - CreateDirectoryA((std::string(DUMP_DIR) + "\\highmip").c_str(), 0); for (unsigned int i = 0; i < imageList.count; i++) { auto image = imageList.image[i]; - Image_DbgPrint(image); - Image_Dump(image); } @@ -422,7 +289,8 @@ void Cmd_imagedump() auto format = image->texture.basemap->Format.DataFormat; image::DDS_HEADER header; - if (!image::CreateDdsHeader(header, width, height, image->depth, 1u, baseSize, image::DDSCAPS_TEXTURE, 0u, format)) + if (!image::CreateDdsHeader(header, width, height, image->depth, 1u, baseSize, image::DDSCAPS_TEXTURE, 0u, + format)) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); return; @@ -445,31 +313,11 @@ void Cmd_imagedump() image::xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), static_cast(image->texture.basemap->Format.Endian)); - // Calculate row pitch based on format - uint32_t rowPitch; - - switch (format) + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(width, 0u, format); + if (rowPitch == 0) { - case GPUTEXTUREFORMAT_DXT1: - rowPitch = (width / 4) * 8; // 8 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_DXT2_3: - case GPUTEXTUREFORMAT_DXT4_5: - case GPUTEXTUREFORMAT_DXN: - rowPitch = (width / 4) * 16; // 16 bytes per 4x4 block - break; - case GPUTEXTUREFORMAT_8: - rowPitch = width; // 1 byte per pixel - break; - case GPUTEXTUREFORMAT_8_8: - rowPitch = width * 2; // 2 bytes per pixel - break; - case GPUTEXTUREFORMAT_8_8_8_8: - rowPitch = width * 4; // 4 bytes per pixel - break; - default: - rowPitch = width * 4; // Default to 4 bytes per pixel - break; + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); + continue; } // Create a buffer for linear texture data @@ -549,7 +397,8 @@ bool Image_Replace_2D(GfxImage *image, const image::DdsImage &ddsImage, uint32_t return false; } - uint32_t ddsOffset = CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); + uint32_t ddsOffset = + image::CalculateDdsMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); for (uint32_t localMipLevel = 0; localMipLevel < nonPackedLevelCount; localMipLevel++) { @@ -969,8 +818,8 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe image::xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), static_cast(image->texture.basemap->Format.Endian)); - if (!image::xenos_texture::TileTextureLevel(ddsImage.header.dwWidth, ddsImage.header.dwHeight, 0u, ddsFormat, 0u, - outData, bytesToRead, buffer.data(), buffer.size(), rowPitch)) + if (!image::xenos_texture::TileTextureLevel(ddsImage.header.dwWidth, ddsImage.header.dwHeight, 0u, ddsFormat, + 0u, outData, bytesToRead, buffer.data(), buffer.size(), rowPitch)) { Com_PrintError(CON_CHANNEL_ERROR, "R_StreamLoadHighMipReplacement: Failed to tile image '%s'\n", asset_name.c_str()); diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index 4ee7cf4e..d1b625cc 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -3,6 +3,7 @@ #include "events.h" #include "image_loader.h" #include "image/dds_loader.h" +#include "image/texture_layout.h" #include "image/xenos_texture.h" #ifndef INVALID_FILE_ATTRIBUTES @@ -98,62 +99,11 @@ bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, co return true; } -size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, - uint32_t levelCount, uint32_t faceCount) -{ - size_t requiredSize = 0; - - for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) - { - const uint32_t mipLevel = firstMipLevel + localMipLevel; - const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); - if (levelSize == 0) - return 0; - - requiredSize += static_cast(levelSize) * faceCount; - } - - return requiredSize; -} - -uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t mipLevel) -{ - uint32_t offset = 0; - - for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) - { - const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); - if (levelSize == 0) - return 0; - - offset += levelSize; - } - - return offset; -} - -size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, - uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) -{ - size_t requiredSize = 0; - - for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) - { - const uint32_t levelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); - if (levelSize == 0) - return 0; - - requiredSize += static_cast(levelSize) * faceCount; - } - - return requiredSize; -} - bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) { *requiredDDSSize = - CalculateRequiredLinearDataSize(image->width, image->height, format, 0u, replacementLevelCount, 1u); + image::CalculateRequiredLinearDataSize(image->width, image->height, format, 0u, replacementLevelCount, 1u); if (*requiredDDSSize == 0) return false; @@ -163,7 +113,7 @@ bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsI const D3DBaseTexture *texture = &image->texture.basemap; const uint32_t baseSize = image::xenos_texture::CalculateBaseSize(texture, image->width, image->height, 1u); const size_t mipBytes = - CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); + image::CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); *requiredTextureBytes = static_cast(baseSize) + mipBytes; const int cardMemory = image->cardMemory.platform[0]; @@ -189,8 +139,8 @@ bool ValidateResidentMipCount(const game::GfxImage *image, const DDSImage &ddsIm bool ValidateDDSDataSize(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t mipCount, uint32_t faceCount) { - const size_t expectedSize = CalculateRequiredLinearDataSize(ddsImage.header.dwWidth, ddsImage.header.dwHeight, - format, 0u, mipCount, faceCount); + const size_t expectedSize = image::CalculateRequiredLinearDataSize( + ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, 0u, mipCount, faceCount); if (expectedSize == 0) { PrintImageError("image '%s' has unsupported DDS dimensions or format\n", image->name); @@ -519,13 +469,13 @@ bool ValidateStreamReplacementData(const game::GfxImage *image, const DDSImage & uint32_t startMipLevel, uint32_t levelCount, uint32_t basePitch, size_t *requiredDDSSize, size_t *requiredTextureBytes) { - *requiredDDSSize = CalculateRequiredLinearDataSize(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, - startMipLevel, levelCount, 1u); + *requiredDDSSize = image::CalculateRequiredLinearDataSize(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, + startMipLevel, levelCount, 1u); if (*requiredDDSSize == 0) return false; const uint32_t ddsOffset = - CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, startMipLevel); + image::CalculateDdsMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, startMipLevel); if (static_cast(ddsOffset) + *requiredDDSSize > ddsImage.data.size()) return false; @@ -696,7 +646,7 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u } uint32_t ddsOffset = - CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, ddsFormat, startMipLevel); + image::CalculateDdsMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, ddsFormat, startMipLevel); size_t destinationOffset = 0; for (uint32_t localMipLevel = 0; localMipLevel < replaceLevelCount; ++localMipLevel) diff --git a/src/game/t4/mp/components/image_loader.cpp b/src/game/t4/mp/components/image_loader.cpp index ca9fc3e4..df6e277e 100644 --- a/src/game/t4/mp/components/image_loader.cpp +++ b/src/game/t4/mp/components/image_loader.cpp @@ -2,6 +2,7 @@ #include "common/config.h" #include "image_loader.h" #include "image/dds_loader.h" +#include "image/texture_layout.h" #include "image/xenos_texture.h" namespace @@ -61,64 +62,13 @@ bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, co return true; } -size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, - uint32_t levelCount, uint32_t faceCount) -{ - size_t requiredSize = 0; - - for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) - { - const uint32_t mipLevel = firstMipLevel + localMipLevel; - const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); - if (levelSize == 0) - return 0; - - requiredSize += static_cast(levelSize) * faceCount; - } - - return requiredSize; -} - -uint32_t CalculateDDSMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t mipLevel) -{ - uint32_t offset = 0; - - for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) - { - const uint32_t levelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); - if (levelSize == 0) - return 0; - - offset += levelSize; - } - - return offset; -} - -size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, - uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) -{ - size_t requiredSize = 0; - - for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) - { - const uint32_t levelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); - if (levelSize == 0) - return 0; - - requiredSize += static_cast(levelSize) * faceCount; - } - - return requiredSize; -} - bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t ddsFirstMipLevel, uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) { const size_t ddsMipOffset = - CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); - const size_t requiredLinearSize = CalculateRequiredLinearDataSize( + image::CalculateDdsMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); + const size_t requiredLinearSize = image::CalculateRequiredLinearDataSize( ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel, replacementLevelCount, 1u); *requiredDDSSize = ddsMipOffset + requiredLinearSize; if (requiredLinearSize == 0 || (ddsFirstMipLevel > 0 && ddsMipOffset == 0)) @@ -130,7 +80,7 @@ bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsI const uint32_t baseSize = image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, 1u); const size_t mipBytes = - CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); + image::CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, replacementLevelCount, 1u); *requiredTextureBytes = static_cast(baseSize) + mipBytes; const int cardMemory = image->cardMemory.platform[0]; if (cardMemory > 0 && *requiredTextureBytes > static_cast(cardMemory)) @@ -218,7 +168,7 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage, uint32_t } uint32_t ddsOffset = - CalculateDDSMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); + image::CalculateDdsMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, ddsFirstMipLevel); for (uint32_t localMipLevel = 0; localMipLevel < nonPackedLevelCount; localMipLevel++) { diff --git a/src/image/texture_layout.cpp b/src/image/texture_layout.cpp new file mode 100644 index 00000000..8729b4dc --- /dev/null +++ b/src/image/texture_layout.cpp @@ -0,0 +1,57 @@ +#include "pch.h" +#include "image/texture_layout.h" +#include "image/xenos_texture.h" + +namespace image +{ +size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, + uint32_t levelCount, uint32_t faceCount) +{ + size_t requiredSize = 0; + + for (uint32_t localMipLevel = 0; localMipLevel < levelCount; ++localMipLevel) + { + const uint32_t mipLevel = firstMipLevel + localMipLevel; + const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); + if (levelSize == 0) + return 0; + + requiredSize += static_cast(levelSize) * faceCount; + } + + return requiredSize; +} + +uint32_t CalculateDdsMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t mipLevel) +{ + uint32_t offset = 0; + + for (uint32_t currentMip = 0; currentMip < mipLevel; ++currentMip) + { + const uint32_t levelSize = xenos_texture::CalculateLinearLevelSize(width, height, currentMip, format); + if (levelSize == 0) + return 0; + + offset += levelSize; + } + + return offset; +} + +size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, + uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount) +{ + size_t requiredSize = 0; + + for (uint32_t mipLevel = firstMipLevel; mipLevel < levelCount; ++mipLevel) + { + const uint32_t levelSize = xenos_texture::CalculateTiledLevelSize(width, height, mipLevel, format, 0u); + if (levelSize == 0) + return 0; + + requiredSize += static_cast(levelSize) * faceCount; + } + + return requiredSize; +} +} // namespace image diff --git a/src/image/texture_layout.h b/src/image/texture_layout.h new file mode 100644 index 00000000..92ab97be --- /dev/null +++ b/src/image/texture_layout.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +namespace image +{ +size_t CalculateRequiredLinearDataSize(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t firstMipLevel, + uint32_t levelCount, uint32_t faceCount); +uint32_t CalculateDdsMipOffset(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, uint32_t mipLevel); +size_t CalculateRequiredMipTextureBytes(uint32_t width, uint32_t height, GPUTEXTUREFORMAT format, + uint32_t firstMipLevel, uint32_t levelCount, uint32_t faceCount); +} // namespace image From 7c67d13aa87c7c94f9d6badcc74d8348e23d7391 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 11:37:36 +0100 Subject: [PATCH 11/20] fix: bounds issue when dumping images --- src/game/iw3/mp/components/image_loader.cpp | 80 +++++++++++++++------ 1 file changed, 57 insertions(+), 23 deletions(-) diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index 62d8eb02..0a1f45b8 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -144,10 +144,12 @@ void Image_Dump(const GfxImage *image) image::WriteDdsHeader(file, header); const GPUTEXTUREFORMAT format = static_cast(image->texture.basemap->Format.DataFormat); - const uint32_t faceSize = + const uint32_t linearFaceSize = image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t tiledFaceSize = image::xenos_texture::CalculateTiledLevelSize( + image->width, image->height, 0u, format, image->texture.basemap->Format.Pitch); const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); - if (faceSize == 0 || rowPitch == 0) + if (linearFaceSize == 0 || tiledFaceSize == 0 || rowPitch == 0) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported cube map format %d!\n", format); return; @@ -156,18 +158,28 @@ void Image_Dump(const GfxImage *image) // TODO: handle mip levels per face for cubemaps for (int i = 0; i < 6; i++) { - unsigned char *face_pixels = image->pixels + (i * faceSize); // Offset for each face + const size_t faceOffset = static_cast(i) * tiledFaceSize; + if (faceOffset + tiledFaceSize > image->baseSize) + { + Com_PrintError(CON_CHANNEL_ERROR, + "Image_Dump: Cube image '%s' pixel data is too small: have=%u need=%u\n", image->name, + image->baseSize, static_cast(faceOffset + tiledFaceSize)); + return; + } + + unsigned char *face_pixels = image->pixels + faceOffset; // Offset for each face - std::vector swappedFace(face_pixels, face_pixels + faceSize); + std::vector swappedFace(face_pixels, face_pixels + tiledFaceSize); image::xenos_texture::ApplyGpuEndian(swappedFace.data(), swappedFace.size(), static_cast(image->texture.basemap->Format.Endian)); // Create buffer for linear texture data - std::vector linearFace(faceSize); + std::vector linearFace(linearFaceSize); if (!image::xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), image->texture.basemap->Format.Pitch, linearFace.data(), - rowPitch, swappedFace.data())) + linearFace.size(), rowPitch, swappedFace.data(), + swappedFace.size())) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile cube image '%s' face %d\n", image->name, i); @@ -184,25 +196,36 @@ void Image_Dump(const GfxImage *image) // TODO: write mip levels image::WriteDdsHeader(file, header); - std::vector pixelData(image->pixels, image->pixels + image->baseSize); - - image::xenos_texture::ApplyGpuEndian(pixelData.data(), pixelData.size(), - static_cast(image->texture.basemap->Format.Endian)); - - // Create a linear data buffer to hold the untiled texture - std::vector linearData(image->baseSize); - auto format = image->texture.basemap->Format.DataFormat; + const uint32_t linearLevelSize = + image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t tiledLevelSize = image::xenos_texture::CalculateTiledLevelSize( + image->width, image->height, 0u, format, image->texture.basemap->Format.Pitch); const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); - if (rowPitch == 0) + if (linearLevelSize == 0 || tiledLevelSize == 0 || rowPitch == 0) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); return; } + if (image->baseSize < tiledLevelSize) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Image '%s' pixel data is too small: have=%u need=%u\n", + image->name, image->baseSize, tiledLevelSize); + return; + } + + std::vector pixelData(image->pixels, image->pixels + tiledLevelSize); + + image::xenos_texture::ApplyGpuEndian(pixelData.data(), pixelData.size(), + static_cast(image->texture.basemap->Format.Endian)); + + // Create a linear data buffer to hold the untiled texture + std::vector linearData(linearLevelSize); + if (!image::xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), - image->texture.basemap->Format.Pitch, linearData.data(), rowPitch, - pixelData.data())) + image->texture.basemap->Format.Pitch, linearData.data(), + linearData.size(), rowPitch, pixelData.data(), pixelData.size())) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile image '%s'\n", image->name); return; @@ -285,12 +308,14 @@ void Cmd_imagedump() auto width = image->width * 2; auto height = image->height * 2; - auto baseSize = width * height * 4; - auto format = image->texture.basemap->Format.DataFormat; + const uint32_t linearLevelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, 0u, format); + const uint32_t tiledLevelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, 0u, format, 0u); + image::DDS_HEADER header; - if (!image::CreateDdsHeader(header, width, height, image->depth, 1u, baseSize, image::DDSCAPS_TEXTURE, 0u, - format)) + if (linearLevelSize == 0 || tiledLevelSize == 0 || + !image::CreateDdsHeader(header, width, height, image->depth, 1u, linearLevelSize, image::DDSCAPS_TEXTURE, + 0u, format)) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); return; @@ -320,12 +345,21 @@ void Cmd_imagedump() continue; } + if (buffer.size() < tiledLevelSize) + { + Com_PrintError(CON_CHANNEL_ERROR, + "Image_Dump: Highmip image '%s' pixel data is too small: have=%u need=%u\n", + assetName.c_str(), static_cast(buffer.size()), tiledLevelSize); + continue; + } + // Create a buffer for linear texture data - std::vector linearData(buffer.size()); + std::vector linearData(linearLevelSize); std::vector bufferAsUint8(buffer.begin(), buffer.end()); if (!image::xenos_texture::UntileTextureLevel(width, height, 0, static_cast(format), 0, - linearData.data(), rowPitch, bufferAsUint8.data())) + linearData.data(), linearData.size(), rowPitch, + bufferAsUint8.data(), bufferAsUint8.size())) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile highmip image '%s'\n", assetName.c_str()); continue; From e0e95caabec446da66fe6a3cc7d05d006e6089cd Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 11:57:53 +0100 Subject: [PATCH 12/20] feat: prefer highmip level when dumping textures --- src/game/iw3/mp/components/image_loader.cpp | 276 +++++++++++--------- 1 file changed, 157 insertions(+), 119 deletions(-) diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index 0a1f45b8..089d2acd 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -77,11 +77,149 @@ namespace iw3 { namespace mp { -void Image_Dump(const GfxImage *image) +namespace { - // TODO: cleanup empty files if failed +const char *HIGHMIP_DIR = "D:\\highmip"; - Com_Printf(CON_CHANNEL_CONSOLEONLY, "Image_Dump: Dumping image '%s'\n", image->name); +std::string GetSanitizedImageName(const char *imageName) +{ + if (imageName == NULL) + return std::string(); + + std::string sanitizedName = imageName; + sanitizedName.erase( + std::remove_if(sanitizedName.begin(), sanitizedName.end(), [](char c) { return c == '*'; }), + sanitizedName.end()); + return sanitizedName; +} + +std::string GetImageDumpPath(const char *imageName) +{ + return std::string(DUMP_DIR) + "\\images\\" + GetSanitizedImageName(imageName) + ".dds"; +} + +bool ReadBinaryFile(const std::string &path, std::vector *buffer) +{ + std::ifstream file(path.c_str(), std::ios::binary | std::ios::ate); + if (!file) + return false; + + const std::streamsize size = file.tellg(); + if (size < 0) + return false; + + file.seekg(0, std::ios::beg); + buffer->resize(static_cast(size)); + if (size == 0) + return true; + + return file.read(reinterpret_cast(buffer->data()), size) != 0; +} + +std::map CollectHighMipFiles() +{ + std::map highMipFiles; + const std::vector files = filesystem::list_files_in_directory(HIGHMIP_DIR); + for (size_t i = 0; i < files.size(); ++i) + { + const std::string assetName = extract_filename(files[i].c_str()); + highMipFiles[assetName] = std::string(HIGHMIP_DIR) + "\\" + files[i]; + } + + return highMipFiles; +} + +std::string FindHighMipPathForImage(const std::map &highMipFiles, const char *imageName) +{ + if (imageName == NULL) + return std::string(); + + std::map::const_iterator highMip = highMipFiles.find(imageName); + if (highMip != highMipFiles.end()) + return highMip->second; + + const std::string sanitizedName = GetSanitizedImageName(imageName); + highMip = highMipFiles.find(sanitizedName); + if (highMip != highMipFiles.end()) + return highMip->second; + + return std::string(); +} + +bool Image_DumpHighMip(const GfxImage *image, const std::string &highMipPath) +{ + if (image->mapType != MAPTYPE_2D) + return false; + + std::vector highMipData; + if (!ReadBinaryFile(highMipPath, &highMipData)) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to read highmip file for image '%s': %s\n", image->name, + highMipPath.c_str()); + return false; + } + + const uint32_t width = static_cast(image->width) * 2u; + const uint32_t height = static_cast(image->height) * 2u; + const uint32_t format = image->texture.basemap->Format.DataFormat; + const uint32_t linearLevelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, 0u, format); + const uint32_t tiledLevelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, 0u, format, 0u); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(width, 0u, format); + if (linearLevelSize == 0 || tiledLevelSize == 0 || rowPitch == 0) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported highmip texture format %u for image '%s'\n", format, + image->name); + return false; + } + + if (highMipData.size() < tiledLevelSize) + { + Com_PrintError(CON_CHANNEL_ERROR, + "Image_Dump: Highmip image '%s' pixel data is too small: have=%u need=%u\n", image->name, + static_cast(highMipData.size()), tiledLevelSize); + return false; + } + + image::DDS_HEADER header; + if (!image::CreateDdsHeader(header, width, height, image->depth, 1u, linearLevelSize, image::DDSCAPS_TEXTURE, 0u, + format)) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported highmip texture format %u for image '%s'\n", format, + image->name); + return false; + } + + const std::string outputPath = GetImageDumpPath(image->name); + std::ofstream outputFile(outputPath.c_str(), std::ios::binary); + if (!outputFile) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to open file: %s\n", outputPath.c_str()); + return false; + } + + image::WriteDdsHeader(outputFile, header); + + std::vector tiledData(highMipData.begin(), highMipData.begin() + tiledLevelSize); + image::xenos_texture::ApplyGpuEndian(tiledData.data(), tiledData.size(), + static_cast(image->texture.basemap->Format.Endian)); + + std::vector linearData(linearLevelSize); + if (!image::xenos_texture::UntileTextureLevel(width, height, 0u, format, 0u, linearData.data(), linearData.size(), + rowPitch, tiledData.data(), tiledData.size())) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile highmip image '%s'\n", image->name); + return false; + } + + outputFile.write(reinterpret_cast(linearData.data()), linearData.size()); + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Image_Dump: Dumped highmip image '%s'\n", image->name); + return true; +} +} // namespace + +void Image_Dump(const GfxImage *image, const std::string &highMipPath) +{ + // TODO: cleanup empty files if failed if (!image) { @@ -89,6 +227,14 @@ void Image_Dump(const GfxImage *image) return; } + if (image->name == NULL) + { + Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Image has no name!\n"); + return; + } + + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Image_Dump: Dumping image '%s'\n", image->name); + if (!image->pixels || image->baseSize == 0) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Image '%s' has no valid pixel data!\n", image->name); @@ -101,6 +247,9 @@ void Image_Dump(const GfxImage *image) return; } + if (!highMipPath.empty() && Image_DumpHighMip(image, highMipPath)) + return; + const uint32_t faceCount = image->mapType == MAPTYPE_CUBE ? 6u : 1u; uint32_t BaseSize = image::xenos_texture::CalculateBaseSize(image->texture.basemap, image->width, image->height, faceCount); @@ -123,16 +272,9 @@ void Image_Dump(const GfxImage *image) return; } - std::string filename = std::string(DUMP_DIR) + "\\" + "images"; - std::string sanitized_name = image->name; + const std::string filename = GetImageDumpPath(image->name); - // Remove invalid characters - sanitized_name.erase(std::remove_if(sanitized_name.begin(), sanitized_name.end(), [](char c) { return c == '*'; }), - sanitized_name.end()); - - filename += "\\" + sanitized_name + ".dds"; - - std::ofstream file(filename, std::ios::binary); + std::ofstream file(filename.c_str(), std::ios::binary); if (!file) { Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to open file: %s\n", filename.c_str()); @@ -257,118 +399,14 @@ void Cmd_imagedump() CreateDirectoryA(DUMP_DIR, 0); CreateDirectoryA((std::string(DUMP_DIR) + "\\images").c_str(), 0); + const std::map highMipFiles = CollectHighMipFiles(); for (unsigned int i = 0; i < imageList.count; i++) { auto image = imageList.image[i]; - Image_Dump(image); - } - - auto highmips = filesystem::list_files_in_directory("D:\\highmip"); - for (size_t i = 0; i < highmips.size(); ++i) - { - const std::string &filepath = "D:\\highmip\\" + highmips[i]; - Com_Printf(CON_CHANNEL_CONSOLEONLY, "Dumping highmip file: %s\n", filepath.c_str()); - std::string assetName = extract_filename(filepath.c_str()); - auto asset = DB_FindXAssetEntry(ASSET_TYPE_IMAGE, assetName.c_str()); - if (!asset) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image '%s' not found in asset list!\n", assetName.c_str()); - continue; - } - - auto image = asset->entry.asset.header.image; - - std::ifstream input_file(filepath, - std::ios::binary | std::ios::ate); // Open file in binary mode and seek to end - if (!input_file) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to open file: %s\n", filepath.c_str()); + if (image == NULL) continue; - } - - std::streamsize size = input_file.tellg(); - if (size < 0) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to determine file size: %s\n", filepath.c_str()); - continue; - } - - input_file.seekg(0, std::ios::beg); - std::vector buffer(static_cast(size)); - - if (input_file.read(reinterpret_cast(buffer.data()), size)) - { - Com_Printf(CON_CHANNEL_CONSOLEONLY, "Read %d bytes from file.\n", size); - } - else - { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Error reading file: %s\n", filepath.c_str()); - continue; - } - - auto width = image->width * 2; - auto height = image->height * 2; - auto format = image->texture.basemap->Format.DataFormat; - const uint32_t linearLevelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, 0u, format); - const uint32_t tiledLevelSize = image::xenos_texture::CalculateTiledLevelSize(width, height, 0u, format, 0u); - - image::DDS_HEADER header; - if (linearLevelSize == 0 || tiledLevelSize == 0 || - !image::CreateDdsHeader(header, width, height, image->depth, 1u, linearLevelSize, image::DDSCAPS_TEXTURE, - 0u, format)) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); - return; - } - - // TODO: add sanity checks for format, size, etc. - // TODO: handle filenames with unsupported characters for Windows - - auto output_filepath = std::string(DUMP_DIR) + "\\highmip\\" + assetName + ".dds"; - - std::ofstream output_file(output_filepath, std::ios::binary); - if (!output_file) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to open file: %s\n", output_filepath.c_str()); - return; - } - - image::WriteDdsHeader(output_file, header); - - image::xenos_texture::ApplyGpuEndian(buffer.data(), buffer.size(), - static_cast(image->texture.basemap->Format.Endian)); - - const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(width, 0u, format); - if (rowPitch == 0) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); - continue; - } - - if (buffer.size() < tiledLevelSize) - { - Com_PrintError(CON_CHANNEL_ERROR, - "Image_Dump: Highmip image '%s' pixel data is too small: have=%u need=%u\n", - assetName.c_str(), static_cast(buffer.size()), tiledLevelSize); - continue; - } - - // Create a buffer for linear texture data - std::vector linearData(linearLevelSize); - std::vector bufferAsUint8(buffer.begin(), buffer.end()); - - if (!image::xenos_texture::UntileTextureLevel(width, height, 0, static_cast(format), 0, - linearData.data(), linearData.size(), rowPitch, - bufferAsUint8.data(), bufferAsUint8.size())) - { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile highmip image '%s'\n", assetName.c_str()); - continue; - } - - output_file.write(reinterpret_cast(linearData.data()), linearData.size()); - output_file.close(); - Com_Printf(CON_CHANNEL_CONSOLEONLY, "Dumped highmip file: %s\n", output_filepath.c_str()); + Image_Dump(image, FindHighMipPathForImage(highMipFiles, image->name)); } } From ecc6fcf42b89a4ec2e9e9e0da25dab54ddf0be55 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 26 Jun 2026 12:00:55 +0100 Subject: [PATCH 13/20] chore: cleanup log messages --- src/game/iw3/mp/components/image_loader.cpp | 58 ++++++++++----------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index 089d2acd..d7c516fb 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -154,7 +154,7 @@ bool Image_DumpHighMip(const GfxImage *image, const std::string &highMipPath) std::vector highMipData; if (!ReadBinaryFile(highMipPath, &highMipData)) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to read highmip file for image '%s': %s\n", image->name, + Com_PrintError(CON_CHANNEL_ERROR, "Could not read highmip for image '%s': %s\n", image->name, highMipPath.c_str()); return false; } @@ -167,16 +167,14 @@ bool Image_DumpHighMip(const GfxImage *image, const std::string &highMipPath) const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(width, 0u, format); if (linearLevelSize == 0 || tiledLevelSize == 0 || rowPitch == 0) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported highmip texture format %u for image '%s'\n", format, - image->name); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': unsupported highmip format %u\n", image->name, format); return false; } if (highMipData.size() < tiledLevelSize) { - Com_PrintError(CON_CHANNEL_ERROR, - "Image_Dump: Highmip image '%s' pixel data is too small: have=%u need=%u\n", image->name, - static_cast(highMipData.size()), tiledLevelSize); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': highmip data is too small (have %u, need %u)\n", + image->name, static_cast(highMipData.size()), tiledLevelSize); return false; } @@ -184,8 +182,7 @@ bool Image_DumpHighMip(const GfxImage *image, const std::string &highMipPath) if (!image::CreateDdsHeader(header, width, height, image->depth, 1u, linearLevelSize, image::DDSCAPS_TEXTURE, 0u, format)) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported highmip texture format %u for image '%s'\n", format, - image->name); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': unsupported highmip format %u\n", image->name, format); return false; } @@ -193,7 +190,7 @@ bool Image_DumpHighMip(const GfxImage *image, const std::string &highMipPath) std::ofstream outputFile(outputPath.c_str(), std::ios::binary); if (!outputFile) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to open file: %s\n", outputPath.c_str()); + Com_PrintError(CON_CHANNEL_ERROR, "Could not create DDS for image '%s': %s\n", image->name, outputPath.c_str()); return false; } @@ -207,12 +204,12 @@ bool Image_DumpHighMip(const GfxImage *image, const std::string &highMipPath) if (!image::xenos_texture::UntileTextureLevel(width, height, 0u, format, 0u, linearData.data(), linearData.size(), rowPitch, tiledData.data(), tiledData.size())) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile highmip image '%s'\n", image->name); + Com_PrintError(CON_CHANNEL_ERROR, "Could not decode highmip for image '%s'\n", image->name); return false; } outputFile.write(reinterpret_cast(linearData.data()), linearData.size()); - Com_Printf(CON_CHANNEL_CONSOLEONLY, "Image_Dump: Dumped highmip image '%s'\n", image->name); + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Dumped image '%s' (highmip)\n", image->name); return true; } } // namespace @@ -223,27 +220,26 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) if (!image) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Null GfxImage!\n"); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image: null asset\n"); return; } if (image->name == NULL) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Image has no name!\n"); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image: missing name\n"); return; } - Com_Printf(CON_CHANNEL_CONSOLEONLY, "Image_Dump: Dumping image '%s'\n", image->name); - if (!image->pixels || image->baseSize == 0) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Image '%s' has no valid pixel data!\n", image->name); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': no pixel data\n", image->name); return; } if (image->mapType != MAPTYPE_2D && image->mapType != MAPTYPE_CUBE) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported map type %d!\n", image->mapType); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': unsupported map type %d\n", image->name, + image->mapType); return; } @@ -268,7 +264,7 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) image::xenos_texture::GetTextureLevelCount(image->texture.basemap), BaseSize, image::DDSCAPS_TEXTURE | image::DDSCAPS_MIPMAP, caps2, format)) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': unsupported texture format %d\n", image->name, format); return; } @@ -277,7 +273,7 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) std::ofstream file(filename.c_str(), std::ios::binary); if (!file) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to open file: %s\n", filename.c_str()); + Com_PrintError(CON_CHANNEL_ERROR, "Could not create DDS for image '%s': %s\n", image->name, filename.c_str()); return; } @@ -293,7 +289,8 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); if (linearFaceSize == 0 || tiledFaceSize == 0 || rowPitch == 0) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported cube map format %d!\n", format); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping cubemap '%s': unsupported texture format %d\n", image->name, + format); return; } @@ -303,9 +300,9 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) const size_t faceOffset = static_cast(i) * tiledFaceSize; if (faceOffset + tiledFaceSize > image->baseSize) { - Com_PrintError(CON_CHANNEL_ERROR, - "Image_Dump: Cube image '%s' pixel data is too small: have=%u need=%u\n", image->name, - image->baseSize, static_cast(faceOffset + tiledFaceSize)); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping cubemap '%s': pixel data is too small (have %u, need %u)\n", + image->name, image->baseSize, + static_cast(faceOffset + tiledFaceSize)); return; } @@ -323,8 +320,7 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) linearFace.size(), rowPitch, swappedFace.data(), swappedFace.size())) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile cube image '%s' face %d\n", image->name, - i); + Com_PrintError(CON_CHANNEL_ERROR, "Could not decode cubemap '%s' face %d\n", image->name, i); return; } @@ -332,6 +328,7 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) } file.close(); + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Dumped image '%s'\n", image->name); } else if (image->mapType == MAPTYPE_2D) { @@ -346,13 +343,14 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, format); if (linearLevelSize == 0 || tiledLevelSize == 0 || rowPitch == 0) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported texture format %d!\n", format); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': unsupported texture format %d\n", image->name, + format); return; } if (image->baseSize < tiledLevelSize) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Image '%s' pixel data is too small: have=%u need=%u\n", + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': pixel data is too small (have %u, need %u)\n", image->name, image->baseSize, tiledLevelSize); return; } @@ -369,17 +367,19 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) image->texture.basemap->Format.Pitch, linearData.data(), linearData.size(), rowPitch, pixelData.data(), pixelData.size())) { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Failed to untile image '%s'\n", image->name); + Com_PrintError(CON_CHANNEL_ERROR, "Could not decode image '%s'\n", image->name); return; } file.write(reinterpret_cast(linearData.data()), linearData.size()); file.close(); + Com_Printf(CON_CHANNEL_CONSOLEONLY, "Dumped image '%s'\n", image->name); } else { - Com_PrintError(CON_CHANNEL_ERROR, "Image_Dump: Unsupported map type %d!\n", image->mapType); + Com_PrintError(CON_CHANNEL_ERROR, "Skipping image '%s': unsupported map type %d\n", image->name, + image->mapType); return; } } From b1a84a6e26db755d2d55f03952902c1d4015e732 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Sun, 28 Jun 2026 07:18:10 +0100 Subject: [PATCH 14/20] feat: IW4 image dumping --- src/game/iw3/mp/components/image_loader.cpp | 15 +- .../iw4/mp_tu6/components/image_loader.cpp | 617 +++++++++++++++++- src/game/iw4/mp_tu6/components/mpsp.cpp | 32 - src/game/iw4/mp_tu6/structs.h | 56 ++ src/game/iw4/mp_tu6/symbols.h | 16 + src/image/dds_loader.cpp | 2 +- src/image/dds_writer.cpp | 21 +- 7 files changed, 711 insertions(+), 48 deletions(-) diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index d7c516fb..1c503469 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -87,9 +87,8 @@ std::string GetSanitizedImageName(const char *imageName) return std::string(); std::string sanitizedName = imageName; - sanitizedName.erase( - std::remove_if(sanitizedName.begin(), sanitizedName.end(), [](char c) { return c == '*'; }), - sanitizedName.end()); + sanitizedName.erase(std::remove_if(sanitizedName.begin(), sanitizedName.end(), [](char c) { return c == '*'; }), + sanitizedName.end()); return sanitizedName; } @@ -301,8 +300,7 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) if (faceOffset + tiledFaceSize > image->baseSize) { Com_PrintError(CON_CHANNEL_ERROR, "Skipping cubemap '%s': pixel data is too small (have %u, need %u)\n", - image->name, image->baseSize, - static_cast(faceOffset + tiledFaceSize)); + image->name, image->baseSize, static_cast(faceOffset + tiledFaceSize)); return; } @@ -315,10 +313,9 @@ void Image_Dump(const GfxImage *image, const std::string &highMipPath) // Create buffer for linear texture data std::vector linearFace(linearFaceSize); - if (!image::xenos_texture::UntileTextureLevel(image->width, image->height, 0, static_cast(format), - image->texture.basemap->Format.Pitch, linearFace.data(), - linearFace.size(), rowPitch, swappedFace.data(), - swappedFace.size())) + if (!image::xenos_texture::UntileTextureLevel( + image->width, image->height, 0, static_cast(format), image->texture.basemap->Format.Pitch, + linearFace.data(), linearFace.size(), rowPitch, swappedFace.data(), swappedFace.size())) { Com_PrintError(CON_CHANNEL_ERROR, "Could not decode cubemap '%s' face %d\n", image->name, i); return; diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index d1b625cc..7e2e1187 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -3,21 +3,65 @@ #include "events.h" #include "image_loader.h" #include "image/dds_loader.h" +#include "image/dds_writer.h" #include "image/texture_layout.h" #include "image/xenos_texture.h" +#include + #ifndef INVALID_FILE_ATTRIBUTES #define INVALID_FILE_ATTRIBUTES ((DWORD) - 1) #endif +#ifdef PtrToUint +#undef PtrToUint +#endif + namespace { namespace game = iw4::mp_tu6; -const uint32_t IW4_STREAM_PIXEL_SIZE_MASK = 0x3FFFFFF; +const uint32_t STREAM_PIXEL_SIZE_MASK = 0x3FFFFFF; +const uint32_t MAX_STREAM_COMPRESSED_SIZE = 64u * 1024u * 1024u; typedef image::DdsImage DDSImage; +struct ZlibStream +{ + unsigned __int8 *next_in; + unsigned int avail_in; + unsigned int total_in; + unsigned __int8 *next_out; + unsigned int avail_out; + unsigned int total_out; + char *msg; + void *state; + unsigned __int8 *(__fastcall *zalloc)(unsigned __int8 *opaque, unsigned int items, unsigned int size); + void(__fastcall *zfree)(unsigned __int8 *opaque, unsigned __int8 *ptr); + unsigned __int8 *opaque; + int data_type; +}; +static_assert(sizeof(ZlibStream) == 48, ""); + +game::cmd_function_s Cmd_ImageDump_VAR; + +uint32_t PtrToUint(const void *ptr) +{ + return static_cast(reinterpret_cast(ptr)); +} + +bool IsPlausibleAlignedPointer(const void *ptr) +{ + const uint32_t value = PtrToUint(ptr); + return value >= 0x10000u && value < 0xF0000000u && (value & 0x3u) == 0; +} + +bool IsPlausiblePointer(const void *ptr) +{ + const uint32_t value = PtrToUint(ptr); + return value >= 0x10000u && value < 0xF0000000u; +} + void PrintImageError(const char *format, ...) { char buffer[1024]; @@ -182,13 +226,581 @@ bool ImageHasStreamedParts(const game::GfxImage *image) for (uint32_t imagePartIndex = 0; imagePartIndex < 4u; ++imagePartIndex) { - if ((image->streams[imagePartIndex].pixelSize & IW4_STREAM_PIXEL_SIZE_MASK) != 0) + if ((image->streams[imagePartIndex].pixelSize & STREAM_PIXEL_SIZE_MASK) != 0) + return true; + } + + return false; +} + +GPUTEXTUREFORMAT GetImageGpuFormat(const game::GfxImage *image) +{ + return static_cast(image->texture.basemap.Format.DataFormat); +} + +uint32_t GetImageBasePitch(const game::GfxImage *image, bool streamed) +{ + if (streamed) + return 0u; + + return image->texture.basemap.Format.Pitch; +} + +GPUENDIAN GetImageEndian(const game::GfxImage *image) +{ + return static_cast(image->texture.basemap.Format.Endian); +} + +uint32_t GetImageLevelCount(const game::GfxImage *image, bool streamed) +{ + uint32_t levelCount = max(1u, static_cast(image->levelCount)); + + if (!streamed && image->texture.basemap.Format.PackedMips != 0) + { + const uint32_t mipTailBaseLevel = image::xenos_texture::GetMipTailBaseLevel(image->width, image->height); + levelCount = max(1u, min(levelCount, mipTailBaseLevel)); + } + + return levelCount; +} + +bool IsImageShapeSane(const game::GfxImage *image) +{ + if (image == NULL || !IsPlausibleAlignedPointer(image)) + return false; + + if (image->name == NULL || !IsPlausiblePointer(image->name) || image->name[0] == '\0') + return false; + + if (image->mapType != game::MAPTYPE_2D && image->mapType != game::MAPTYPE_CUBE) + return false; + + if (image->width == 0 || image->height == 0 || image->width > 8192u || image->height > 8192u) + return false; + + if (image->depth == 0 || image->depth > 6u) + return false; + + if (image->levelCount == 0 || image->levelCount > 16u) + return false; + + if (image::xenos_texture::GetTextureFormatInfo(GetImageGpuFormat(image)) == NULL) + return false; + + if (image->cardMemory.platform[0] < 0 || image->cardMemory.platform[0] > 128 * 1024 * 1024) + return false; + + return true; +} + +std::string GetSanitizedImageName(const char *imageName) +{ + if (imageName == NULL) + return std::string(); + + std::string sanitizedName; + for (const char *current = imageName; *current != '\0'; ++current) + { + const char c = *current; + if (c == '*') + continue; + + if (c == '/' || c == '\\' || c == ':' || c == '?' || c == '"' || c == '<' || c == '>' || c == '|') + sanitizedName.push_back('_'); + else + sanitizedName.push_back(c); + } + + return sanitizedName; +} + +std::string GetDumpZoneName(const char *zoneName) +{ + const std::string sanitizedZoneName = GetSanitizedImageName(zoneName); + return sanitizedZoneName.empty() ? "unknown" : sanitizedZoneName; +} + +std::string GetImageDumpPath(const char *imageName, const char *zoneName) +{ + return std::string(DUMP_DIR) + "\\" + GetDumpZoneName(zoneName) + "\\images\\" + GetSanitizedImageName(imageName) + + ".dds"; +} + +void EnsureImageDumpDirectory(const char *zoneName) +{ + CreateDirectoryA(DUMP_DIR, NULL); + + const std::string zoneDirectory = std::string(DUMP_DIR) + "\\" + GetDumpZoneName(zoneName); + CreateDirectoryA(zoneDirectory.c_str(), NULL); + CreateDirectoryA((zoneDirectory + "\\images").c_str(), NULL); +} + +const char *GetZoneName(uint32_t zoneIndex) +{ + if (zoneIndex >= game::g_zoneCount) + return NULL; + + const char *zoneName = game::g_zones[zoneIndex].file.name; + if (zoneName[0] == '\0') + return NULL; + + return zoneName; +} + +bool ReadFileRange(const std::string &path, uint32_t offset, uint32_t size, std::vector *buffer) +{ + if (buffer == NULL || size == 0) + return false; + + HANDLE file = CreateFileA(path.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, NULL); + if (file == INVALID_HANDLE_VALUE) + return false; + + SetLastError(NO_ERROR); + const DWORD seekResult = SetFilePointer(file, offset, NULL, FILE_BEGIN); + if (seekResult == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) + { + CloseHandle(file); + return false; + } + + buffer->assign(size, 0); + + DWORD bytesRead = 0; + const BOOL readOk = ReadFile(file, &(*buffer)[0], size, &bytesRead, NULL); + CloseHandle(file); + + if (!readOk || bytesRead != size) + { + buffer->clear(); + return false; + } + + return true; +} + +bool GetImagePoolIndex(const game::GfxImage *image, uint32_t *imageIndex) +{ + if (image == NULL || imageIndex == NULL) + return false; + + const uint32_t imageAddress = PtrToUint(image); + const uint32_t poolAddress = PtrToUint(game::g_gfxImagePool); + const uint32_t poolSize = sizeof(game::GfxImage) * game::g_gfxImagePoolSize; + if (imageAddress < poolAddress || imageAddress >= poolAddress + poolSize) + return false; + + const uint32_t imageOffset = imageAddress - poolAddress; + if ((imageOffset % sizeof(game::GfxImage)) != 0) + return false; + + *imageIndex = imageOffset / sizeof(game::GfxImage); + return true; +} + +const game::GfxSubImageStream *GetImageStreamSources(const game::GfxImage *image) +{ + uint32_t imageIndex = 0; + if (!GetImagePoolIndex(image, &imageIndex)) + return NULL; + + return game::g_imageStreams[imageIndex].part; +} + +bool GetImageFilePath(const game::GfxSubImageStream &source, std::string *path) +{ + if (path == NULL || source.file == NULL || !IsPlausibleAlignedPointer(source.file) || source.file->name[0] == '\0') + return false; + + char filePath[MAX_PATH]; + _snprintf(filePath, sizeof(filePath), "game:\\%s.pak", source.file->name); + filePath[sizeof(filePath) - 1] = '\0'; + *path = filePath; + return true; +} + +unsigned __int8 *__fastcall ImageZlibAlloc(unsigned __int8 *opaque, unsigned int items, unsigned int size) +{ + (void)opaque; + + if (items == 0 || size == 0 || items > 0xFFFFFFFFu / size) + return NULL; + + return static_cast(malloc(items * size)); +} + +void __fastcall ImageZlibFree(unsigned __int8 *opaque, unsigned __int8 *ptr) +{ + (void)opaque; + free(ptr); +} + +bool InflateImageStream(const std::vector &compressedData, uint32_t expectedSize, + std::vector *inflatedData) +{ + if (inflatedData == NULL || compressedData.empty() || expectedSize == 0) + return false; + + inflatedData->assign(expectedSize, 0); + ZlibStream stream; + memset(&stream, 0, sizeof(stream)); + + stream.next_in = const_cast(&compressedData[0]); + stream.avail_in = static_cast(compressedData.size()); + stream.next_out = &(*inflatedData)[0]; + stream.avail_out = expectedSize; + stream.zalloc = ImageZlibAlloc; + stream.zfree = ImageZlibFree; + + int result = game::Zlib_InflateInit(&stream, "1.1.4", sizeof(stream)); + if (result == 0) + { + const int inflateResult = game::Zlib_Inflate(&stream, 4); + if (inflateResult == 1) + { + result = game::Zlib_InflateEnd(&stream); + } + else + { + game::Zlib_InflateEnd(&stream); + result = inflateResult != 0 ? inflateResult : -5; + } + } + + if (result != 0 || stream.total_out == 0 || stream.total_out > expectedSize) + { + inflatedData->clear(); + return false; + } + + inflatedData->resize(stream.total_out); + return true; +} + +bool WriteUntiledLevel(std::ofstream &file, const game::GfxImage *image, uint32_t width, uint32_t height, + uint32_t mipLevel, GPUTEXTUREFORMAT format, uint32_t basePitch, const unsigned char *tiledPixels, + uint32_t tiledSize, GPUENDIAN endian) +{ + const uint32_t linearLevelSize = image::xenos_texture::CalculateLinearLevelSize(width, height, mipLevel, format); + const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(width, mipLevel, format); + if (linearLevelSize == 0 || rowPitch == 0 || tiledSize == 0) + return false; + + std::vector tiledData(tiledPixels, tiledPixels + tiledSize); + image::xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), endian); + + std::vector linearData(linearLevelSize); + if (!image::xenos_texture::UntileTextureLevel(width, height, mipLevel, format, basePitch, &linearData[0], + linearData.size(), rowPitch, &tiledData[0], tiledData.size())) + return false; + + file.write(reinterpret_cast(&linearData[0]), linearData.size()); + return true; +} + +bool Dump2DImage(const game::GfxImage *image, bool streamed, const char *zoneName) +{ + if (image->pixels == NULL || image->cardMemory.platform[0] <= 0) + return false; + + const GPUTEXTUREFORMAT format = GetImageGpuFormat(image); + const uint32_t levelCount = GetImageLevelCount(image, streamed); + const uint32_t basePitch = GetImageBasePitch(image, streamed); + const GPUENDIAN endian = GetImageEndian(image); + const uint32_t linearBaseSize = + image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t tiledBaseSize = + image::xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, format, basePitch); + if (linearBaseSize == 0 || tiledBaseSize == 0) + return false; + + const size_t requiredBytes = + static_cast(tiledBaseSize) + + image::CalculateRequiredMipTextureBytes(image->width, image->height, format, 1u, levelCount, 1u); + if (requiredBytes > static_cast(image->cardMemory.platform[0])) + return false; + + image::DDS_HEADER header; + const uint32_t caps = + image::DDSCAPS_TEXTURE | (levelCount > 1u ? image::DDSCAPS_COMPLEX | image::DDSCAPS_MIPMAP : 0u); + if (!image::CreateDdsHeader(header, image->width, image->height, image->depth, levelCount, linearBaseSize, caps, 0u, + format)) + return false; + + if (levelCount > 1u) + header.dwFlags |= image::DDSD_MIPMAPCOUNT; + + EnsureImageDumpDirectory(zoneName); + const std::string filename = GetImageDumpPath(image->name, zoneName); + std::ofstream file(filename.c_str(), std::ios::binary); + if (!file) + { + PrintImageError("Could not create DDS for image '%s': %s\n", image->name, filename.c_str()); + return false; + } + + image::WriteDdsHeader(file, header); + + const unsigned char *baseData = image->pixels; + const unsigned char *mipData = baseData + tiledBaseSize; + for (uint32_t mipLevel = 0; mipLevel < levelCount; ++mipLevel) + { + const uint32_t tiledLevelSize = + image::xenos_texture::CalculateTiledLevelSize(image->width, image->height, mipLevel, format, basePitch); + const unsigned char *source = baseData; + if (mipLevel > 0) + { + source = mipData + + image::xenos_texture::CalculateMipLevelOffset(image->width, image->height, mipLevel, format, 1u); + } + + if (!WriteUntiledLevel(file, image, image->width, image->height, mipLevel, format, basePitch, source, + tiledLevelSize, endian)) + return false; + } + + PrintImageInfo("Dumped image '%s'%s\n", image->name, streamed ? " (streamed)" : ""); + return true; +} + +bool DumpCubeImage(const game::GfxImage *image, bool streamed, const char *zoneName) +{ + if (image->pixels == NULL || image->cardMemory.platform[0] <= 0) + return false; + + const GPUTEXTUREFORMAT format = GetImageGpuFormat(image); + const uint32_t basePitch = GetImageBasePitch(image, streamed); + const GPUENDIAN endian = GetImageEndian(image); + const uint32_t linearFaceSize = + image::xenos_texture::CalculateLinearLevelSize(image->width, image->height, 0u, format); + const uint32_t tiledFaceSize = + image::xenos_texture::CalculateTiledLevelSize(image->width, image->height, 0u, format, basePitch); + if (linearFaceSize == 0 || tiledFaceSize == 0) + return false; + + const size_t requiredBytes = static_cast(tiledFaceSize) * 6u; + if (requiredBytes > static_cast(image->cardMemory.platform[0])) + return false; + + const uint32_t caps2 = image::DDSCAPS2_CUBEMAP | image::DDSCAPS2_CUBEMAP_POSITIVEX | + image::DDSCAPS2_CUBEMAP_NEGATIVEX | image::DDSCAPS2_CUBEMAP_POSITIVEY | + image::DDSCAPS2_CUBEMAP_NEGATIVEY | image::DDSCAPS2_CUBEMAP_POSITIVEZ | + image::DDSCAPS2_CUBEMAP_NEGATIVEZ; + + image::DDS_HEADER header; + if (!image::CreateDdsHeader(header, image->width, image->height, image->depth, 1u, linearFaceSize, + image::DDSCAPS_TEXTURE | image::DDSCAPS_COMPLEX, caps2, format)) + return false; + + EnsureImageDumpDirectory(zoneName); + const std::string filename = GetImageDumpPath(image->name, zoneName); + std::ofstream file(filename.c_str(), std::ios::binary); + if (!file) + { + PrintImageError("Could not create DDS for image '%s': %s\n", image->name, filename.c_str()); + return false; + } + + image::WriteDdsHeader(file, header); + + for (uint32_t faceIndex = 0; faceIndex < 6u; ++faceIndex) + { + const unsigned char *source = image->pixels + static_cast(faceIndex) * tiledFaceSize; + if (!WriteUntiledLevel(file, image, image->width, image->height, 0u, format, basePitch, source, tiledFaceSize, + endian)) + return false; + } + + PrintImageInfo("Dumped image '%s'%s\n", image->name, streamed ? " (streamed)" : ""); + return true; +} + +uint32_t GetStreamPartLevelCount(const game::GfxImage *image, uint32_t imagePartIndex) +{ + const uint32_t streamLevelCount = image->streams[imagePartIndex].pixelSize >> 26; + if (streamLevelCount != 0) + return streamLevelCount; + + return max(1u, static_cast(image->levelCount)); +} + +bool DumpStreamPartFromData(const game::GfxImage *image, uint32_t imagePartIndex, const char *zoneName, + const std::vector &pixelData) +{ + if (imagePartIndex >= 4u || pixelData.empty()) + return false; + + const game::GfxImageStreamData &streamData = image->streams[imagePartIndex]; + if (streamData.width == 0 || streamData.height == 0) + return false; + + game::GfxImage streamImage = *image; + streamImage.width = streamData.width; + streamImage.height = streamData.height; + streamImage.levelCount = static_cast(GetStreamPartLevelCount(image, imagePartIndex)); + streamImage.cardMemory.platform[0] = static_cast(pixelData.size()); + streamImage.pixels = const_cast(&pixelData[0]); + + if (streamImage.mapType == game::MAPTYPE_2D) + return Dump2DImage(&streamImage, true, zoneName); + + if (streamImage.mapType == game::MAPTYPE_CUBE) + return DumpCubeImage(&streamImage, true, zoneName); + + return false; +} + +bool TryReadStreamPartPixels(const game::GfxImage *image, uint32_t imagePartIndex, std::vector *pixelData) +{ + if (imagePartIndex >= 4u || pixelData == NULL) + return false; + + const game::GfxSubImageStream *sources = GetImageStreamSources(image); + if (sources == NULL) + return false; + + const game::GfxImageStreamData &streamData = image->streams[imagePartIndex]; + const uint32_t expectedSize = streamData.pixelSize & STREAM_PIXEL_SIZE_MASK; + if (expectedSize == 0) + return false; + + const game::GfxSubImageStream &source = sources[imagePartIndex]; + if (source.fileOffsetEnd <= source.fileOffset) + return false; + + const uint32_t compressedSize = source.fileOffsetEnd - source.fileOffset; + if (compressedSize > MAX_STREAM_COMPRESSED_SIZE) + return false; + + std::string imageFilePath; + if (!GetImageFilePath(source, &imageFilePath)) + return false; + + std::vector compressedData; + if (!ReadFileRange(imageFilePath, source.fileOffset, compressedSize, &compressedData)) + return false; + + return InflateImageStream(compressedData, expectedSize, pixelData); +} + +bool TryDumpStreamPartEager(const game::GfxImage *image, uint32_t imagePartIndex, const char *zoneName) +{ + if (imagePartIndex >= 4u || !IsImageShapeSane(image)) + return false; + + const game::GfxImageStreamData &streamData = image->streams[imagePartIndex]; + if ((streamData.pixelSize & STREAM_PIXEL_SIZE_MASK) == 0) + return false; + + std::vector pixelData; + if (!TryReadStreamPartPixels(image, imagePartIndex, &pixelData)) + return false; + + return DumpStreamPartFromData(image, imagePartIndex, zoneName, pixelData); +} + +bool TryDumpStreamedImageEager(const game::GfxImage *image, const char *zoneName) +{ + if (!IsImageShapeSane(image)) + return false; + + bool usedParts[4] = {false, false, false, false}; + + for (uint32_t attempt = 0; attempt < 4u; ++attempt) + { + uint32_t bestPart = 4u; + uint32_t bestArea = 0; + + for (uint32_t imagePartIndex = 0; imagePartIndex < 4u; ++imagePartIndex) + { + if (usedParts[imagePartIndex]) + continue; + + const game::GfxImageStreamData &streamData = image->streams[imagePartIndex]; + if ((streamData.pixelSize & STREAM_PIXEL_SIZE_MASK) == 0) + continue; + + const uint32_t imageArea = + static_cast(streamData.width) * static_cast(streamData.height); + if (bestPart == 4u || imageArea > bestArea) + { + bestPart = imagePartIndex; + bestArea = imageArea; + } + } + + if (bestPart == 4u) + break; + + usedParts[bestPart] = true; + if (TryDumpStreamPartEager(image, bestPart, zoneName)) return true; } return false; } +bool Image_Dump(game::GfxImage *image, const char *zoneName) +{ + if (!IsImageShapeSane(image)) + return false; + + if (ImageHasStreamedParts(image)) + return TryDumpStreamedImageEager(image, zoneName); + + if (image->mapType == game::MAPTYPE_2D) + return Dump2DImage(image, false, zoneName); + + if (image->mapType == game::MAPTYPE_CUBE) + return DumpCubeImage(image, false, zoneName); + + return false; +} + +void Cmd_ImageDump_f() +{ + CreateDirectoryA(DUMP_DIR, NULL); + PrintImageInfo("Dumping images by zone to %s\n", DUMP_DIR); + + uint32_t dumpedCount = 0; + uint32_t skippedCount = 0; + std::set visitedImages; + + for (uint32_t entryIndex = 0; entryIndex < game::g_assetEntryPoolSize; ++entryIndex) + { + const game::XAssetEntryPoolEntry *poolEntry = &game::g_assetEntryPool[entryIndex]; + const game::XAssetEntry &entry = poolEntry->entry; + if (entry.asset.type != game::ASSET_TYPE_IMAGE) + continue; + + game::GfxImage *image = entry.asset.header.image; + if (!IsImageShapeSane(image)) + continue; + + const char *zoneName = GetZoneName(entry.zoneIndex); + const std::string imageKey = GetDumpZoneName(zoneName) + "\\" + image->name; + if (visitedImages.find(imageKey) != visitedImages.end()) + continue; + + visitedImages.insert(imageKey); + if (Image_Dump(image, zoneName)) + ++dumpedCount; + else + ++skippedCount; + } + + PrintImageInfo("Image dump complete: dumped %u images", dumpedCount); + if (skippedCount != 0) + PrintImageInfo(" (%u skipped)", skippedCount); + PrintImageInfo("\n"); +} + +void RegisterCommands() +{ + game::Cmd_AddCommandInternal("imagedump", Cmd_ImageDump_f, &Cmd_ImageDump_VAR); +} + bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) { if (image->mapType != game::MAPTYPE_2D) @@ -735,6 +1347,7 @@ void ImageCache_InitImage_Hook(game::GfxImage *image, game::GfxImage *remoteImag image_loader::image_loader() { Events::OnDBLinkXAssetPre(OnDBLinkXAssetPre); + Events::OnCmdInit(RegisterCommands); ImageCache_InitImage_Detour = Detour(iw4::mp_tu6::ImageCache_InitImage, ImageCache_InitImage_Hook); ImageCache_InitImage_Detour.Install(); diff --git a/src/game/iw4/mp_tu6/components/mpsp.cpp b/src/game/iw4/mp_tu6/components/mpsp.cpp index 0745356c..aa3b928f 100644 --- a/src/game/iw4/mp_tu6/components/mpsp.cpp +++ b/src/game/iw4/mp_tu6/components/mpsp.cpp @@ -31,37 +31,6 @@ bool is_mp_fastfile(const char *name) struct internal_state; -struct Sys_File -{ - void *handle; - int startOffset; -}; - -struct DBFile -{ - Sys_File handle; - char name[64]; -}; - -struct XBlock -{ - unsigned __int8 *data; - unsigned int size; -}; - -struct XZoneMemory -{ - XBlock blocks[6]; -}; - -struct XZone -{ - DBFile file; - int flags; - int allocType; - XZoneMemory mem; -}; - struct _OVERLAPPED { unsigned int Internal; @@ -113,7 +82,6 @@ const char **g_assetNames = reinterpret_cast(0x82442298); int *g_poolSize = reinterpret_cast(0x82442588); const DB_LoadData *g_load = reinterpret_cast(0x82678600); const unsigned int *g_zoneIndex = reinterpret_cast(0x827ADAE4); -const XZone *g_zones = reinterpret_cast(0x829D8048); GameWorldMp *gameWorldMp = reinterpret_cast(0x82DFD010); typedef int (*Com_sprintf_t)(char *dest, unsigned int size, const char *fmt, ...); diff --git a/src/game/iw4/mp_tu6/structs.h b/src/game/iw4/mp_tu6/structs.h index 86cb9509..f3a83e37 100644 --- a/src/game/iw4/mp_tu6/structs.h +++ b/src/game/iw4/mp_tu6/structs.h @@ -1871,6 +1871,35 @@ static_assert(offsetof(GfxImage, pixels) == 0x48, ""); static_assert(offsetof(GfxImage, streams) == 0x4C, ""); static_assert(offsetof(GfxImage, name) == 0x6C, ""); +struct Sys_File +{ + void *handle; + int startOffset; +}; +static_assert(sizeof(Sys_File) == 0x8, ""); + +struct DBFile +{ + Sys_File handle; + char name[64]; +}; +static_assert(sizeof(DBFile) == 0x48, ""); +static_assert(offsetof(DBFile, name) == 0x8, ""); + +struct GfxSubImageStream +{ + unsigned int fileOffset; + unsigned int fileOffsetEnd; + DBFile *file; +}; +static_assert(sizeof(GfxSubImageStream) == 0xC, ""); + +struct GfxImageStream +{ + GfxSubImageStream part[4]; +}; +static_assert(sizeof(GfxImageStream) == 0x30, ""); + struct cplane_s; struct cStaticModel_s; struct ClipMaterial @@ -2087,6 +2116,30 @@ struct XAsset XAssetHeader header; }; +struct XBlock +{ + unsigned __int8 *data; + unsigned int size; +}; +static_assert(sizeof(XBlock) == 0x8, ""); + +struct XZoneMemory +{ + XBlock blocks[6]; +}; +static_assert(sizeof(XZoneMemory) == 0x30, ""); + +struct XZone +{ + DBFile file; + int flags; + int allocType; + XZoneMemory mem; +}; +static_assert(sizeof(XZone) == 0x80, ""); +static_assert(offsetof(XZone, file) == 0x0, ""); +static_assert(offsetof(XZone, mem) == 0x50, ""); + struct __declspec(align(4)) XAssetEntry { XAsset asset; @@ -2095,12 +2148,15 @@ struct __declspec(align(4)) XAssetEntry unsigned __int16 nextHash; unsigned __int16 nextOverride; }; +static_assert(sizeof(XAssetEntry) == 0x10, ""); +static_assert(offsetof(XAssetEntry, zoneIndex) == 0x8, ""); union XAssetEntryPoolEntry { XAssetEntry entry; XAssetEntryPoolEntry *next; }; +static_assert(sizeof(XAssetEntryPoolEntry) == 0x10, ""); } // namespace mp_tu6 } // namespace iw4 diff --git a/src/game/iw4/mp_tu6/symbols.h b/src/game/iw4/mp_tu6/symbols.h index 467dd31c..3cb31764 100644 --- a/src/game/iw4/mp_tu6/symbols.h +++ b/src/game/iw4/mp_tu6/symbols.h @@ -150,6 +150,15 @@ typedef void (*ImageCache_InitImage_t)(GfxImage *image, GfxImage *remoteImage, u unsigned int imagePartIndex); static ImageCache_InitImage_t ImageCache_InitImage = reinterpret_cast(0x823DE448); +typedef int (*Zlib_InflateInit_t)(void *stream, const char *version, int streamSize); +static Zlib_InflateInit_t Zlib_InflateInit = reinterpret_cast(0x82344E90); + +typedef int (*Zlib_Inflate_t)(void *stream, int flush); +static Zlib_Inflate_t Zlib_Inflate = reinterpret_cast(0x82344EA0); + +typedef int (*Zlib_InflateEnd_t)(void *stream); +static Zlib_InflateEnd_t Zlib_InflateEnd = reinterpret_cast(0x82344CB8); + static auto R_CheckDvarModified = reinterpret_cast(0x823DDD78); typedef void (*R_AddCmdDrawStretchPic_t)(float x, float y, float w, float h, float s0, float t0, float s1, float t1, @@ -294,6 +303,13 @@ static auto CL_CreateNewCommands = reinterpret_cast(0x83052680); static auto fields = reinterpret_cast(0x82027518); +static auto g_assetEntryPool = reinterpret_cast(0x82839700); +static const unsigned int g_assetEntryPoolSize = 34000; +static auto g_gfxImagePool = reinterpret_cast(0x828C058C); +static const unsigned int g_gfxImagePoolSize = 0xE00; +static auto g_imageStreams = reinterpret_cast(0x82C91600); +static auto g_zones = reinterpret_cast(0x829D8048); +static const unsigned int g_zoneCount = 33; static auto g_entities = reinterpret_cast(0x82E2A580); static auto level = reinterpret_cast(0x82FF2F08); static auto sharedUiInfo = reinterpret_cast(0x836A3AC0); diff --git a/src/image/dds_loader.cpp b/src/image/dds_loader.cpp index 9c2e273e..0ea47a97 100644 --- a/src/image/dds_loader.cpp +++ b/src/image/dds_loader.cpp @@ -92,7 +92,7 @@ bool DdsImage::GetGpuFormat(GPUTEXTUREFORMAT *format) const } if ((header.ddspf.dwFlags & DDPF_ALPHAPIXELS) != 0 && header.ddspf.dwRGBBitCount == 16 && - header.ddspf.dwRBitMask == 0x000000FF && header.ddspf.dwGBitMask == 0x0000FF00) + header.ddspf.dwRBitMask == 0x000000FF && header.ddspf.dwABitMask == 0x0000FF00) { *format = GPUTEXTUREFORMAT_8_8; return true; diff --git a/src/image/dds_writer.cpp b/src/image/dds_writer.cpp index 072ff3cf..3d684cd8 100644 --- a/src/image/dds_writer.cpp +++ b/src/image/dds_writer.cpp @@ -71,7 +71,7 @@ bool PopulateDdsPixelFormat(DDS_PIXELFORMAT &pixelFormat, uint32_t gpuFormat) pixelFormat.dwFlags = DDPF_LUMINANCE | DDPF_ALPHAPIXELS; pixelFormat.dwRGBBitCount = 16; pixelFormat.dwRBitMask = 0x000000FF; - pixelFormat.dwGBitMask = 0x0000FF00; + pixelFormat.dwABitMask = 0x0000FF00; return true; case GPUTEXTUREFORMAT_8_8_8_8: pixelFormat.dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS; @@ -92,16 +92,29 @@ bool CreateDdsHeader(DDS_HEADER &header, uint32_t width, uint32_t height, uint32 { memset(&header, 0, sizeof(header)); header.dwSize = DDS_HEADER_SIZE; - header.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE; header.dwHeight = height; header.dwWidth = width; - header.dwPitchOrLinearSize = pitchOrLinearSize; header.dwDepth = depth; header.dwMipMapCount = mipMapCount; header.dwCaps = caps; header.dwCaps2 = caps2; - return PopulateDdsPixelFormat(header.ddspf, gpuFormat); + if (!PopulateDdsPixelFormat(header.ddspf, gpuFormat)) + return false; + + header.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; + if ((header.ddspf.dwFlags & DDPF_FOURCC) != 0) + { + header.dwFlags |= DDSD_LINEARSIZE; + header.dwPitchOrLinearSize = pitchOrLinearSize; + } + else + { + header.dwFlags |= DDSD_PITCH; + header.dwPitchOrLinearSize = (width * header.ddspf.dwRGBBitCount + 7u) / 8u; + } + + return true; } void WriteDdsHeader(std::ofstream &file, DDS_HEADER header) From eeb5dc7523a3b1a7b3512691cf9abb5f2471d45d Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Sun, 28 Jun 2026 07:20:01 +0100 Subject: [PATCH 15/20] chore: update IW3 CodJumper RPG texture We only need to have 1 large texture now instead of 2 for highmip as well --- ...~weapon_rpg7_spec-rgb&weapon_~06163c5b.dds | Bin 1048704 -> 0 bytes ...~weapon_rpg7_spec-rgb&weapon_~06163c5b.dds | Bin 349680 -> 1398256 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/iw3/_codxe/mods/codjumper/highmip/~weapon_rpg7_spec-rgb&weapon_~06163c5b.dds diff --git a/resources/iw3/_codxe/mods/codjumper/highmip/~weapon_rpg7_spec-rgb&weapon_~06163c5b.dds b/resources/iw3/_codxe/mods/codjumper/highmip/~weapon_rpg7_spec-rgb&weapon_~06163c5b.dds deleted file mode 100644 index d1f2e9e2a0c8ab2a36bc2c36285a4f8aee250459..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048704 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

FQ9)UdzHQgdjMIRg%19(^gH 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

^m^EYuJB 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%0AvI(a9 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

  • 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 X^)5Gw?6)< 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 diff --git a/resources/iw3/_codxe/mods/codjumper/images/~weapon_rpg7_spec-rgb&weapon_~06163c5b.dds b/resources/iw3/_codxe/mods/codjumper/images/~weapon_rpg7_spec-rgb&weapon_~06163c5b.dds index 905ca9b91d40d1d4fb2033565396156b4c4c257d..d64b27d3d8ed5092ca74523257a35a69b96e1a67 100644 GIT binary patch literal 1398256 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ⅇ@lx4X&5X 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Ⓢ6|NjQ7&{{q~o=B3~wmUR_r$`pagL-=*=e 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 Ma}>_AWRL9n3*QU>cmMzZ literal 349680 zcmb5Xe_Yeoy+5Af?WYQ(^nRRUcimQJuTzOJ^dk&yYiZrR_tP@FQc8rT5E%LFPK{I` zQe%RI0lO0jdhJ4OdsC%oT1c9t(nTy9;_Mxpdc|E^z)=l|ZKa_Q3&X?!$@lfLeZ5Zl z{e1uV@_4k5KKnZ7TtJ-4(bUT}$N#VYy>wXe@BbK$M!N?tS+=y+ln@^9958#^BZY+5T2oCU zW7Tco8l8(m4quDsiwHN_!+|aeVrD2imRXSqc;{?pNgRoSbnl;aQ*4 zAd!Um`5(P;U%kW@<=-Fj1q?N<0l@A^d@^Yhfc(!DY(KFQrrc*vKaDJ#<#5k6qHDd*iD8R71M zK7*oP7DxEe8wbpe1WAbS>}R>waO;?YaB}a57FBCIuUCsZV93+g*ofZZF4Zc6@k

      NfzFrFeR#!K!k)xhs9 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

      BCEij_*@#+Q;vU@)!z8P7odSzbg1h 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 Z5W_$0Z$sma#v8Y8Jvgs19?=1R{~rTxWIX@? From 10364742eac914946174290c4b9a61d736e32820 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Sun, 28 Jun 2026 07:32:39 +0100 Subject: [PATCH 16/20] refactor: IW4 add `dump_assets` dvar --- src/game/iw4/mp_tu6/components/events.cpp | 17 +- src/game/iw4/mp_tu6/components/events.h | 2 + .../iw4/mp_tu6/components/image_loader.cpp | 166 +++++------------- 3 files changed, 66 insertions(+), 119 deletions(-) diff --git a/src/game/iw4/mp_tu6/components/events.cpp b/src/game/iw4/mp_tu6/components/events.cpp index 454244b9..3ea6eedb 100644 --- a/src/game/iw4/mp_tu6/components/events.cpp +++ b/src/game/iw4/mp_tu6/components/events.cpp @@ -65,6 +65,7 @@ Detour Events::Cmd_Init_Detour; std::vector> Events::db_linkxasset_pre_callbacks; +std::vector> Events::db_linkxasset_post_callbacks; Detour Events::DB_LinkXAssetEntry1_Detour; iw4::mp_tu6::XAssetEntryPoolEntry *Events::DB_LinkXAssetEntry1_Hook(iw4::mp_tu6::XAssetType type, @@ -75,7 +76,15 @@ iw4::mp_tu6::XAssetEntryPoolEntry *Events::DB_LinkXAssetEntry1_Hook(iw4::mp_tu6: (*it)(type, header); } - return DB_LinkXAssetEntry1_Detour.GetOriginal()(type, header); + iw4::mp_tu6::XAssetEntryPoolEntry *entry = + DB_LinkXAssetEntry1_Detour.GetOriginal()(type, header); + + for (auto it = db_linkxasset_post_callbacks.begin(); it != db_linkxasset_post_callbacks.end(); ++it) + { + (*it)(entry); + } + + return entry; } void Events::OnDBLinkXAssetPre( @@ -84,6 +93,11 @@ void Events::OnDBLinkXAssetPre( db_linkxasset_pre_callbacks.emplace_back(callback); } +void Events::OnDBLinkXAssetPost(const std::function &callback) +{ + db_linkxasset_post_callbacks.emplace_back(callback); +} + std::vector> Events::vmshutdown_callbacks; void Events::Scr_ShutdownSystem_Hook(unsigned __int8 sys) @@ -133,5 +147,6 @@ Events::~Events() cg_drawactive_callbacks.clear(); cmdinit_callbacks.clear(); db_linkxasset_pre_callbacks.clear(); + db_linkxasset_post_callbacks.clear(); vmshutdown_callbacks.clear(); } diff --git a/src/game/iw4/mp_tu6/components/events.h b/src/game/iw4/mp_tu6/components/events.h index 04a30ebe..65c212c9 100644 --- a/src/game/iw4/mp_tu6/components/events.h +++ b/src/game/iw4/mp_tu6/components/events.h @@ -18,6 +18,7 @@ class Events : public Module static void OnCmdInit(const std::function &callback); static void OnDBLinkXAssetPre( const std::function &callback); + static void OnDBLinkXAssetPost(const std::function &callback); static void OnVMShutdown(const std::function &callback); private: @@ -35,6 +36,7 @@ class Events : public Module static std::vector> db_linkxasset_pre_callbacks; + static std::vector> db_linkxasset_post_callbacks; static Detour DB_LinkXAssetEntry1_Detour; static iw4::mp_tu6::XAssetEntryPoolEntry *DB_LinkXAssetEntry1_Hook(iw4::mp_tu6::XAssetType type, iw4::mp_tu6::XAssetHeader *header); diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index 7e2e1187..3aa35e84 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -43,25 +43,13 @@ struct ZlibStream }; static_assert(sizeof(ZlibStream) == 48, ""); -game::cmd_function_s Cmd_ImageDump_VAR; +game::dvar_t *dump_assets = nullptr; uint32_t PtrToUint(const void *ptr) { return static_cast(reinterpret_cast(ptr)); } -bool IsPlausibleAlignedPointer(const void *ptr) -{ - const uint32_t value = PtrToUint(ptr); - return value >= 0x10000u && value < 0xF0000000u && (value & 0x3u) == 0; -} - -bool IsPlausiblePointer(const void *ptr) -{ - const uint32_t value = PtrToUint(ptr); - return value >= 0x10000u && value < 0xF0000000u; -} - void PrintImageError(const char *format, ...) { char buffer[1024]; @@ -264,38 +252,9 @@ uint32_t GetImageLevelCount(const game::GfxImage *image, bool streamed) return levelCount; } -bool IsImageShapeSane(const game::GfxImage *image) -{ - if (image == NULL || !IsPlausibleAlignedPointer(image)) - return false; - - if (image->name == NULL || !IsPlausiblePointer(image->name) || image->name[0] == '\0') - return false; - - if (image->mapType != game::MAPTYPE_2D && image->mapType != game::MAPTYPE_CUBE) - return false; - - if (image->width == 0 || image->height == 0 || image->width > 8192u || image->height > 8192u) - return false; - - if (image->depth == 0 || image->depth > 6u) - return false; - - if (image->levelCount == 0 || image->levelCount > 16u) - return false; - - if (image::xenos_texture::GetTextureFormatInfo(GetImageGpuFormat(image)) == NULL) - return false; - - if (image->cardMemory.platform[0] < 0 || image->cardMemory.platform[0] > 128 * 1024 * 1024) - return false; - - return true; -} - std::string GetSanitizedImageName(const char *imageName) { - if (imageName == NULL) + if (imageName == nullptr) return std::string(); std::string sanitizedName; @@ -328,37 +287,37 @@ std::string GetImageDumpPath(const char *imageName, const char *zoneName) void EnsureImageDumpDirectory(const char *zoneName) { - CreateDirectoryA(DUMP_DIR, NULL); + CreateDirectoryA(DUMP_DIR, nullptr); const std::string zoneDirectory = std::string(DUMP_DIR) + "\\" + GetDumpZoneName(zoneName); - CreateDirectoryA(zoneDirectory.c_str(), NULL); - CreateDirectoryA((zoneDirectory + "\\images").c_str(), NULL); + CreateDirectoryA(zoneDirectory.c_str(), nullptr); + CreateDirectoryA((zoneDirectory + "\\images").c_str(), nullptr); } const char *GetZoneName(uint32_t zoneIndex) { if (zoneIndex >= game::g_zoneCount) - return NULL; + return nullptr; const char *zoneName = game::g_zones[zoneIndex].file.name; if (zoneName[0] == '\0') - return NULL; + return nullptr; return zoneName; } bool ReadFileRange(const std::string &path, uint32_t offset, uint32_t size, std::vector *buffer) { - if (buffer == NULL || size == 0) + if (buffer == nullptr || size == 0) return false; - HANDLE file = CreateFileA(path.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, NULL); + HANDLE file = CreateFileA(path.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, nullptr); if (file == INVALID_HANDLE_VALUE) return false; SetLastError(NO_ERROR); - const DWORD seekResult = SetFilePointer(file, offset, NULL, FILE_BEGIN); + const DWORD seekResult = SetFilePointer(file, offset, nullptr, FILE_BEGIN); if (seekResult == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { CloseHandle(file); @@ -368,7 +327,7 @@ bool ReadFileRange(const std::string &path, uint32_t offset, uint32_t size, std: buffer->assign(size, 0); DWORD bytesRead = 0; - const BOOL readOk = ReadFile(file, &(*buffer)[0], size, &bytesRead, NULL); + const BOOL readOk = ReadFile(file, &(*buffer)[0], size, &bytesRead, nullptr); CloseHandle(file); if (!readOk || bytesRead != size) @@ -382,7 +341,7 @@ bool ReadFileRange(const std::string &path, uint32_t offset, uint32_t size, std: bool GetImagePoolIndex(const game::GfxImage *image, uint32_t *imageIndex) { - if (image == NULL || imageIndex == NULL) + if (image == nullptr || imageIndex == nullptr) return false; const uint32_t imageAddress = PtrToUint(image); @@ -403,14 +362,14 @@ const game::GfxSubImageStream *GetImageStreamSources(const game::GfxImage *image { uint32_t imageIndex = 0; if (!GetImagePoolIndex(image, &imageIndex)) - return NULL; + return nullptr; return game::g_imageStreams[imageIndex].part; } bool GetImageFilePath(const game::GfxSubImageStream &source, std::string *path) { - if (path == NULL || source.file == NULL || !IsPlausibleAlignedPointer(source.file) || source.file->name[0] == '\0') + if (path == nullptr || source.file == nullptr || source.file->name[0] == '\0') return false; char filePath[MAX_PATH]; @@ -425,7 +384,7 @@ unsigned __int8 *__fastcall ImageZlibAlloc(unsigned __int8 *opaque, unsigned int (void)opaque; if (items == 0 || size == 0 || items > 0xFFFFFFFFu / size) - return NULL; + return nullptr; return static_cast(malloc(items * size)); } @@ -439,7 +398,7 @@ void __fastcall ImageZlibFree(unsigned __int8 *opaque, unsigned __int8 *ptr) bool InflateImageStream(const std::vector &compressedData, uint32_t expectedSize, std::vector *inflatedData) { - if (inflatedData == NULL || compressedData.empty() || expectedSize == 0) + if (inflatedData == nullptr || compressedData.empty() || expectedSize == 0) return false; inflatedData->assign(expectedSize, 0); @@ -501,7 +460,7 @@ bool WriteUntiledLevel(std::ofstream &file, const game::GfxImage *image, uint32_ bool Dump2DImage(const game::GfxImage *image, bool streamed, const char *zoneName) { - if (image->pixels == NULL || image->cardMemory.platform[0] <= 0) + if (image->pixels == nullptr || image->cardMemory.platform[0] <= 0) return false; const GPUTEXTUREFORMAT format = GetImageGpuFormat(image); @@ -566,7 +525,7 @@ bool Dump2DImage(const game::GfxImage *image, bool streamed, const char *zoneNam bool DumpCubeImage(const game::GfxImage *image, bool streamed, const char *zoneName) { - if (image->pixels == NULL || image->cardMemory.platform[0] <= 0) + if (image->pixels == nullptr || image->cardMemory.platform[0] <= 0) return false; const GPUTEXTUREFORMAT format = GetImageGpuFormat(image); @@ -653,11 +612,11 @@ bool DumpStreamPartFromData(const game::GfxImage *image, uint32_t imagePartIndex bool TryReadStreamPartPixels(const game::GfxImage *image, uint32_t imagePartIndex, std::vector *pixelData) { - if (imagePartIndex >= 4u || pixelData == NULL) + if (imagePartIndex >= 4u || pixelData == nullptr) return false; const game::GfxSubImageStream *sources = GetImageStreamSources(image); - if (sources == NULL) + if (sources == nullptr) return false; const game::GfxImageStreamData &streamData = image->streams[imagePartIndex]; @@ -686,7 +645,7 @@ bool TryReadStreamPartPixels(const game::GfxImage *image, uint32_t imagePartInde bool TryDumpStreamPartEager(const game::GfxImage *image, uint32_t imagePartIndex, const char *zoneName) { - if (imagePartIndex >= 4u || !IsImageShapeSane(image)) + if (imagePartIndex >= 4u) return false; const game::GfxImageStreamData &streamData = image->streams[imagePartIndex]; @@ -702,9 +661,6 @@ bool TryDumpStreamPartEager(const game::GfxImage *image, uint32_t imagePartIndex bool TryDumpStreamedImageEager(const game::GfxImage *image, const char *zoneName) { - if (!IsImageShapeSane(image)) - return false; - bool usedParts[4] = {false, false, false, false}; for (uint32_t attempt = 0; attempt < 4u; ++attempt) @@ -743,9 +699,6 @@ bool TryDumpStreamedImageEager(const game::GfxImage *image, const char *zoneName bool Image_Dump(game::GfxImage *image, const char *zoneName) { - if (!IsImageShapeSane(image)) - return false; - if (ImageHasStreamedParts(image)) return TryDumpStreamedImageEager(image, zoneName); @@ -758,47 +711,9 @@ bool Image_Dump(game::GfxImage *image, const char *zoneName) return false; } -void Cmd_ImageDump_f() -{ - CreateDirectoryA(DUMP_DIR, NULL); - PrintImageInfo("Dumping images by zone to %s\n", DUMP_DIR); - - uint32_t dumpedCount = 0; - uint32_t skippedCount = 0; - std::set visitedImages; - - for (uint32_t entryIndex = 0; entryIndex < game::g_assetEntryPoolSize; ++entryIndex) - { - const game::XAssetEntryPoolEntry *poolEntry = &game::g_assetEntryPool[entryIndex]; - const game::XAssetEntry &entry = poolEntry->entry; - if (entry.asset.type != game::ASSET_TYPE_IMAGE) - continue; - - game::GfxImage *image = entry.asset.header.image; - if (!IsImageShapeSane(image)) - continue; - - const char *zoneName = GetZoneName(entry.zoneIndex); - const std::string imageKey = GetDumpZoneName(zoneName) + "\\" + image->name; - if (visitedImages.find(imageKey) != visitedImages.end()) - continue; - - visitedImages.insert(imageKey); - if (Image_Dump(image, zoneName)) - ++dumpedCount; - else - ++skippedCount; - } - - PrintImageInfo("Image dump complete: dumped %u images", dumpedCount); - if (skippedCount != 0) - PrintImageInfo(" (%u skipped)", skippedCount); - PrintImageInfo("\n"); -} - -void RegisterCommands() +void RegisterDvars() { - game::Cmd_AddCommandInternal("imagedump", Cmd_ImageDump_f, &Cmd_ImageDump_VAR); + dump_assets = game::Dvar_RegisterBool("dump_assets", false, 0, "Dump image assets as they are linked"); } bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) @@ -851,7 +766,7 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) return false; } - if (baseData == NULL || mipData == NULL) + if (baseData == nullptr || mipData == nullptr) { PrintImageError("image '%s' has no valid texture memory\n", image->name); return false; @@ -932,7 +847,7 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) return false; } - if (baseData == NULL) + if (baseData == nullptr) { PrintImageError("image '%s' has no valid cube texture memory\n", image->name); return false; @@ -1017,7 +932,7 @@ bool ValidateReplacementShape(const game::GfxImage *image, const DDSImage &ddsIm void Image_Replace(game::GfxImage *image) { - if (image == NULL || image->name == NULL) + if (image == nullptr || image->name == nullptr) return; const std::string replacementPath = GetReplacementPath(image->name); @@ -1027,7 +942,7 @@ void Image_Replace(game::GfxImage *image) if (ImageHasStreamedParts(image)) return; - if (image->pixels == NULL || image->cardMemory.platform[0] <= 0) + if (image->pixels == nullptr || image->cardMemory.platform[0] <= 0) { PrintImageError("image '%s' replacement exists but resident texture memory is not available\n", image->name); return; @@ -1180,10 +1095,10 @@ bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImag bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, uint32_t imagePartIndex) { - if (image == NULL || image->name == NULL || imagePartIndex >= 4u) + if (image == nullptr || image->name == nullptr || imagePartIndex >= 4u) return false; - if (image->pixels == NULL) + if (image->pixels == nullptr) { PrintImageError("streamed image '%s' part %u replacement exists but pixel memory is not available\n", image->name, imagePartIndex); @@ -1311,7 +1226,7 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u void TryReplaceStreamPart(game::GfxImage *image, uint32_t imagePartIndex) { - if (image == NULL || image->name == NULL) + if (image == nullptr || image->name == nullptr) return; const std::string replacementPath = GetReplacementPath(image->name); @@ -1330,10 +1245,23 @@ void TryReplaceStreamPart(game::GfxImage *image, uint32_t imagePartIndex) void OnDBLinkXAssetPre(game::XAssetType &type, game::XAssetHeader *header) { - if (type == game::ASSET_TYPE_IMAGE && header != NULL) + if (type == game::ASSET_TYPE_IMAGE && header != nullptr) Image_Replace(header->image); } +void OnDBLinkXAssetPost(game::XAssetEntryPoolEntry *poolEntry) +{ + if (dump_assets == nullptr || !dump_assets->current.enabled || poolEntry == nullptr) + return; + + const game::XAssetEntry &entry = poolEntry->entry; + if (entry.asset.type != game::ASSET_TYPE_IMAGE) + return; + + game::GfxImage *image = entry.asset.header.image; + Image_Dump(image, GetZoneName(entry.zoneIndex)); +} + Detour ImageCache_InitImage_Detour; void ImageCache_InitImage_Hook(game::GfxImage *image, game::GfxImage *remoteImage, unsigned __int8 *pixels, @@ -1346,8 +1274,9 @@ void ImageCache_InitImage_Hook(game::GfxImage *image, game::GfxImage *remoteImag image_loader::image_loader() { + Events::OnDvarInit(RegisterDvars); Events::OnDBLinkXAssetPre(OnDBLinkXAssetPre); - Events::OnCmdInit(RegisterCommands); + Events::OnDBLinkXAssetPost(OnDBLinkXAssetPost); ImageCache_InitImage_Detour = Detour(iw4::mp_tu6::ImageCache_InitImage, ImageCache_InitImage_Hook); ImageCache_InitImage_Detour.Install(); @@ -1356,4 +1285,5 @@ image_loader::image_loader() image_loader::~image_loader() { ImageCache_InitImage_Detour.Remove(); + dump_assets = nullptr; } From b0c254c6fb18aa6baa5abbe03c288a1bd1819c9c Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Sun, 28 Jun 2026 07:41:34 +0100 Subject: [PATCH 17/20] refactor: add `dump_assets` to config Removes `dump_rawfile` and `dump_map_ents` options. --- src/common/config.cpp | 17 +++++------------ src/common/config.h | 3 +-- src/game/iw2/mp/components/scr_parser.cpp | 2 +- src/game/iw2/sp/components/scr_parser.cpp | 2 +- src/game/iw3/mp/components/scr_parser.cpp | 2 +- src/game/iw3/sp/components/scr_parser.cpp | 2 +- src/game/iw4/mp_tu6/components/image_loader.cpp | 2 +- src/game/iw4/mp_tu6/components/mpsp.cpp | 5 +++++ src/game/iw4/mp_tu6/components/scr_parser.cpp | 2 +- src/game/iw4/sp/components/clipmap.cpp | 2 +- src/game/iw4/sp/components/scr_parser.cpp | 2 +- src/game/qos/mp/components/scr_parser.cpp | 2 +- src/game/qos/sp/components/scr_parser.cpp | 2 +- src/game/t4/mp/components/gsc_loader.cpp | 2 +- src/game/t4/mp/components/map.cpp | 2 +- src/game/t4/sp/components/clipmap.cpp | 2 +- src/game/t4/sp/components/scr_parser.cpp | 2 +- src/game/t5/mp/components/scr_parser.cpp | 2 +- src/game/t5/sp/components/scr_parser.cpp | 2 +- 19 files changed, 27 insertions(+), 30 deletions(-) diff --git a/src/common/config.cpp b/src/common/config.cpp index d3754b9a..94da6fe8 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -15,8 +15,7 @@ const char *DUMP_DIR = "game:\\_codxe\\dump"; // Default values std::string Config::active_mod = ""; -bool Config::dump_rawfile = false; -bool Config::dump_map_ents = false; +bool Config::dump_assets = false; std::string Config::mod_base_path = ""; namespace @@ -203,8 +202,7 @@ Config::~Config() // Reset to defaults on cleanup active_mod = ""; mod_base_path = ""; - dump_rawfile = false; - dump_map_ents = false; + dump_assets = false; DbgPrint("[codxe][Config] Configuration unloaded\n"); } @@ -243,13 +241,9 @@ bool Config::LoadFromJson(const char *jsonBuffer, DWORD bufferSize) wcstombs(narrowValue, valueBuffer, sizeof(narrowValue)); active_mod = narrowValue; } - else if (wcscmp(propertyName, L"dump_rawfile") == 0) + else if (wcscmp(propertyName, L"dump_assets") == 0) { - dump_rawfile = (jsonTokenType == Json_True); - } - else if (wcscmp(propertyName, L"dump_map_ents") == 0) - { - dump_map_ents = (jsonTokenType == Json_True); + dump_assets = (jsonTokenType == Json_True); } else { @@ -262,8 +256,7 @@ bool Config::LoadFromJson(const char *jsonBuffer, DWORD bufferSize) DbgPrint("[codxe][Config] Configuration loaded:\n"); DbgPrint(" Active Mod: %s\n", active_mod.c_str()); - DbgPrint(" Dump Raw Scripts: %s\n", dump_rawfile ? "true" : "false"); - DbgPrint(" Dump Map Entities: %s\n", dump_map_ents ? "true" : "false"); + DbgPrint(" Dump Assets: %s\n", dump_assets ? "true" : "false"); if (!active_mod.empty()) { diff --git a/src/common/config.h b/src/common/config.h index 7fdc37a9..78a25bbb 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -23,8 +23,7 @@ class Config : public Module static std::string active_mod; static std::string mod_base_path; - static bool dump_rawfile; - static bool dump_map_ents; + static bool dump_assets; static std::string GetModBasePath(); static const char *GetModBasePathCStr(); diff --git a/src/game/iw2/mp/components/scr_parser.cpp b/src/game/iw2/mp/components/scr_parser.cpp index 5a53821f..d6fa3cfd 100644 --- a/src/game/iw2/mp/components/scr_parser.cpp +++ b/src/game/iw2/mp/components/scr_parser.cpp @@ -15,7 +15,7 @@ char *Scr_AddSourceBuffer_Hook(const char *filename, const char *extFilename, co archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { DbgPrint("GSCLoader: Dumping script %s\n", extFilename); auto contents = callOriginal(); diff --git a/src/game/iw2/sp/components/scr_parser.cpp b/src/game/iw2/sp/components/scr_parser.cpp index 8f49c3ab..c18d144e 100644 --- a/src/game/iw2/sp/components/scr_parser.cpp +++ b/src/game/iw2/sp/components/scr_parser.cpp @@ -15,7 +15,7 @@ char *Scr_AddSourceBuffer_Hook(const char *filename, const char *extFilename, co archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { DbgPrint("GSCLoader: Dumping script %s\n", extFilename); auto contents = callOriginal(); diff --git a/src/game/iw3/mp/components/scr_parser.cpp b/src/game/iw3/mp/components/scr_parser.cpp index e7d6dbc0..f8bcf7c4 100644 --- a/src/game/iw3/mp/components/scr_parser.cpp +++ b/src/game/iw3/mp/components/scr_parser.cpp @@ -113,7 +113,7 @@ char *Scr_AddSourceBuffer_Hook(const char *filename, const char *extFilename, co archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { char *contents = callOriginal(); if (contents != nullptr) diff --git a/src/game/iw3/sp/components/scr_parser.cpp b/src/game/iw3/sp/components/scr_parser.cpp index 47e12fb5..85810d59 100644 --- a/src/game/iw3/sp/components/scr_parser.cpp +++ b/src/game/iw3/sp/components/scr_parser.cpp @@ -15,7 +15,7 @@ char *Scr_AddSourceBuffer_Hook(const char *filename, const char *extFilename, co archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { DbgPrint("GSCLoader: Dumping script %s\n", extFilename); auto contents = callOriginal(); diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index 3aa35e84..1095d864 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -713,7 +713,7 @@ bool Image_Dump(game::GfxImage *image, const char *zoneName) void RegisterDvars() { - dump_assets = game::Dvar_RegisterBool("dump_assets", false, 0, "Dump image assets as they are linked"); + dump_assets = game::Dvar_RegisterBool("dump_assets", Config::dump_assets, 0, "Dump assets as they are loaded."); } bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) diff --git a/src/game/iw4/mp_tu6/components/mpsp.cpp b/src/game/iw4/mp_tu6/components/mpsp.cpp index aa3b928f..b507bd43 100644 --- a/src/game/iw4/mp_tu6/components/mpsp.cpp +++ b/src/game/iw4/mp_tu6/components/mpsp.cpp @@ -232,6 +232,11 @@ void dump(MapEnts *asset) { std::string buffer; + if (!Config::dump_assets) + { + return; + } + if (!asset || !asset->name || asset->name[0] == '\0') { return; diff --git a/src/game/iw4/mp_tu6/components/scr_parser.cpp b/src/game/iw4/mp_tu6/components/scr_parser.cpp index 3e8f9710..6b7931b6 100644 --- a/src/game/iw4/mp_tu6/components/scr_parser.cpp +++ b/src/game/iw4/mp_tu6/components/scr_parser.cpp @@ -12,7 +12,7 @@ char *Scr_AddSourceBuffer_Hook(const char *filename, const char *extFilename) auto callOriginal = [&]() { return Scr_AddSourceBuffer_Detour.GetOriginal()(filename, extFilename); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { auto contents = callOriginal(); // Dump the script to a file diff --git a/src/game/iw4/sp/components/clipmap.cpp b/src/game/iw4/sp/components/clipmap.cpp index f155db9c..77f6e6d3 100644 --- a/src/game/iw4/sp/components/clipmap.cpp +++ b/src/game/iw4/sp/components/clipmap.cpp @@ -18,7 +18,7 @@ void Load_clipMap_t_Hook(bool atStreamStart) auto mapEnts = (*varclipMap_t)->mapEnts; // Dump map entities if enabled - if (Config::dump_map_ents) + if (Config::dump_assets) { std::string dumpPath = va("%s\\%s.ents", DUMP_DIR, mapEnts->name); // IW4x naming convention std::replace(dumpPath.begin(), dumpPath.end(), '/', '\\'); diff --git a/src/game/iw4/sp/components/scr_parser.cpp b/src/game/iw4/sp/components/scr_parser.cpp index fca12990..2b44d4dd 100644 --- a/src/game/iw4/sp/components/scr_parser.cpp +++ b/src/game/iw4/sp/components/scr_parser.cpp @@ -12,7 +12,7 @@ char *Scr_AddSourceBuffer_Hook(const char *filename, const char *extFilename) auto callOriginal = [&]() { return Scr_AddSourceBuffer_Detour.GetOriginal()(filename, extFilename); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { auto contents = callOriginal(); // Dump the script to a file diff --git a/src/game/qos/mp/components/scr_parser.cpp b/src/game/qos/mp/components/scr_parser.cpp index 119a3bb1..5d2ce8b0 100644 --- a/src/game/qos/mp/components/scr_parser.cpp +++ b/src/game/qos/mp/components/scr_parser.cpp @@ -15,7 +15,7 @@ char *Scr_AddSourceBuffer_Hook(const char *filename, const char *extFilename, co archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { DbgPrint("GSCLoader: Dumping script %s\n", extFilename); auto contents = callOriginal(); diff --git a/src/game/qos/sp/components/scr_parser.cpp b/src/game/qos/sp/components/scr_parser.cpp index 891e4d4f..4a9a67fc 100644 --- a/src/game/qos/sp/components/scr_parser.cpp +++ b/src/game/qos/sp/components/scr_parser.cpp @@ -15,7 +15,7 @@ char *Scr_AddSourceBuffer_Hook(const char *filename, const char *extFilename, co archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { DbgPrint("GSCLoader: Dumping script %s\n", extFilename); auto contents = callOriginal(); diff --git a/src/game/t4/mp/components/gsc_loader.cpp b/src/game/t4/mp/components/gsc_loader.cpp index 49120d54..ea3ee487 100644 --- a/src/game/t4/mp/components/gsc_loader.cpp +++ b/src/game/t4/mp/components/gsc_loader.cpp @@ -16,7 +16,7 @@ char *GSCLoader::Scr_AddSourceBuffer_Hook(scriptInstance_t a1, const char *filen codePos, archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { auto contents = callOriginal(); // Dump the script to a file diff --git a/src/game/t4/mp/components/map.cpp b/src/game/t4/mp/components/map.cpp index 9f1f88a9..22242f17 100644 --- a/src/game/t4/mp/components/map.cpp +++ b/src/game/t4/mp/components/map.cpp @@ -17,7 +17,7 @@ void Load_clipMap_t_Hook(bool atStreamStart) auto mapEnts = (*varclipMap_t)->mapEnts; // Dump map entities if enabled - if (Config::dump_map_ents) + if (Config::dump_assets) { std::string dumpPath = va("%s\\%s.ents", DUMP_DIR, mapEnts->name); // IW4x naming convention std::replace(dumpPath.begin(), dumpPath.end(), '/', '\\'); diff --git a/src/game/t4/sp/components/clipmap.cpp b/src/game/t4/sp/components/clipmap.cpp index 42c59c49..190ec1b8 100644 --- a/src/game/t4/sp/components/clipmap.cpp +++ b/src/game/t4/sp/components/clipmap.cpp @@ -18,7 +18,7 @@ void Load_clipMap_t_Hook(bool atStreamStart) auto mapEnts = (*varclipMap_t)->mapEnts; // Dump map entities if enabled - if (Config::dump_map_ents) + if (Config::dump_assets) { std::string dumpPath = va("%s\\%s.ents", DUMP_DIR, mapEnts->name); // IW4x naming convention std::replace(dumpPath.begin(), dumpPath.end(), '/', '\\'); diff --git a/src/game/t4/sp/components/scr_parser.cpp b/src/game/t4/sp/components/scr_parser.cpp index 1006609e..2ed37342 100644 --- a/src/game/t4/sp/components/scr_parser.cpp +++ b/src/game/t4/sp/components/scr_parser.cpp @@ -16,7 +16,7 @@ char *Scr_AddSourceBuffer_Hook(scriptInstance_t inst, const char *filename, cons codePos, archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { DbgPrint("GSCLoader: Dumping script %s\n", extFilename); auto contents = callOriginal(); diff --git a/src/game/t5/mp/components/scr_parser.cpp b/src/game/t5/mp/components/scr_parser.cpp index 6da80236..060dbcf9 100644 --- a/src/game/t5/mp/components/scr_parser.cpp +++ b/src/game/t5/mp/components/scr_parser.cpp @@ -16,7 +16,7 @@ char *Scr_AddSourceBuffer_Hook(scriptInstance_t inst, const char *filename, cons codePos, archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { DbgPrint("GSCLoader: Dumping script %s\n", extFilename); auto contents = callOriginal(); diff --git a/src/game/t5/sp/components/scr_parser.cpp b/src/game/t5/sp/components/scr_parser.cpp index c20933df..1b345173 100644 --- a/src/game/t5/sp/components/scr_parser.cpp +++ b/src/game/t5/sp/components/scr_parser.cpp @@ -16,7 +16,7 @@ char *Scr_AddSourceBuffer_Hook(scriptInstance_t inst, const char *filename, cons codePos, archive); }; - if (Config::dump_rawfile) + if (Config::dump_assets) { DbgPrint("GSCLoader: Dumping script %s\n", extFilename); auto contents = callOriginal(); From 33265a9321964579db43cd0f57591d4007893db8 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Sun, 28 Jun 2026 08:07:50 +0100 Subject: [PATCH 18/20] feat: add `userraw` path for local overridden textures --- src/common/config.cpp | 1 + src/common/config.h | 1 + src/game/iw3/mp/components/image_loader.cpp | 14 +++++++++++--- src/game/iw4/mp_tu6/components/image_loader.cpp | 9 +++++++++ src/game/t4/mp/components/image_loader.cpp | 4 ++++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/common/config.cpp b/src/common/config.cpp index 94da6fe8..9d94b97b 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -11,6 +11,7 @@ const char *CONFIG_PATH = "game:\\_codxe\\codxe.json"; const char *MOD_DIR = "game:\\_codxe\\mods"; +const char *USERRAW_DIR = "game:\\_codxe\\userraw"; const char *DUMP_DIR = "game:\\_codxe\\dump"; // Default values diff --git a/src/common/config.h b/src/common/config.h index 78a25bbb..15c06f0e 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -4,6 +4,7 @@ extern const char *CONFIG_PATH; extern const char *MOD_DIR; +extern const char *USERRAW_DIR; extern const char *DUMP_DIR; bool DirectoryExists(const char *path); diff --git a/src/game/iw3/mp/components/image_loader.cpp b/src/game/iw3/mp/components/image_loader.cpp index 1c503469..cfc99b54 100644 --- a/src/game/iw3/mp/components/image_loader.cpp +++ b/src/game/iw3/mp/components/image_loader.cpp @@ -97,6 +97,15 @@ std::string GetImageDumpPath(const char *imageName) return std::string(DUMP_DIR) + "\\images\\" + GetSanitizedImageName(imageName) + ".dds"; } +std::string GetImageReplacementPath(const char *imageName) +{ + const std::string userPath = std::string(USERRAW_DIR) + "\\images\\" + imageName + ".dds"; + if (filesystem::file_exists(userPath)) + return userPath; + + return Config::GetModBasePath() + "\\images\\" + imageName + ".dds"; +} + bool ReadBinaryFile(const std::string &path, std::vector *buffer) { std::ifstream file(path.c_str(), std::ios::binary | std::ios::ate); @@ -612,8 +621,7 @@ bool Image_Replace_Cube(GfxImage *image, const image::DdsImage &ddsImage) void Image_Replace(GfxImage *image) { - const std::string replacement_base_dir = Config::GetModBasePath() + "\\images"; - const std::string replacement_path = replacement_base_dir + "\\" + image->name + ".dds"; + const std::string replacement_path = GetImageReplacementPath(image->name); if (!filesystem::file_exists(replacement_path)) { @@ -899,7 +907,7 @@ bool R_StreamLoadHighMipReplacement(const char *filename, unsigned int bytesToRe return true; }; - const std::string combined_path = Config::GetModBasePath() + "\\images" + "\\" + asset_name + ".dds"; + const std::string combined_path = GetImageReplacementPath(asset_name.c_str()); if (filesystem::file_exists(combined_path) && tryReplaceHighMipDDS(combined_path, true)) { return true; diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index 1095d864..5e920ab5 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -85,6 +85,11 @@ std::string GetReplacementDirectory() return Config::GetModBasePath() + "\\images"; } +std::string GetUserReplacementDirectory() +{ + return std::string(USERRAW_DIR) + "\\images"; +} + DDSImage ReadDDSFile(const std::string &filepath) { return image::LoadDdsFromFile(filepath); @@ -92,6 +97,10 @@ DDSImage ReadDDSFile(const std::string &filepath) std::string GetReplacementPath(const char *imageName) { + const std::string userPath = GetUserReplacementDirectory() + "\\" + imageName + ".dds"; + if (ImageFileExists(userPath)) + return userPath; + return GetReplacementDirectory() + "\\" + imageName + ".dds"; } diff --git a/src/game/t4/mp/components/image_loader.cpp b/src/game/t4/mp/components/image_loader.cpp index df6e277e..29ea765b 100644 --- a/src/game/t4/mp/components/image_loader.cpp +++ b/src/game/t4/mp/components/image_loader.cpp @@ -23,6 +23,10 @@ DDSImage ReadDDSFile(const std::string &filepath) std::string GetReplacementPath(const char *imageName) { + const std::string userPath = std::string(USERRAW_DIR) + "\\images\\" + imageName + ".dds"; + if (filesystem::file_exists(userPath)) + return userPath; + return Config::GetModBasePath() + "\\images\\" + imageName + ".dds"; } From 8721b938796740b07f536abd2a709715602c3c83 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Sun, 28 Jun 2026 15:30:35 +0100 Subject: [PATCH 19/20] fix: IW4 use hunk allocated scratch for streamed images Crashes on 2nd game load... wip --- codxe.vcxproj | 2 + .../iw4/mp_tu6/components/image_loader.cpp | 185 +++++++++---- src/image/dds_loader.cpp | 251 ++++++++++++++++-- src/image/dds_loader.h | 2 + src/image/dds_types.h | 79 +++++- 5 files changed, 439 insertions(+), 80 deletions(-) diff --git a/codxe.vcxproj b/codxe.vcxproj index e56323e0..d99351f7 100644 --- a/codxe.vcxproj +++ b/codxe.vcxproj @@ -81,6 +81,7 @@ + @@ -211,6 +212,7 @@ + diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index 5e920ab5..0cf65d2c 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -23,6 +23,7 @@ namespace game = iw4::mp_tu6; const uint32_t STREAM_PIXEL_SIZE_MASK = 0x3FFFFFF; const uint32_t MAX_STREAM_COMPRESSED_SIZE = 64u * 1024u * 1024u; +const uint32_t STREAM_REPLACEMENT_SCRATCH_SIZE = 1024u * 1024u; typedef image::DdsImage DDSImage; @@ -44,6 +45,8 @@ struct ZlibStream static_assert(sizeof(ZlibStream) == 48, ""); game::dvar_t *dump_assets = nullptr; +unsigned char *g_streamReplacementScratch = nullptr; +uint32_t g_streamReplacementScratchSize = 0; uint32_t PtrToUint(const void *ptr) { @@ -74,6 +77,43 @@ void PrintImageInfo(const char *format, ...) game::Com_Printf(0, "%s", buffer); } +unsigned char *GetStreamReplacementScratch(uint32_t size) +{ + if (size == 0) + return nullptr; + + if (g_streamReplacementScratch != nullptr) + return size <= g_streamReplacementScratchSize ? g_streamReplacementScratch : nullptr; + + const uint32_t scratchSize = max(size, STREAM_REPLACEMENT_SCRATCH_SIZE); + g_streamReplacementScratch = static_cast(game::Hunk_AllocateTempMemoryHighInternal(scratchSize)); + if (g_streamReplacementScratch == nullptr) + { + PrintImageError("failed to allocate stream replacement scratch: size=%u\n", scratchSize); + return nullptr; + } + + g_streamReplacementScratchSize = scratchSize; + return g_streamReplacementScratch; +} + +bool ReadDdsRangeToScratch(const std::string &replacementPath, uint32_t dataOffset, uint32_t size, + unsigned char **scratch) +{ + if (scratch == nullptr) + return false; + + *scratch = GetStreamReplacementScratch(size); + if (*scratch == nullptr) + { + PrintImageError("stream replacement scratch is too small: requested=%u available=%u\n", size, + g_streamReplacementScratchSize); + return false; + } + + return image::LoadDdsDataRangeFromFile(replacementPath, dataOffset, *scratch, size); +} + bool ImageFileExists(const std::string &path) { const DWORD attributes = GetFileAttributesA(path.c_str()); @@ -90,9 +130,18 @@ std::string GetUserReplacementDirectory() return std::string(USERRAW_DIR) + "\\images"; } -DDSImage ReadDDSFile(const std::string &filepath) +bool ReadDDSFile(const std::string &filepath, DDSImage *out) { - return image::LoadDdsFromFile(filepath); + return image::LoadDdsFromFile(filepath, out); +} + +bool ReadDDSHeader(const std::string &filepath, DDSImage *out, uint32_t *dataSize) +{ + if (out == nullptr) + return false; + + *out = DDSImage(); + return image::LoadDdsHeaderFromFile(filepath, &out->header, dataSize); } std::string GetReplacementPath(const char *imageName) @@ -104,15 +153,8 @@ std::string GetReplacementPath(const char *imageName) return GetReplacementDirectory() + "\\" + imageName + ".dds"; } -bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, const std::string &path, - GPUTEXTUREFORMAT *ddsFormat) +bool ValidateDDSHeaderFields(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT *ddsFormat) { - if (ddsImage.data.empty()) - { - PrintImageError("failed to load DDS for image '%s': %s\n", image->name, path.c_str()); - return false; - } - if (ddsImage.header.dwSize != image::DDS_HEADER_SIZE || ddsImage.header.ddspf.dwSize != image::DDS_PIXEL_FORMAT_SIZE) { @@ -140,6 +182,18 @@ bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, co return true; } +bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, const std::string &path, + GPUTEXTUREFORMAT *ddsFormat) +{ + if (ddsImage.data.empty()) + { + PrintImageError("failed to load DDS for image '%s': %s\n", image->name, path.c_str()); + return false; + } + + return ValidateDDSHeaderFields(image, ddsImage, ddsFormat); +} + bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) { @@ -177,28 +231,34 @@ bool ValidateResidentMipCount(const game::GfxImage *image, const DDSImage &ddsIm return true; } -bool ValidateDDSDataSize(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, - uint32_t mipCount, uint32_t faceCount) +bool ValidateDDSDataSize(const game::GfxImage *image, const image::DDS_HEADER &header, size_t dataSize, + GPUTEXTUREFORMAT format, uint32_t mipCount, uint32_t faceCount) { const size_t expectedSize = image::CalculateRequiredLinearDataSize( - ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, 0u, mipCount, faceCount); + header.dwWidth, header.dwHeight, format, 0u, mipCount, faceCount); if (expectedSize == 0) { PrintImageError("image '%s' has unsupported DDS dimensions or format\n", image->name); return false; } - if (ddsImage.data.size() != expectedSize) + if (dataSize != expectedSize) { PrintImageError("image '%s' DDS data size does not match shape: have=%u expected=%u mips=%u faces=%u\n", - image->name, static_cast(ddsImage.data.size()), - static_cast(expectedSize), mipCount, faceCount); + image->name, static_cast(dataSize), static_cast(expectedSize), + mipCount, faceCount); return false; } return true; } +bool ValidateDDSDataSize(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, + uint32_t mipCount, uint32_t faceCount) +{ + return ValidateDDSDataSize(image, ddsImage.header, ddsImage.data.size(), format, mipCount, faceCount); +} + bool ValidateCubeReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, uint32_t faceSize, uint32_t tiledBaseSize, size_t *requiredDDSSize) { @@ -804,7 +864,7 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) return false; } - std::vector levelData(ddsImage.data.begin() + ddsOffset, + image::DdsByteVector levelData(ddsImage.data.begin() + ddsOffset, ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); image::xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), static_cast(texture->Format.Endian)); @@ -816,7 +876,7 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) format, 1u); } - std::vector tiledData(tiledMipLevelSize); + image::DdsByteVector tiledData(tiledMipLevelSize); if (!image::xenos_texture::TileTextureLevel(image->width, image->height, mipLevel, format, texture->Format.Pitch, &tiledData[0], tiledData.size(), &levelData[0], levelData.size(), rowPitch)) @@ -894,7 +954,7 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) { const unsigned char *facePixels = &ddsImage.data[faceIndex * faceSize]; unsigned char *faceDestination = baseData + (faceIndex * tiledFaceSize); - std::vector tiledData(tiledFaceSize); + image::DdsByteVector tiledData(tiledFaceSize); if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0u, format, texture->Format.Pitch, &tiledData[0], tiledData.size(), facePixels, faceSize, rowPitch)) @@ -957,7 +1017,8 @@ void Image_Replace(game::GfxImage *image) return; } - DDSImage ddsImage = ReadDDSFile(replacementPath); + DDSImage ddsImage; + ReadDDSFile(replacementPath, &ddsImage); GPUTEXTUREFORMAT ddsFormat; if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) return; @@ -1001,9 +1062,9 @@ bool FindMipLevelForDimensions(const DDSImage &ddsImage, uint32_t width, uint32_ return false; } -bool ValidateStreamReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, - uint32_t startMipLevel, uint32_t levelCount, uint32_t basePitch, - size_t *requiredDDSSize, size_t *requiredTextureBytes) +bool ValidateStreamReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, size_t ddsDataSize, + GPUTEXTUREFORMAT format, uint32_t startMipLevel, uint32_t levelCount, + uint32_t basePitch, size_t *requiredDDSSize, size_t *requiredTextureBytes) { *requiredDDSSize = image::CalculateRequiredLinearDataSize(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, startMipLevel, levelCount, 1u); @@ -1012,7 +1073,7 @@ bool ValidateStreamReplacementData(const game::GfxImage *image, const DDSImage & const uint32_t ddsOffset = image::CalculateDdsMipOffset(ddsImage.header.dwWidth, ddsImage.header.dwHeight, format, startMipLevel); - if (static_cast(ddsOffset) + *requiredDDSSize > ddsImage.data.size()) + if (static_cast(ddsOffset) + *requiredDDSSize > ddsDataSize) return false; *requiredTextureBytes = 0; @@ -1033,8 +1094,8 @@ bool ValidateStreamReplacementData(const game::GfxImage *image, const DDSImage & return true; } -bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT ddsFormat, - uint32_t imagePartIndex) +bool Image_Replace_StreamCubePart(game::GfxImage *image, const std::string &replacementPath, const DDSImage &ddsImage, + size_t ddsDataSize, GPUTEXTUREFORMAT ddsFormat, uint32_t imagePartIndex) { if (imagePartIndex != 0u) { @@ -1057,7 +1118,7 @@ bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImag return false; } - if (!ValidateDDSDataSize(image, ddsImage, ddsFormat, 1u, 6u)) + if (!ValidateDDSDataSize(image, ddsImage.header, ddsDataSize, ddsFormat, 1u, 6u)) return false; const uint32_t rowPitch = image::xenos_texture::CalculateLinearRowPitch(image->width, 0u, ddsFormat); @@ -1084,25 +1145,34 @@ bool Image_Replace_StreamCubePart(game::GfxImage *image, const DDSImage &ddsImag for (uint32_t faceIndex = 0; faceIndex < 6u; ++faceIndex) { - const unsigned char *facePixels = &ddsImage.data[faceIndex * faceSize]; - std::vector tiledData(tiledFaceSize); + const uint32_t faceOffset = faceIndex * faceSize; + unsigned char *faceData = nullptr; + if (!ReadDdsRangeToScratch(replacementPath, faceOffset, faceSize, &faceData)) + { + PrintImageError("failed to read streamed cube image '%s' face %u: offset=%u size=%u\n", image->name, + faceIndex, faceOffset, faceSize); + return false; + } + + unsigned char *faceDestination = image->pixels + static_cast(faceIndex) * tiledFaceSize; + memset(faceDestination, 0, tiledFaceSize); - if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0u, ddsFormat, 0u, &tiledData[0], - tiledData.size(), facePixels, faceSize, rowPitch)) + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0u, ddsFormat, 0u, faceDestination, + tiledFaceSize, faceData, faceSize, rowPitch)) { PrintImageError("failed to tile streamed cube image '%s' face %u\n", image->name, faceIndex); return false; } - image::xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), + image::xenos_texture::ApplyGpuEndian(faceDestination, tiledFaceSize, static_cast(image->texture.basemap.Format.Endian)); - memcpy(image->pixels + static_cast(faceIndex) * tiledFaceSize, &tiledData[0], tiledFaceSize); } return true; } -bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, uint32_t imagePartIndex) +bool Image_Replace_StreamPart(game::GfxImage *image, const std::string &replacementPath, const DDSImage &ddsImage, + size_t ddsDataSize, uint32_t imagePartIndex) { if (image == nullptr || image->name == nullptr || imagePartIndex >= 4u) return false; @@ -1115,12 +1185,11 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u } GPUTEXTUREFORMAT ddsFormat; - const std::string replacementPath = GetReplacementPath(image->name); - if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) + if (!ValidateDDSHeaderFields(image, ddsImage, &ddsFormat)) return false; if (image->mapType == game::MAPTYPE_CUBE) - return Image_Replace_StreamCubePart(image, ddsImage, ddsFormat, imagePartIndex); + return Image_Replace_StreamCubePart(image, replacementPath, ddsImage, ddsDataSize, ddsFormat, imagePartIndex); if (image->mapType != game::MAPTYPE_2D) { @@ -1135,7 +1204,7 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u } const uint32_t ddsMipCount = ddsImage.GetMipCount(); - if (!ValidateDDSDataSize(image, ddsImage, ddsFormat, ddsMipCount, 1u)) + if (!ValidateDDSDataSize(image, ddsImage.header, ddsDataSize, ddsFormat, ddsMipCount, 1u)) return false; uint32_t startMipLevel = 0; @@ -1171,8 +1240,8 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u size_t requiredDDSSize = 0; size_t requiredTextureBytes = 0; const uint32_t streamBasePitch = 0u; - if (!ValidateStreamReplacementData(image, ddsImage, ddsFormat, startMipLevel, replaceLevelCount, streamBasePitch, - &requiredDDSSize, &requiredTextureBytes)) + if (!ValidateStreamReplacementData(image, ddsImage, ddsDataSize, ddsFormat, startMipLevel, replaceLevelCount, + streamBasePitch, &requiredDDSSize, &requiredTextureBytes)) { PrintImageError("streamed image '%s' part %u replacement size is invalid: ddsNeed=%u textureNeed=%u card=%u\n", image->name, imagePartIndex, static_cast(requiredDDSSize), @@ -1202,7 +1271,7 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u return false; } - if (static_cast(ddsOffset) + ddsMipLevelSize > ddsImage.data.size() || + if (static_cast(ddsOffset) + ddsMipLevelSize > ddsDataSize || destinationOffset + tiledMipLevelSize > static_cast(image->cardMemory.platform[0])) { PrintImageError("streamed image '%s' part %u mip %u exceeds source or destination bounds\n", image->name, @@ -1210,22 +1279,29 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const DDSImage &ddsImage, u return false; } - std::vector levelData(ddsImage.data.begin() + ddsOffset, - ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); - image::xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), + unsigned char *levelData = nullptr; + if (!ReadDdsRangeToScratch(replacementPath, ddsOffset, ddsMipLevelSize, &levelData)) + { + PrintImageError("failed to read streamed image '%s' part %u mip %u: offset=%u size=%u\n", image->name, + imagePartIndex, localMipLevel, ddsOffset, ddsMipLevelSize); + return false; + } + + image::xenos_texture::ApplyGpuEndian(levelData, ddsMipLevelSize, static_cast(image->texture.basemap.Format.Endian)); - std::vector tiledData(tiledMipLevelSize); + unsigned char *destination = image->pixels + destinationOffset; + memset(destination, 0, tiledMipLevelSize); + if (!image::xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, ddsFormat, - streamBasePitch, &tiledData[0], tiledData.size(), &levelData[0], - levelData.size(), rowPitch)) + streamBasePitch, destination, tiledMipLevelSize, levelData, + ddsMipLevelSize, rowPitch)) { PrintImageError("failed to tile streamed image '%s' part %u mip %u\n", image->name, imagePartIndex, localMipLevel); return false; } - memcpy(image->pixels + destinationOffset, &tiledData[0], tiledMipLevelSize); ddsOffset += ddsMipLevelSize; destinationOffset += tiledMipLevelSize; } @@ -1247,8 +1323,15 @@ void TryReplaceStreamPart(game::GfxImage *image, uint32_t imagePartIndex) if (!replacementExists) return; - const DDSImage ddsImage = ReadDDSFile(replacementPath); - if (Image_Replace_StreamPart(image, ddsImage, imagePartIndex)) + DDSImage ddsImage; + uint32_t ddsDataSize = 0; + if (!ReadDDSHeader(replacementPath, &ddsImage, &ddsDataSize)) + { + PrintImageError("failed to load DDS header for image '%s': %s\n", image->name, replacementPath.c_str()); + return; + } + + if (Image_Replace_StreamPart(image, replacementPath, ddsImage, ddsDataSize, imagePartIndex)) PrintImageInfo("replaced image '%s' (streamed part %u)\n", image->name, imagePartIndex); } @@ -1295,4 +1378,6 @@ image_loader::~image_loader() { ImageCache_InitImage_Detour.Remove(); dump_assets = nullptr; + g_streamReplacementScratch = nullptr; + g_streamReplacementScratchSize = 0; } diff --git a/src/image/dds_loader.cpp b/src/image/dds_loader.cpp index 0ea47a97..21279c59 100644 --- a/src/image/dds_loader.cpp +++ b/src/image/dds_loader.cpp @@ -2,11 +2,49 @@ #include "image/dds_loader.h" #include "utils/endian.h" +#ifndef INVALID_FILE_SIZE +#define INVALID_FILE_SIZE ((DWORD)-1) +#endif + namespace image { namespace { const size_t DDS_FILE_HEADER_SIZE = sizeof(uint32_t) + sizeof(DDS_HEADER); +const DWORD MAX_DDS_FILE_SIZE = 64u * 1024u * 1024u; + +struct ScopedFileHandle +{ + HANDLE handle; + + explicit ScopedFileHandle(HANDLE file) : handle(file) + { + } + + ~ScopedFileHandle() + { + if (handle != INVALID_HANDLE_VALUE) + CloseHandle(handle); + } + + bool IsValid() const + { + return handle != INVALID_HANDLE_VALUE; + } +}; + +bool ReadExact(HANDLE file, const std::string &path, void *buffer, DWORD size, const char *label) +{ + DWORD bytesRead = 0; + if (!ReadFile(file, buffer, size, &bytesRead, nullptr) || bytesRead != size) + { + DbgPrint("[codxe][DDS] failed to read %s from '%s': expected=%u actual=%u error=0x%08X\n", label, + path.c_str(), size, bytesRead, GetLastError()); + return false; + } + + return true; +} void SwapDDSHeaderEndian(DDS_HEADER &header) { @@ -42,6 +80,15 @@ bool IsValidDdsImage(const DdsImage &image) return image.header.dwSize == DDS_HEADER_SIZE && image.header.ddspf.dwSize == DDS_PIXEL_FORMAT_SIZE && !image.data.empty(); } + +void ResetDdsImage(DdsImage *image) +{ + if (image == nullptr) + return; + + ZeroMemory(&image->header, sizeof(image->header)); + DdsByteVector().swap(image->data); +} } // namespace bool DdsImage::IsCubemap() const @@ -59,7 +106,7 @@ uint32_t DdsImage::GetMipCount() const bool DdsImage::GetGpuFormat(GPUTEXTUREFORMAT *format) const { - if (format == NULL) + if (format == nullptr) return false; if ((header.ddspf.dwFlags & DDPF_FOURCC) != 0) @@ -111,55 +158,201 @@ bool DdsImage::GetGpuFormat(GPUTEXTUREFORMAT *format) const return false; } -DdsImage LoadDdsFromFile(const std::string &path) +bool LoadDdsHeaderFromFile(const std::string &path, DDS_HEADER *outHeader, uint32_t *outDataSize) { - DdsImage image = {}; - std::ifstream file(path.c_str(), std::ios::binary); + if (outHeader == nullptr) + return false; - if (!file.is_open()) - return image; + ZeroMemory(outHeader, sizeof(*outHeader)); + if (outDataSize != nullptr) + *outDataSize = 0; + + ScopedFileHandle file(CreateFileA(path.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr)); + if (!file.IsValid()) + { + DbgPrint("[codxe][DDS] failed to open '%s': error=0x%08X\n", path.c_str(), GetLastError()); + return false; + } + + const DWORD fileSize = GetFileSize(file.handle, nullptr); + if (fileSize == INVALID_FILE_SIZE) + { + DbgPrint("[codxe][DDS] failed to get size for '%s': error=0x%08X\n", path.c_str(), GetLastError()); + return false; + } + + if (fileSize < DDS_FILE_HEADER_SIZE) + { + DbgPrint("[codxe][DDS] file too small '%s': size=%u header=%u\n", path.c_str(), fileSize, + static_cast(DDS_FILE_HEADER_SIZE)); + return false; + } + + if (fileSize > MAX_DDS_FILE_SIZE) + { + DbgPrint("[codxe][DDS] file too large '%s': size=%u max=%u\n", path.c_str(), fileSize, MAX_DDS_FILE_SIZE); + return false; + } uint32_t magic = 0; - file.read(reinterpret_cast(&magic), sizeof(magic)); - if (!file || file.gcount() != sizeof(magic)) - return DdsImage(); + if (!ReadExact(file.handle, path, &magic, sizeof(magic), "magic")) + return false; utils::endian::ByteSwap(magic); if (magic != DDS_MAGIC) - return DdsImage(); + { + DbgPrint("[codxe][DDS] invalid magic '%s': 0x%08X\n", path.c_str(), magic); + return false; + } - file.read(reinterpret_cast(&image.header), sizeof(DDS_HEADER)); - if (!file || file.gcount() != sizeof(DDS_HEADER)) - return DdsImage(); + if (!ReadExact(file.handle, path, outHeader, sizeof(DDS_HEADER), "header")) + return false; - SwapDDSHeaderEndian(image.header); + SwapDDSHeaderEndian(*outHeader); - file.seekg(0, std::ios::end); - const std::streampos fileSize = file.tellg(); - if (fileSize == std::streampos(-1) || fileSize < static_cast(DDS_FILE_HEADER_SIZE)) - return DdsImage(); + if (outDataSize != nullptr) + *outDataSize = fileSize - static_cast(DDS_FILE_HEADER_SIZE); - file.seekg(DDS_FILE_HEADER_SIZE, std::ios::beg); - const size_t dataSize = static_cast(fileSize) - DDS_FILE_HEADER_SIZE; - image.data.resize(dataSize); + return true; +} - if (dataSize > 0) +bool LoadDdsDataRangeFromFile(const std::string &path, uint32_t dataOffset, void *buffer, uint32_t size) +{ + if (buffer == nullptr || size == 0) + return false; + + ScopedFileHandle file(CreateFileA(path.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr)); + if (!file.IsValid()) { - file.read(reinterpret_cast(&image.data[0]), dataSize); - if (!file || static_cast(file.gcount()) != dataSize) - return DdsImage(); + DbgPrint("[codxe][DDS] failed to open '%s': error=0x%08X\n", path.c_str(), GetLastError()); + return false; } - return image; + const DWORD fileSize = GetFileSize(file.handle, nullptr); + if (fileSize == INVALID_FILE_SIZE) + { + DbgPrint("[codxe][DDS] failed to get size for '%s': error=0x%08X\n", path.c_str(), GetLastError()); + return false; + } + + if (fileSize < DDS_FILE_HEADER_SIZE || dataOffset > fileSize - DDS_FILE_HEADER_SIZE || + size > fileSize - DDS_FILE_HEADER_SIZE - dataOffset) + { + DbgPrint("[codxe][DDS] range outside file '%s': dataOffset=%u size=%u fileSize=%u\n", path.c_str(), + dataOffset, size, fileSize); + return false; + } + + const DWORD fileOffset = static_cast(DDS_FILE_HEADER_SIZE) + dataOffset; + SetLastError(NO_ERROR); + const DWORD seekResult = SetFilePointer(file.handle, fileOffset, nullptr, FILE_BEGIN); + if (seekResult == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) + { + DbgPrint("[codxe][DDS] failed to seek '%s': offset=%u error=0x%08X\n", path.c_str(), fileOffset, + GetLastError()); + return false; + } + + return ReadExact(file.handle, path, buffer, size, "data range"); } bool LoadDdsFromFile(const std::string &path, DdsImage *out) { - if (out == NULL) + if (out == nullptr) + return false; + + const char *stage = "init"; + DWORD dataSize = 0; + + try + { + ResetDdsImage(out); + + stage = "open"; + ScopedFileHandle file(CreateFileA(path.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr)); + if (!file.IsValid()) + { + DbgPrint("[codxe][DDS] failed to open '%s': error=0x%08X\n", path.c_str(), GetLastError()); + return false; + } + + stage = "get size"; + const DWORD fileSize = GetFileSize(file.handle, nullptr); + if (fileSize == INVALID_FILE_SIZE) + { + DbgPrint("[codxe][DDS] failed to get size for '%s': error=0x%08X\n", path.c_str(), GetLastError()); + return false; + } + + if (fileSize < DDS_FILE_HEADER_SIZE) + { + DbgPrint("[codxe][DDS] file too small '%s': size=%u header=%u\n", path.c_str(), fileSize, + static_cast(DDS_FILE_HEADER_SIZE)); + return false; + } + + if (fileSize > MAX_DDS_FILE_SIZE) + { + DbgPrint("[codxe][DDS] file too large '%s': size=%u max=%u\n", path.c_str(), fileSize, + MAX_DDS_FILE_SIZE); + return false; + } + + stage = "read magic"; + uint32_t magic = 0; + if (!ReadExact(file.handle, path, &magic, sizeof(magic), "magic")) + return false; + + utils::endian::ByteSwap(magic); + if (magic != DDS_MAGIC) + { + DbgPrint("[codxe][DDS] invalid magic '%s': 0x%08X\n", path.c_str(), magic); + return false; + } + + stage = "read header"; + if (!ReadExact(file.handle, path, &out->header, sizeof(DDS_HEADER), "header")) + return false; + + SwapDDSHeaderEndian(out->header); + + dataSize = fileSize - static_cast(DDS_FILE_HEADER_SIZE); + stage = "allocate data"; + out->data.resize(dataSize); + + stage = "read data"; + if (dataSize > 0 && !ReadExact(file.handle, path, &out->data[0], dataSize, "data")) + { + ResetDdsImage(out); + return false; + } + + return IsValidDdsImage(*out); + } + catch (const std::bad_alloc &) + { + DbgPrint("[codxe][DDS] allocation failed while loading '%s': stage=%s dataSize=%u error=0x%08X\n", + path.c_str(), stage, dataSize, GetLastError()); + ResetDdsImage(out); return false; + } + catch (...) + { + DbgPrint("[codxe][DDS] exception while loading '%s': stage=%s dataSize=%u error=0x%08X\n", path.c_str(), + stage, dataSize, GetLastError()); + ResetDdsImage(out); + return false; + } +} - *out = LoadDdsFromFile(path); - return IsValidDdsImage(*out); +DdsImage LoadDdsFromFile(const std::string &path) +{ + DdsImage image; + LoadDdsFromFile(path, &image); + return image; } uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel) diff --git a/src/image/dds_loader.h b/src/image/dds_loader.h index 5b3449dc..fb7eb0dd 100644 --- a/src/image/dds_loader.h +++ b/src/image/dds_loader.h @@ -8,5 +8,7 @@ namespace image { DdsImage LoadDdsFromFile(const std::string &path); bool LoadDdsFromFile(const std::string &path, DdsImage *out); +bool LoadDdsHeaderFromFile(const std::string &path, DDS_HEADER *outHeader, uint32_t *outDataSize); +bool LoadDdsDataRangeFromFile(const std::string &path, uint32_t dataOffset, void *buffer, uint32_t size); uint32_t GetMipDimension(uint32_t dimension, uint32_t mipLevel); } // namespace image diff --git a/src/image/dds_types.h b/src/image/dds_types.h index 7b427b8c..36ae8696 100644 --- a/src/image/dds_types.h +++ b/src/image/dds_types.h @@ -1,10 +1,87 @@ #pragma once +#include #include +#include #include namespace image { +template class VirtualAllocAllocator +{ + public: + typedef T value_type; + typedef T *pointer; + typedef const T *const_pointer; + typedef T &reference; + typedef const T &const_reference; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + + template struct rebind + { + typedef VirtualAllocAllocator other; + }; + + VirtualAllocAllocator() + { + } + + template VirtualAllocAllocator(const VirtualAllocAllocator &) + { + } + + pointer allocate(size_type count, const void * = nullptr) + { + if (count == 0) + return nullptr; + + if (count > max_size()) + throw std::bad_alloc(); + + void *memory = VirtualAlloc(nullptr, count * sizeof(T), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); + if (memory == nullptr) + throw std::bad_alloc(); + + return static_cast(memory); + } + + void deallocate(pointer memory, size_type) + { + if (memory != nullptr) + VirtualFree(memory, 0, MEM_RELEASE); + } + + void construct(pointer memory, const_reference value) + { + new (memory) T(value); + } + + void destroy(pointer memory) + { + memory->~T(); + } + + size_type max_size() const + { + return static_cast(-1) / sizeof(T); + } +}; + +template +bool operator==(const VirtualAllocAllocator &, const VirtualAllocAllocator &) +{ + return true; +} + +template +bool operator!=(const VirtualAllocAllocator &, const VirtualAllocAllocator &) +{ + return false; +} + +typedef std::vector> DdsByteVector; + enum DDS_CONSTANTS { DDS_MAGIC = MAKEFOURCC('D', 'D', 'S', ' '), @@ -98,7 +175,7 @@ static_assert(sizeof(DDS_HEADER) == DDS_HEADER_SIZE, ""); struct DdsImage { DDS_HEADER header; - std::vector data; + DdsByteVector data; bool IsCubemap() const; uint32_t GetMipCount() const; From 8cfba5b58016fe4e339f9b78d8741f869331dacb Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Sun, 28 Jun 2026 20:04:48 +0100 Subject: [PATCH 20/20] stash --- .../iw4/mp_tu6/components/image_loader.cpp | 276 ++++++++++-------- src/image/xenos_texture.cpp | 41 +++ src/image/xenos_texture.h | 6 + 3 files changed, 200 insertions(+), 123 deletions(-) diff --git a/src/game/iw4/mp_tu6/components/image_loader.cpp b/src/game/iw4/mp_tu6/components/image_loader.cpp index 0cf65d2c..020c5065 100644 --- a/src/game/iw4/mp_tu6/components/image_loader.cpp +++ b/src/game/iw4/mp_tu6/components/image_loader.cpp @@ -23,7 +23,8 @@ namespace game = iw4::mp_tu6; const uint32_t STREAM_PIXEL_SIZE_MASK = 0x3FFFFFF; const uint32_t MAX_STREAM_COMPRESSED_SIZE = 64u * 1024u * 1024u; -const uint32_t STREAM_REPLACEMENT_SCRATCH_SIZE = 1024u * 1024u; +const uint32_t DDS_FILE_HEADER_SIZE = sizeof(uint32_t) + sizeof(image::DDS_HEADER); +const uint32_t REPLACEMENT_ROW_SCRATCH_SIZE = 64u * 1024u; typedef image::DdsImage DDSImage; @@ -45,8 +46,60 @@ struct ZlibStream static_assert(sizeof(ZlibStream) == 48, ""); game::dvar_t *dump_assets = nullptr; -unsigned char *g_streamReplacementScratch = nullptr; -uint32_t g_streamReplacementScratchSize = 0; +unsigned char g_replacementRowScratch[REPLACEMENT_ROW_SCRATCH_SIZE]; + +struct DdsDataFile +{ + HANDLE handle; + std::string path; + uint32_t dataSize; + + DdsDataFile(const std::string &filePath, uint32_t fileDataSize) + : handle(CreateFileA(filePath.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr)), + path(filePath), dataSize(fileDataSize) + { + } + + ~DdsDataFile() + { + if (handle != INVALID_HANDLE_VALUE) + CloseHandle(handle); + } + + bool IsValid() const + { + return handle != INVALID_HANDLE_VALUE; + } + + bool SeekData(uint32_t dataOffset, uint32_t size) const + { + if (dataOffset > dataSize || size > dataSize - dataOffset) + { + game::Com_Printf(0, "DDS range outside file '%s': dataOffset=%u size=%u dataSize=%u\n", path.c_str(), + dataOffset, size, dataSize); + return false; + } + + const DWORD fileOffset = static_cast(DDS_FILE_HEADER_SIZE) + dataOffset; + SetLastError(NO_ERROR); + const DWORD seekResult = SetFilePointer(handle, fileOffset, nullptr, FILE_BEGIN); + if (seekResult == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) + { + game::Com_Printf(0, "DDS seek failed '%s': offset=%u error=0x%08X\n", path.c_str(), fileOffset, + GetLastError()); + return false; + } + + return true; + } +}; + +struct DdsRowReadState +{ + DdsDataFile *file; + GPUENDIAN endian; +}; uint32_t PtrToUint(const void *ptr) { @@ -77,41 +130,55 @@ void PrintImageInfo(const char *format, ...) game::Com_Printf(0, "%s", buffer); } -unsigned char *GetStreamReplacementScratch(uint32_t size) +bool ReadDdsTileRow(uint32_t rowIndex, unsigned char *rowBuffer, uint32_t rowPitch, void *userData) { - if (size == 0) - return nullptr; - - if (g_streamReplacementScratch != nullptr) - return size <= g_streamReplacementScratchSize ? g_streamReplacementScratch : nullptr; + DdsRowReadState *state = static_cast(userData); + if (state == nullptr || state->file == nullptr || rowBuffer == nullptr || rowPitch == 0) + return false; - const uint32_t scratchSize = max(size, STREAM_REPLACEMENT_SCRATCH_SIZE); - g_streamReplacementScratch = static_cast(game::Hunk_AllocateTempMemoryHighInternal(scratchSize)); - if (g_streamReplacementScratch == nullptr) + DWORD bytesRead = 0; + if (!ReadFile(state->file->handle, rowBuffer, rowPitch, &bytesRead, nullptr) || bytesRead != rowPitch) { - PrintImageError("failed to allocate stream replacement scratch: size=%u\n", scratchSize); - return nullptr; + PrintImageError("DDS row read failed '%s': row=%u size=%u actual=%u error=0x%08X\n", + state->file->path.c_str(), rowIndex, rowPitch, bytesRead, GetLastError()); + return false; } - g_streamReplacementScratchSize = scratchSize; - return g_streamReplacementScratch; + image::xenos_texture::ApplyGpuEndian(rowBuffer, rowPitch, state->endian); + return true; } -bool ReadDdsRangeToScratch(const std::string &replacementPath, uint32_t dataOffset, uint32_t size, - unsigned char **scratch) +bool TileDdsLevelToTexture(DdsDataFile &ddsFile, uint32_t dataOffset, uint32_t expectedDataSize, + uint32_t sourceWidth, uint32_t sourceHeight, uint32_t sourceMipLevel, + uint32_t destinationWidth, uint32_t destinationHeight, uint32_t destinationMipLevel, + GPUTEXTUREFORMAT format, uint32_t basePitch, unsigned char *destination, + uint32_t destinationSize, GPUENDIAN endian) { - if (scratch == nullptr) + if (destination == nullptr || destinationSize == 0) + return false; + + const uint32_t sourceRowPitch = + image::xenos_texture::CalculateLinearRowPitch(sourceWidth, sourceMipLevel, format); + const uint32_t sourceLevelSize = + image::xenos_texture::CalculateLinearLevelSize(sourceWidth, sourceHeight, sourceMipLevel, format); + if (sourceRowPitch == 0 || sourceLevelSize == 0 || sourceLevelSize != expectedDataSize) return false; - *scratch = GetStreamReplacementScratch(size); - if (*scratch == nullptr) + if (sourceRowPitch > sizeof(g_replacementRowScratch)) { - PrintImageError("stream replacement scratch is too small: requested=%u available=%u\n", size, - g_streamReplacementScratchSize); + PrintImageError("DDS row scratch too small '%s': rowPitch=%u scratch=%u\n", ddsFile.path.c_str(), + sourceRowPitch, static_cast(sizeof(g_replacementRowScratch))); return false; } - return image::LoadDdsDataRangeFromFile(replacementPath, dataOffset, *scratch, size); + if (!ddsFile.SeekData(dataOffset, expectedDataSize)) + return false; + + DdsRowReadState rowState = {&ddsFile, endian}; + memset(destination, 0, destinationSize); + return image::xenos_texture::TileTextureLevelFromRows( + destinationWidth, destinationHeight, destinationMipLevel, format, basePitch, destination, destinationSize, + sourceRowPitch, g_replacementRowScratch, sizeof(g_replacementRowScratch), ReadDdsTileRow, &rowState); } bool ImageFileExists(const std::string &path) @@ -130,11 +197,6 @@ std::string GetUserReplacementDirectory() return std::string(USERRAW_DIR) + "\\images"; } -bool ReadDDSFile(const std::string &filepath, DDSImage *out) -{ - return image::LoadDdsFromFile(filepath, out); -} - bool ReadDDSHeader(const std::string &filepath, DDSImage *out, uint32_t *dataSize) { if (out == nullptr) @@ -182,19 +244,7 @@ bool ValidateDDSHeaderFields(const game::GfxImage *image, const DDSImage &ddsIma return true; } -bool ValidateDDSHeader(const game::GfxImage *image, const DDSImage &ddsImage, const std::string &path, - GPUTEXTUREFORMAT *ddsFormat) -{ - if (ddsImage.data.empty()) - { - PrintImageError("failed to load DDS for image '%s': %s\n", image->name, path.c_str()); - return false; - } - - return ValidateDDSHeaderFields(image, ddsImage, ddsFormat); -} - -bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, +bool Validate2DReplacementData(const game::GfxImage *image, GPUTEXTUREFORMAT format, size_t ddsDataSize, uint32_t replacementLevelCount, size_t *requiredDDSSize, size_t *requiredTextureBytes) { *requiredDDSSize = @@ -202,7 +252,7 @@ bool Validate2DReplacementData(const game::GfxImage *image, const DDSImage &ddsI if (*requiredDDSSize == 0) return false; - if (ddsImage.data.size() < *requiredDDSSize) + if (ddsDataSize < *requiredDDSSize) return false; const D3DBaseTexture *texture = &image->texture.basemap; @@ -253,20 +303,14 @@ bool ValidateDDSDataSize(const game::GfxImage *image, const image::DDS_HEADER &h return true; } -bool ValidateDDSDataSize(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, - uint32_t mipCount, uint32_t faceCount) -{ - return ValidateDDSDataSize(image, ddsImage.header, ddsImage.data.size(), format, mipCount, faceCount); -} - -bool ValidateCubeReplacementData(const game::GfxImage *image, const DDSImage &ddsImage, GPUTEXTUREFORMAT format, +bool ValidateCubeReplacementData(const game::GfxImage *image, size_t ddsDataSize, GPUTEXTUREFORMAT format, uint32_t faceSize, uint32_t tiledBaseSize, size_t *requiredDDSSize) { *requiredDDSSize = static_cast(faceSize) * 6u; if (faceSize == 0 || *requiredDDSSize == 0) return false; - if (ddsImage.data.size() != *requiredDDSSize) + if (ddsDataSize != *requiredDDSSize) return false; const int cardMemory = image->cardMemory.platform[0]; @@ -785,7 +829,7 @@ void RegisterDvars() dump_assets = game::Dvar_RegisterBool("dump_assets", Config::dump_assets, 0, "Dump assets as they are loaded."); } -bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) +bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage, DdsDataFile &ddsFile, uint32_t ddsDataSize) { if (image->mapType != game::MAPTYPE_2D) { @@ -801,7 +845,7 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) : levelCount; if (!ValidateResidentMipCount(image, ddsImage, levelCount)) return false; - if (!ValidateDDSDataSize(image, ddsImage, format, levelCount, 1u)) + if (!ValidateDDSDataSize(image, ddsImage.header, ddsDataSize, format, levelCount, 1u)) return false; const uint32_t nonPackedLevelCount = max(1u, min(levelCount, mipTailBaseLevel)); @@ -811,7 +855,7 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) size_t requiredDDSSize = 0; size_t requiredTextureBytes = 0; - if (!Validate2DReplacementData(image, ddsImage, format, nonPackedLevelCount, &requiredDDSSize, + if (!Validate2DReplacementData(image, format, ddsDataSize, nonPackedLevelCount, &requiredDDSSize, &requiredTextureBytes)) { if (requiredDDSSize == 0) @@ -819,10 +863,10 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) PrintImageError("image '%s' has unsupported replacement format %u\n", image->name, static_cast(format)); } - else if (ddsImage.data.size() < requiredDDSSize) + else if (ddsDataSize < requiredDDSSize) { PrintImageError("image '%s' DDS data is too small: have=%u need=%u for %u mip levels\n", image->name, - static_cast(ddsImage.data.size()), static_cast(requiredDDSSize), + static_cast(ddsDataSize), static_cast(requiredDDSSize), nonPackedLevelCount); } else @@ -858,17 +902,12 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) return false; } - if (static_cast(ddsOffset) + ddsMipLevelSize > ddsImage.data.size()) + if (static_cast(ddsOffset) + ddsMipLevelSize > ddsDataSize) { PrintImageError("image '%s' mip level %u exceeds DDS data size\n", image->name, mipLevel); return false; } - image::DdsByteVector levelData(ddsImage.data.begin() + ddsOffset, - ddsImage.data.begin() + ddsOffset + ddsMipLevelSize); - image::xenos_texture::ApplyGpuEndian(&levelData[0], levelData.size(), - static_cast(texture->Format.Endian)); - unsigned char *destination = baseData; if (mipLevel > 0) { @@ -876,23 +915,21 @@ bool Image_Replace_2D(game::GfxImage *image, const DDSImage &ddsImage) format, 1u); } - image::DdsByteVector tiledData(tiledMipLevelSize); - if (!image::xenos_texture::TileTextureLevel(image->width, image->height, mipLevel, format, - texture->Format.Pitch, &tiledData[0], tiledData.size(), - &levelData[0], levelData.size(), rowPitch)) + if (!TileDdsLevelToTexture(ddsFile, ddsOffset, ddsMipLevelSize, image->width, image->height, mipLevel, + image->width, image->height, mipLevel, format, texture->Format.Pitch, destination, + tiledMipLevelSize, static_cast(texture->Format.Endian))) { PrintImageError("failed to tile image '%s' mip level %u\n", image->name, mipLevel); return false; } - memcpy(destination, &tiledData[0], tiledMipLevelSize); ddsOffset += ddsMipLevelSize; } return true; } -bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) +bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage, DdsDataFile &ddsFile, uint32_t ddsDataSize) { if (image->mapType != game::MAPTYPE_CUBE) { @@ -929,17 +966,16 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) return false; } - if (!ValidateDDSDataSize(image, ddsImage, format, 1u, 6u)) + if (!ValidateDDSDataSize(image, ddsImage.header, ddsDataSize, format, 1u, 6u)) return false; size_t requiredDDSSize = 0; - if (!ValidateCubeReplacementData(image, ddsImage, format, faceSize, tiledBaseSize, &requiredDDSSize)) + if (!ValidateCubeReplacementData(image, ddsDataSize, format, faceSize, tiledBaseSize, &requiredDDSSize)) { - if (ddsImage.data.size() < requiredDDSSize) + if (ddsDataSize < requiredDDSSize) { PrintImageError("image '%s' DDS is too small for 6 cube faces: have=%u need=%u\n", image->name, - static_cast(ddsImage.data.size()), - static_cast(requiredDDSSize)); + static_cast(ddsDataSize), static_cast(requiredDDSSize)); } else { @@ -952,26 +988,22 @@ bool Image_Replace_Cube(game::GfxImage *image, const DDSImage &ddsImage) for (uint32_t faceIndex = 0; faceIndex < 6u; ++faceIndex) { - const unsigned char *facePixels = &ddsImage.data[faceIndex * faceSize]; + const uint32_t faceOffset = faceIndex * faceSize; unsigned char *faceDestination = baseData + (faceIndex * tiledFaceSize); - image::DdsByteVector tiledData(tiledFaceSize); - if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0u, format, texture->Format.Pitch, - &tiledData[0], tiledData.size(), facePixels, faceSize, rowPitch)) + if (!TileDdsLevelToTexture(ddsFile, faceOffset, faceSize, image->width, image->height, 0u, image->width, + image->height, 0u, format, texture->Format.Pitch, faceDestination, tiledFaceSize, + static_cast(texture->Format.Endian))) { PrintImageError("failed to tile cube image '%s' face %u\n", image->name, faceIndex); return false; } - - image::xenos_texture::ApplyGpuEndian(&tiledData[0], tiledData.size(), - static_cast(texture->Format.Endian)); - memcpy(faceDestination, &tiledData[0], tiledFaceSize); } return true; } -bool ValidateReplacementShape(const game::GfxImage *image, const DDSImage &ddsImage) +bool ValidateReplacementShape(const game::GfxImage *image, const DDSImage &ddsImage, uint32_t ddsDataSize) { const bool ddsIsCubemap = ddsImage.IsCubemap(); @@ -989,7 +1021,7 @@ bool ValidateReplacementShape(const game::GfxImage *image, const DDSImage &ddsIm const uint32_t faceSize = image::xenos_texture::CalculateLinearLevelSize( ddsImage.header.dwWidth, ddsImage.header.dwHeight, 0u, ddsFormat); - if (faceSize == 0 || ddsImage.data.size() < static_cast(faceSize) * 6u) + if (faceSize == 0 || ddsDataSize < static_cast(faceSize) * 6u) { PrintImageError("image '%s' is a cubemap but replacement DDS is not a valid 6-face cubemap\n", image->name); return false; @@ -1018,9 +1050,15 @@ void Image_Replace(game::GfxImage *image) } DDSImage ddsImage; - ReadDDSFile(replacementPath, &ddsImage); + uint32_t ddsDataSize = 0; + if (!ReadDDSHeader(replacementPath, &ddsImage, &ddsDataSize)) + { + PrintImageError("failed to load DDS header for image '%s': %s\n", image->name, replacementPath.c_str()); + return; + } + GPUTEXTUREFORMAT ddsFormat; - if (!ValidateDDSHeader(image, ddsImage, replacementPath, &ddsFormat)) + if (!ValidateDDSHeaderFields(image, ddsImage, &ddsFormat)) return; if (image->width != ddsImage.header.dwWidth || image->height != ddsImage.header.dwHeight) @@ -1030,14 +1068,22 @@ void Image_Replace(game::GfxImage *image) return; } - if (!ValidateReplacementShape(image, ddsImage)) + if (!ValidateReplacementShape(image, ddsImage, ddsDataSize)) return; + DdsDataFile ddsFile(replacementPath, ddsDataSize); + if (!ddsFile.IsValid()) + { + PrintImageError("failed to open DDS data for image '%s': %s error=0x%08X\n", image->name, + replacementPath.c_str(), GetLastError()); + return; + } + bool replaced = false; if (image->mapType == game::MAPTYPE_2D) - replaced = Image_Replace_2D(image, ddsImage); + replaced = Image_Replace_2D(image, ddsImage, ddsFile, ddsDataSize); else if (image->mapType == game::MAPTYPE_CUBE) - replaced = Image_Replace_Cube(image, ddsImage); + replaced = Image_Replace_Cube(image, ddsImage, ddsFile, ddsDataSize); else PrintImageError("image '%s' is not a 2D or cube map\n", image->name); @@ -1094,7 +1140,7 @@ bool ValidateStreamReplacementData(const game::GfxImage *image, const DDSImage & return true; } -bool Image_Replace_StreamCubePart(game::GfxImage *image, const std::string &replacementPath, const DDSImage &ddsImage, +bool Image_Replace_StreamCubePart(game::GfxImage *image, DdsDataFile &ddsFile, const DDSImage &ddsImage, size_t ddsDataSize, GPUTEXTUREFORMAT ddsFormat, uint32_t imagePartIndex) { if (imagePartIndex != 0u) @@ -1146,32 +1192,21 @@ bool Image_Replace_StreamCubePart(game::GfxImage *image, const std::string &repl for (uint32_t faceIndex = 0; faceIndex < 6u; ++faceIndex) { const uint32_t faceOffset = faceIndex * faceSize; - unsigned char *faceData = nullptr; - if (!ReadDdsRangeToScratch(replacementPath, faceOffset, faceSize, &faceData)) - { - PrintImageError("failed to read streamed cube image '%s' face %u: offset=%u size=%u\n", image->name, - faceIndex, faceOffset, faceSize); - return false; - } - unsigned char *faceDestination = image->pixels + static_cast(faceIndex) * tiledFaceSize; - memset(faceDestination, 0, tiledFaceSize); - if (!image::xenos_texture::TileTextureLevel(image->width, image->height, 0u, ddsFormat, 0u, faceDestination, - tiledFaceSize, faceData, faceSize, rowPitch)) + if (!TileDdsLevelToTexture(ddsFile, faceOffset, faceSize, image->width, image->height, 0u, image->width, + image->height, 0u, ddsFormat, 0u, faceDestination, tiledFaceSize, + static_cast(image->texture.basemap.Format.Endian))) { PrintImageError("failed to tile streamed cube image '%s' face %u\n", image->name, faceIndex); return false; } - - image::xenos_texture::ApplyGpuEndian(faceDestination, tiledFaceSize, - static_cast(image->texture.basemap.Format.Endian)); } return true; } -bool Image_Replace_StreamPart(game::GfxImage *image, const std::string &replacementPath, const DDSImage &ddsImage, +bool Image_Replace_StreamPart(game::GfxImage *image, DdsDataFile &ddsFile, const DDSImage &ddsImage, size_t ddsDataSize, uint32_t imagePartIndex) { if (image == nullptr || image->name == nullptr || imagePartIndex >= 4u) @@ -1189,7 +1224,7 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const std::string &replacem return false; if (image->mapType == game::MAPTYPE_CUBE) - return Image_Replace_StreamCubePart(image, replacementPath, ddsImage, ddsDataSize, ddsFormat, imagePartIndex); + return Image_Replace_StreamCubePart(image, ddsFile, ddsImage, ddsDataSize, ddsFormat, imagePartIndex); if (image->mapType != game::MAPTYPE_2D) { @@ -1279,23 +1314,12 @@ bool Image_Replace_StreamPart(game::GfxImage *image, const std::string &replacem return false; } - unsigned char *levelData = nullptr; - if (!ReadDdsRangeToScratch(replacementPath, ddsOffset, ddsMipLevelSize, &levelData)) - { - PrintImageError("failed to read streamed image '%s' part %u mip %u: offset=%u size=%u\n", image->name, - imagePartIndex, localMipLevel, ddsOffset, ddsMipLevelSize); - return false; - } - - image::xenos_texture::ApplyGpuEndian(levelData, ddsMipLevelSize, - static_cast(image->texture.basemap.Format.Endian)); - unsigned char *destination = image->pixels + destinationOffset; - memset(destination, 0, tiledMipLevelSize); - if (!image::xenos_texture::TileTextureLevel(image->width, image->height, localMipLevel, ddsFormat, - streamBasePitch, destination, tiledMipLevelSize, levelData, - ddsMipLevelSize, rowPitch)) + if (!TileDdsLevelToTexture(ddsFile, ddsOffset, ddsMipLevelSize, ddsImage.header.dwWidth, + ddsImage.header.dwHeight, globalMipLevel, image->width, image->height, + localMipLevel, ddsFormat, streamBasePitch, destination, tiledMipLevelSize, + static_cast(image->texture.basemap.Format.Endian))) { PrintImageError("failed to tile streamed image '%s' part %u mip %u\n", image->name, imagePartIndex, localMipLevel); @@ -1331,7 +1355,15 @@ void TryReplaceStreamPart(game::GfxImage *image, uint32_t imagePartIndex) return; } - if (Image_Replace_StreamPart(image, replacementPath, ddsImage, ddsDataSize, imagePartIndex)) + DdsDataFile ddsFile(replacementPath, ddsDataSize); + if (!ddsFile.IsValid()) + { + PrintImageError("failed to open DDS data for streamed image '%s': %s error=0x%08X\n", image->name, + replacementPath.c_str(), GetLastError()); + return; + } + + if (Image_Replace_StreamPart(image, ddsFile, ddsImage, ddsDataSize, imagePartIndex)) PrintImageInfo("replaced image '%s' (streamed part %u)\n", image->name, imagePartIndex); } @@ -1378,6 +1410,4 @@ image_loader::~image_loader() { ImageCache_InitImage_Detour.Remove(); dump_assets = nullptr; - g_streamReplacementScratch = nullptr; - g_streamReplacementScratchSize = 0; } diff --git a/src/image/xenos_texture.cpp b/src/image/xenos_texture.cpp index 64ea2de7..3e4d8f6d 100644 --- a/src/image/xenos_texture.cpp +++ b/src/image/xenos_texture.cpp @@ -330,6 +330,47 @@ bool TileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32 return true; } +bool TileTextureLevelFromRows(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, + uint32_t basePitch, void *destination, size_t destinationSize, + uint32_t sourceRowPitch, unsigned char *rowBuffer, size_t rowBufferSize, + TileTextureRowReader rowReader, void *userData) +{ + const TextureFormatInfo *formatInfo = GetTextureFormatInfo(gpuFormat); + if (formatInfo == NULL || destination == NULL || rowBuffer == NULL || rowReader == NULL || sourceRowPitch == 0) + return false; + + const TextureLevelLayout layout = CalculateLevelLayout(width, height, mipLevel, *formatInfo, basePitch); + if (sourceRowPitch < layout.widthBlocks * formatInfo->bytesPerBlock || rowBufferSize < sourceRowPitch) + return false; + + const uint32_t log2BytesPerBlock = CalculateLog2BytesPerBlock(formatInfo->bytesPerBlock); + unsigned char *destinationBytes = static_cast(destination); + + for (uint32_t y = 0; y < layout.heightBlocks; ++y) + { + if (!rowReader(y, rowBuffer, sourceRowPitch, userData)) + return false; + + const uint32_t destinationRowOffset = TiledOffset2DRow(y, layout.storedWidthBlocks, log2BytesPerBlock); + + for (uint32_t x = 0; x < layout.widthBlocks; ++x) + { + uint32_t tiledOffset = TiledOffset2DColumn(x, y, log2BytesPerBlock, destinationRowOffset); + tiledOffset >>= log2BytesPerBlock; + + const size_t sourceOffset = static_cast(x) * formatInfo->bytesPerBlock; + const size_t destinationOffset = static_cast(tiledOffset) * formatInfo->bytesPerBlock; + if (sourceOffset + formatInfo->bytesPerBlock > rowBufferSize || + destinationOffset + formatInfo->bytesPerBlock > destinationSize) + return false; + + memcpy(destinationBytes + destinationOffset, rowBuffer + sourceOffset, formatInfo->bytesPerBlock); + } + } + + return true; +} + bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, void *destination, uint32_t destinationRowPitch, const void *source) { diff --git a/src/image/xenos_texture.h b/src/image/xenos_texture.h index a7d17de6..f27eb228 100644 --- a/src/image/xenos_texture.h +++ b/src/image/xenos_texture.h @@ -16,6 +16,8 @@ struct TextureFormatInfo uint32_t bitsPerPixel; }; +typedef bool (*TileTextureRowReader)(uint32_t rowIndex, unsigned char *rowBuffer, uint32_t rowPitch, void *userData); + const TextureFormatInfo *GetTextureFormatInfo(uint32_t gpuFormat); void ApplyGpuEndian(void *data, size_t size, GPUENDIAN endianType); uint32_t GetTextureLevelCount(const D3DBaseTexture *texture); @@ -35,6 +37,10 @@ bool TileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32 bool TileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, void *destination, size_t destinationSize, const void *source, size_t sourceSize, uint32_t sourceRowPitch); +bool TileTextureLevelFromRows(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, + uint32_t basePitch, void *destination, size_t destinationSize, + uint32_t sourceRowPitch, unsigned char *rowBuffer, size_t rowBufferSize, + TileTextureRowReader rowReader, void *userData); bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch, void *destination, uint32_t destinationRowPitch, const void *source); bool UntileTextureLevel(uint32_t width, uint32_t height, uint32_t mipLevel, uint32_t gpuFormat, uint32_t basePitch,

      u6Sq4=zwe28R&F`>wZ6 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�pO1Gk?wKK!ueLB_y;51TaW2q)}4Y7B$fnK1IB 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 z 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≶OA1l}S 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