1 /*---------------------------------------------------------------------------* 2 3 Copyright (C) Nintendo. All rights reserved. 4 5 These coded instructions, statements, and computer programs contain 6 proprietary information of Nintendo of America Inc. and/or Nintendo 7 Company Ltd., and are protected by Federal copyright law. They may 8 not be disclosed to third parties or copied or duplicated in any form, 9 in whole or in part, without the prior written consent of Nintendo. 10 11 *---------------------------------------------------------------------------*/ 12 // ------------------------------------------------------- 13 // DDS_Helpers.h 14 // 15 // Declares helper functions for DDS Reader. 16 // ------------------------------------------------------- 17 #ifndef DDS_HELPERS_H 18 #define DDS_HELPERS_H 19 20 #include "DDS.h" 21 22 namespace DDSReader 23 { 24 #define FOURCC_BC1 MAKEFOURCC('B', 'C', '1', ' ') 25 #define FOURCC_BC2 MAKEFOURCC('B', 'C', '2', ' ') 26 #define FOURCC_BC3 MAKEFOURCC('B', 'C', '3', ' ') 27 #define FOURCC_BC4 MAKEFOURCC('B', 'C', '4', ' ') 28 #define FOURCC_BC5 MAKEFOURCC('B', 'C', '5', ' ') 29 30 #define FOURCC_BC4S MAKEFOURCC('B', 'C', '4', 'S') 31 #define FOURCC_BC4U MAKEFOURCC('B', 'C', '4', 'U') 32 #define FOURCC_BC5S MAKEFOURCC('B', 'C', '5', 'S') 33 34 typedef struct _ARGB8888Struct 35 { 36 int nFlags; 37 void* pMemory; 38 int nRMask; 39 int nRShift; 40 int nGMask; 41 int nGShift; 42 int nBMask; 43 int nBShift; 44 } ARGB8888Struct; 45 46 typedef enum _ExtraFlags 47 { 48 EF_None = 0, 49 EF_UseBitMasks = 0x1, 50 } ExtraFlags; 51 52 typedef TU_Error (PreLoopFunction)(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); 53 typedef TU_Error (LoopFunction)(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 54 typedef TU_Error (PostLoopFunction)(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); 55 TU_Error GenericLoadFunction(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra, ChannelFormat channelFormat, TextureDataType textureDataType, PreLoopFunction fnPreLoop, LoopFunction fnLoop, PostLoopFunction fnPostLoop); 56 57 bool IsD3D10Format(const GX2Surface* pSurface); 58 void DetermineTextureType(const DDSD2* pDDSD, GX2Surface* pSurface); 59 TU_Error GenericLoadFunction(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra, ChannelFormat channelFormat, 60 TextureDataType textureDataType, PreLoopFunction fnPreLoop, LoopFunction fnLoop, PostLoopFunction fnPostLoop); 61 TU_Error GenericFreeFunction(GX2Surface*& pSurface); 62 TU_Error PreLoopDefault(FILE*&, DDSD2*&, GX2Surface*&, void*&); 63 TU_Error LoopDefault(FILE*& pFile, DDSD2*&, GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 64 TU_Error PostLoopDefault(FILE*&, DDSD2*&, GX2Surface*&, void*&); 65 TU_Error PreLoopFourCC(FILE*& pFile, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); 66 TU_Error LoopFourCC(FILE*& pFile, DDSD2*&, GX2Surface*& pSurface, void*& /*extra*/, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 67 TU_Error PostLoopFourCC(FILE*&, DDSD2*&, GX2Surface*&, void*&); 68 TU_Error PreLoopRGB565(FILE*&, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); 69 TU_Error LoopRGB565(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 70 TU_Error PostLoopRGB565(FILE*&, DDSD2*&, GX2Surface*&, void*& extra); 71 TU_Error PreLoopRGB888(FILE*&, DDSD2*& pDDSD, GX2Surface*& pSurface, void*& extra); 72 TU_Error LoopRGB888(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 73 TU_Error PostLoopRGB888(FILE*&, DDSD2*&, GX2Surface*&, void*& extra); 74 TU_Error PreLoopRGB8888(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 75 TU_Error LoopRGB8888(FILE*& pFile, DDSD2*&, GX2Surface*& pSurface, void*& extra, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 76 TU_Error PostLoopRGB8888(FILE*&, DDSD2*&, GX2Surface*&, void*&); 77 TU_Error PreLoopABGR32F(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 78 TU_Error LoopABGR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 79 TU_Error LoopR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 80 TU_Error LoopGR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 81 TU_Error PostLoopABGR32F(FILE*&, DDSD2*&, GX2Surface*&, void*&); 82 TU_Error LoopGR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 83 TU_Error LoopR32F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 84 TU_Error PreLoopABGR16F(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 85 TU_Error LoopABGR16F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 86 TU_Error LoopGR16F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 87 TU_Error LoopR16F(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 88 TU_Error PostLoopABGR16F(FILE*&, DDSD2*&, GX2Surface*&, void*&); 89 TU_Error PreLoopG8(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 90 TU_Error LoopG8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 91 TU_Error PostLoopG8(FILE*&, DDSD2*&, GX2Surface*&, void*&); 92 TU_Error PreLoopA4L4(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 93 TU_Error LoopA4L4(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 94 TU_Error PostLoopA4L4(FILE*&, DDSD2*&, GX2Surface*&, void*&); 95 TU_Error PreLoopA8L8(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 96 TU_Error LoopA8L8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 97 TU_Error PostLoopA8L8(FILE*&, DDSD2*&, GX2Surface*&, void*&); 98 TU_Error PreLoopAG8(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 99 TU_Error LoopAG8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 100 TU_Error PostLoopAG8(FILE*&, DDSD2*&, GX2Surface*&, void*&); 101 TU_Error PreLoopG16(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 102 TU_Error LoopG16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 103 TU_Error PostLoopG16(FILE*&, DDSD2*&, GX2Surface*&, void*&); 104 TU_Error PreLoopA8(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 105 TU_Error LoopA8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 106 TU_Error PostLoopA8(FILE*&, DDSD2*&, GX2Surface*&, void*&); 107 TU_Error PreLoopABGR16(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 108 TU_Error LoopABGR16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 109 TU_Error PostLoopABGR16(FILE*&, DDSD2*&, GX2Surface*&, void*&); 110 TU_Error PreLoopG16R16(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 111 TU_Error LoopG16R16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 112 TU_Error PostLoopG16R16(FILE*&, DDSD2*&, GX2Surface*&, void*&); 113 TU_Error PreLoopARGB1555(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 114 TU_Error LoopARGB1555(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 115 TU_Error PostLoopARGB1555(FILE*&, DDSD2*&, GX2Surface*&, void*&); 116 TU_Error PreLoopARGB4444(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 117 TU_Error LoopARGB4444(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 118 TU_Error PostLoopARGB4444(FILE*&, DDSD2*&, GX2Surface*&, void*&); 119 TU_Error PreLoopABGR32(FILE*&, DDSD2*&, GX2Surface*& pSurface, void*&); 120 TU_Error LoopABGR32(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 121 TU_Error PostLoopABGR32(FILE*&, DDSD2*&, GX2Surface*&, void*&); 122 TU_Error LoopR32G32(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 123 TU_Error LoopA2R10G10B10(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 124 TU_Error LoopR16G16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 125 TU_Error LoopR32(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 126 TU_Error LoopR8G8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 127 TU_Error LoopR16(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&, u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 128 TU_Error LoopR8(FILE*& pFile, DDSD2*& , GX2Surface*& pSurface, void*&,u32 nMipLevel, u32 nFaceOrSlice, u32 dwWidth, u32 dwHeight); 129 bool SetupDDSD(DDSD2& ddsd2, const GX2Surface* pSurface, bool bCompressed); 130 bool SetupDDSD_DDS10(DDSD2& ddsd2, const GX2Surface* pSurface, bool bCompressed); 131 } //namespace DDSReader 132 133 #endif //#ifndef DDS_HELPERS_H 134