2022-10-13 02:22:50 +02:00
# ifndef TEXTURE_G_H
# define TEXTURE_G_H
//-----------------------------------------------------------------------------
// Structure definitions
//-----------------------------------------------------------------------------
/*schema*/ struct TextureDesc_t
{
uint64_t m_AssetGuid ;
const char * m_pDebugName ;
uint16 m_nWidth ;
uint16 m_nHeight ;
uint16 m_nDepth ;
uint16_t m_nImageFormat ;
} ;
/*schema*/ struct TextureHeader_t : public TextureDesc_t
{
uint32_t m_nDataLength ;
uint8_t unknown_2 ;
uint8_t m_nOptStreamedMipCount ;
uint8_t m_nArraySize ;
uint8_t m_nLayerCount ;
2022-10-13 21:59:06 +02:00
uint8_t m_nCPUAccessFlag ; // [ PIXIE ]: In RTech::CreateDXBuffer textureDescription Usage is determined by the CPU Access Flag so I assume it's the same case here.
2022-10-13 02:22:50 +02:00
uint8_t m_nPermanentMipCount ;
uint8_t m_nStreamedMipCount ;
uint8_t unknown_4 [ 13 ] ;
__int64 m_nPixelCount ;
2022-10-13 21:59:06 +02:00
uint8_t unknown_5 [ 3 ] ;
uint8_t m_nTotalStreamedMipCount ; // Does not get set until after RTech::CreateDXTexture.
uint8_t unk4 [ 228 ] ;
uint8_t unk5 [ 57 ] ;
ID3D11Texture2D * m_ppTexture ;
ID3D11ShaderResourceView * m_ppShaderResourceView ;
uint8_t m_nTextureMipLevels ;
uint8_t m_nTextureMipLevelsStreamedOpt ;
2022-10-13 02:22:50 +02:00
} ;
2022-10-13 21:59:06 +02:00
//-----------------------------------------------------------------------------
// Table definitions
//-----------------------------------------------------------------------------
static const pair < uint8_t , uint8_t > s_pBytesPerPixel [ ] =
{
2023-04-02 09:43:08 +02:00
{ uint8_t ( 8u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 4u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 16u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 12u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 12u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 12u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 8u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 1u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 1u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 1u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 1u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 1u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 4u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 1u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 5u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 5u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 1u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 2u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 1u ) , uint8_t ( 0u ) } ,
{ uint8_t ( 0u ) , uint8_t ( 0u ) }
2022-10-13 21:59:06 +02:00
} ;
2023-04-01 11:27:53 +02:00
// Map dxgi format to txtr asset format
inline int DxgiFormatToTxtrAsset ( DXGI_FORMAT dxgi )
{
switch ( dxgi )
{
case DXGI_FORMAT_BC1_UNORM : return 0 ;
case DXGI_FORMAT_BC1_UNORM_SRGB : return 1 ;
case DXGI_FORMAT_BC2_UNORM : return 2 ;
case DXGI_FORMAT_BC2_UNORM_SRGB : return 3 ;
case DXGI_FORMAT_BC3_UNORM : return 4 ;
case DXGI_FORMAT_BC3_UNORM_SRGB : return 5 ;
case DXGI_FORMAT_BC4_UNORM : return 6 ;
case DXGI_FORMAT_BC4_SNORM : return 7 ;
case DXGI_FORMAT_BC5_UNORM : return 8 ;
case DXGI_FORMAT_BC5_SNORM : return 9 ;
case DXGI_FORMAT_BC6H_UF16 : return 10 ;
case DXGI_FORMAT_BC6H_SF16 : return 11 ;
case DXGI_FORMAT_BC7_UNORM : return 12 ;
case DXGI_FORMAT_BC7_UNORM_SRGB : return 13 ;
case DXGI_FORMAT_R32G32B32A32_FLOAT : return 14 ;
case DXGI_FORMAT_R32G32B32A32_UINT : return 15 ;
case DXGI_FORMAT_R32G32B32A32_SINT : return 16 ;
case DXGI_FORMAT_R32G32B32_FLOAT : return 17 ;
case DXGI_FORMAT_R32G32B32_UINT : return 18 ;
case DXGI_FORMAT_R32G32B32_SINT : return 19 ;
case DXGI_FORMAT_R16G16B16A16_FLOAT : return 20 ;
case DXGI_FORMAT_R16G16B16A16_UNORM : return 21 ;
case DXGI_FORMAT_R16G16B16A16_UINT : return 22 ;
case DXGI_FORMAT_R16G16B16A16_SNORM : return 23 ;
case DXGI_FORMAT_R16G16B16A16_SINT : return 24 ;
case DXGI_FORMAT_R32G32_FLOAT : return 25 ;
case DXGI_FORMAT_R32G32_UINT : return 26 ;
case DXGI_FORMAT_R32G32_SINT : return 27 ;
case DXGI_FORMAT_R10G10B10A2_UNORM : return 28 ;
case DXGI_FORMAT_R10G10B10A2_UINT : return 29 ;
case DXGI_FORMAT_R11G11B10_FLOAT : return 30 ;
case DXGI_FORMAT_R8G8B8A8_UNORM : return 31 ;
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : return 32 ;
case DXGI_FORMAT_R8G8B8A8_UINT : return 33 ;
case DXGI_FORMAT_R8G8B8A8_SNORM : return 34 ;
case DXGI_FORMAT_R8G8B8A8_SINT : return 35 ;
case DXGI_FORMAT_R16G16_FLOAT : return 36 ;
case DXGI_FORMAT_R16G16_UNORM : return 37 ;
case DXGI_FORMAT_R16G16_UINT : return 38 ;
case DXGI_FORMAT_R16G16_SNORM : return 39 ;
case DXGI_FORMAT_R16G16_SINT : return 40 ;
case DXGI_FORMAT_R32_FLOAT : return 41 ;
case DXGI_FORMAT_R32_UINT : return 42 ;
case DXGI_FORMAT_R32_SINT : return 43 ;
case DXGI_FORMAT_R8G8_UNORM : return 44 ;
case DXGI_FORMAT_R8G8_UINT : return 45 ;
case DXGI_FORMAT_R8G8_SNORM : return 46 ;
case DXGI_FORMAT_R8G8_SINT : return 47 ;
case DXGI_FORMAT_R16_FLOAT : return 48 ;
case DXGI_FORMAT_R16_UNORM : return 49 ;
case DXGI_FORMAT_R16_UINT : return 50 ;
case DXGI_FORMAT_R16_SNORM : return 51 ;
case DXGI_FORMAT_R16_SINT : return 52 ;
case DXGI_FORMAT_R8_UNORM : return 53 ;
case DXGI_FORMAT_R8_UINT : return 54 ;
case DXGI_FORMAT_R8_SNORM : return 55 ;
case DXGI_FORMAT_R8_SINT : return 56 ;
case DXGI_FORMAT_A8_UNORM : return 57 ;
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP : return 58 ;
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM : return 59 ;
case DXGI_FORMAT_D32_FLOAT : return 60 ;
case DXGI_FORMAT_D16_UNORM : return 61 ;
2023-04-02 01:40:28 +02:00
default : return 0 ;
2023-04-01 11:27:53 +02:00
}
}
2022-10-13 21:59:06 +02:00
2023-04-01 11:27:53 +02:00
// Map txtr asset format to dxgi format
2023-04-02 01:40:28 +02:00
static const DXGI_FORMAT g_TxtrAssetToDxgiFormat [ ] =
2023-04-01 11:27:53 +02:00
{
2023-04-02 01:40:28 +02:00
DXGI_FORMAT_BC1_UNORM ,
DXGI_FORMAT_BC1_UNORM_SRGB ,
DXGI_FORMAT_BC2_UNORM ,
DXGI_FORMAT_BC2_UNORM_SRGB ,
DXGI_FORMAT_BC3_UNORM ,
DXGI_FORMAT_BC3_UNORM_SRGB ,
DXGI_FORMAT_BC4_UNORM ,
DXGI_FORMAT_BC4_SNORM ,
DXGI_FORMAT_BC5_UNORM ,
DXGI_FORMAT_BC5_SNORM ,
DXGI_FORMAT_BC6H_UF16 ,
DXGI_FORMAT_BC6H_SF16 ,
DXGI_FORMAT_BC7_UNORM ,
DXGI_FORMAT_BC7_UNORM_SRGB ,
DXGI_FORMAT_R32G32B32A32_FLOAT ,
DXGI_FORMAT_R32G32B32A32_UINT ,
DXGI_FORMAT_R32G32B32A32_SINT ,
DXGI_FORMAT_R32G32B32_FLOAT ,
DXGI_FORMAT_R32G32B32_UINT ,
DXGI_FORMAT_R32G32B32_SINT ,
DXGI_FORMAT_R16G16B16A16_FLOAT ,
DXGI_FORMAT_R16G16B16A16_UNORM ,
DXGI_FORMAT_R16G16B16A16_UINT ,
DXGI_FORMAT_R16G16B16A16_SNORM ,
DXGI_FORMAT_R16G16B16A16_SINT ,
DXGI_FORMAT_R32G32_FLOAT ,
DXGI_FORMAT_R32G32_UINT ,
DXGI_FORMAT_R32G32_SINT ,
DXGI_FORMAT_R10G10B10A2_UNORM ,
DXGI_FORMAT_R10G10B10A2_UINT ,
DXGI_FORMAT_R11G11B10_FLOAT ,
DXGI_FORMAT_R8G8B8A8_UNORM ,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB ,
DXGI_FORMAT_R8G8B8A8_UINT ,
DXGI_FORMAT_R8G8B8A8_SNORM ,
DXGI_FORMAT_R8G8B8A8_SINT ,
DXGI_FORMAT_R16G16_FLOAT ,
DXGI_FORMAT_R16G16_UNORM ,
DXGI_FORMAT_R16G16_UINT ,
DXGI_FORMAT_R16G16_SNORM ,
DXGI_FORMAT_R16G16_SINT ,
DXGI_FORMAT_R32_FLOAT ,
DXGI_FORMAT_R32_UINT ,
DXGI_FORMAT_R32_SINT ,
DXGI_FORMAT_R8G8_UNORM ,
DXGI_FORMAT_R8G8_UINT ,
DXGI_FORMAT_R8G8_SNORM ,
DXGI_FORMAT_R8G8_SINT ,
DXGI_FORMAT_R16_FLOAT ,
DXGI_FORMAT_R16_UNORM ,
DXGI_FORMAT_R16_UINT ,
DXGI_FORMAT_R16_SNORM ,
DXGI_FORMAT_R16_SINT ,
DXGI_FORMAT_R8_UNORM ,
DXGI_FORMAT_R8_UINT ,
DXGI_FORMAT_R8_SNORM ,
DXGI_FORMAT_R8_SINT ,
DXGI_FORMAT_A8_UNORM ,
DXGI_FORMAT_R9G9B9E5_SHAREDEXP ,
DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM ,
DXGI_FORMAT_D32_FLOAT ,
DXGI_FORMAT_D16_UNORM ,
2022-10-13 21:59:06 +02:00
} ;
# endif // TEXTURE_G_H