Instead of having to deal with unsupported formats, lets just remove the whole EmuPC2XB_D3DFormat function, as there was only 1 place remaining that called it, which selected the input format just a few lines earlier. So instead, just select the Xbox format and skip the whole intermediate format type. We should have done that from the start...

This commit is contained in:
PatrickvL 2024-06-20 17:43:30 +02:00
parent 81b5380206
commit 1fec9fa344
4 changed files with 105 additions and 107 deletions

View File

@ -1,4 +1,102 @@
// ensure a given width/height are powers of 2
// convert from pc to xbox color formats
//extern
xbox::X_D3DFORMAT EmuPC2XB_D3DFormat(CXBXFORMAT Format, bool bPreferLinear = true);
{
xbox::X_D3DFORMAT result;
switch(Format)
{
case CXBXFMT_YUY2:
result = xbox::X_D3DFMT_YUY2;
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_UYVY:
result = xbox::X_D3DFMT_UYVY;
break;
#endif
case CXBXFMT_R5G6B5:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_R5G6B5 : xbox::X_D3DFMT_R5G6B5;
break;
case CXBXFMT_D24S8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_D24S8 : xbox::X_D3DFMT_D24S8;
break;
case CXBXFMT_DXT5:
result = xbox::X_D3DFMT_DXT5; // Compressed
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_DXT4:
result = xbox::X_D3DFMT_DXT4; // Compressed // Same as xbox::X_D3DFMT_DXT5
break;
#endif
case CXBXFMT_DXT3:
result = xbox::X_D3DFMT_DXT3; // Compressed
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_DXT2:
result = xbox::X_D3DFMT_DXT2; // Compressed // Same as xbox::X_D3DFMT_DXT3
break;
#endif
case CXBXFMT_DXT1:
result = xbox::X_D3DFMT_DXT1; // Compressed
break;
case CXBXFMT_A1R5G5B5:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_A1R5G5B5 : xbox::X_D3DFMT_A1R5G5B5;
break;
case CXBXFMT_X8R8G8B8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_X8R8G8B8 : xbox::X_D3DFMT_X8R8G8B8;
break;
case CXBXFMT_A8R8G8B8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_A8R8G8B8 : xbox::X_D3DFMT_A8R8G8B8;
break;
case CXBXFMT_A4R4G4B4:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_A4R4G4B4 : xbox::X_D3DFMT_A4R4G4B4;
break;
#ifndef CXBX_USE_D3D11 // Note : CXBXFMT_A1R5G5B5 maps to same DXGI_FORMAT_B5G5R5A1_UNORM
case CXBXFMT_X1R5G5B5:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_X1R5G5B5 : xbox::X_D3DFMT_X1R5G5B5;
break;
#endif
case CXBXFMT_A8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_A8 : xbox::X_D3DFMT_A8;
break;
case CXBXFMT_L8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_L8 : xbox::X_D3DFMT_L8;
break;
case CXBXFMT_D16:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_D16 : xbox::X_D3DFMT_D16;
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_D16_LOCKABLE:
result = xbox::X_D3DFMT_D16_LOCKABLE;
break;
#endif
case CXBXFMT_UNKNOWN:
result = ((xbox::X_D3DFORMAT)0xffffffff); // TODO : return xbox::X_D3DFMT_UNKNOWN ?
break;
// Dxbx additions :
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_L6V5U5:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_L6V5U5 : xbox::X_D3DFMT_L6V5U5;
break;
#endif
case CXBXFMT_V8U8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_V8U8 : xbox::X_D3DFMT_V8U8;
break;
case CXBXFMT_V16U16:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_V16U16 : xbox::X_D3DFMT_V16U16;
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_VERTEXDATA:
result = xbox::X_D3DFMT_VERTEXDATA;
break;
#endif
default:
CxbxrAbort("EmuPC2XB_D3DFormat: Unknown Format (%d)", Format);
}
return result;
}
// ensure a given width/height are powers of 2
static void EmuAdjustPower2(UINT *dwWidth, UINT *dwHeight)
{
UINT NewWidth=0, NewHeight=0;

View File

@ -1058,102 +1058,6 @@ CXBXFORMAT EmuXB2PC_D3DFormat(xbox::X_D3DFORMAT Format)
return CXBXFMT_UNKNOWN;
}
xbox::X_D3DFORMAT EmuPC2XB_D3DFormat(CXBXFORMAT Format, bool bPreferLinear)
{
xbox::X_D3DFORMAT result;
switch(Format)
{
case CXBXFMT_YUY2:
result = xbox::X_D3DFMT_YUY2;
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_UYVY:
result = xbox::X_D3DFMT_UYVY;
break;
#endif
case CXBXFMT_R5G6B5:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_R5G6B5 : xbox::X_D3DFMT_R5G6B5;
break;
case CXBXFMT_D24S8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_D24S8 : xbox::X_D3DFMT_D24S8;
break;
case CXBXFMT_DXT5:
result = xbox::X_D3DFMT_DXT5; // Compressed
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_DXT4:
result = xbox::X_D3DFMT_DXT4; // Compressed // Same as xbox::X_D3DFMT_DXT5
break;
#endif
case CXBXFMT_DXT3:
result = xbox::X_D3DFMT_DXT3; // Compressed
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_DXT2:
result = xbox::X_D3DFMT_DXT2; // Compressed // Same as xbox::X_D3DFMT_DXT3
break;
#endif
case CXBXFMT_DXT1:
result = xbox::X_D3DFMT_DXT1; // Compressed
break;
case CXBXFMT_A1R5G5B5:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_A1R5G5B5 : xbox::X_D3DFMT_A1R5G5B5;
break;
case CXBXFMT_X8R8G8B8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_X8R8G8B8 : xbox::X_D3DFMT_X8R8G8B8;
break;
case CXBXFMT_A8R8G8B8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_A8R8G8B8 : xbox::X_D3DFMT_A8R8G8B8;
break;
case CXBXFMT_A4R4G4B4:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_A4R4G4B4 : xbox::X_D3DFMT_A4R4G4B4;
break;
#ifndef CXBX_USE_D3D11 // Note : CXBXFMT_A1R5G5B5 maps to same DXGI_FORMAT_B5G5R5A1_UNORM
case CXBXFMT_X1R5G5B5:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_X1R5G5B5 : xbox::X_D3DFMT_X1R5G5B5;
break;
#endif
case CXBXFMT_A8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_A8 : xbox::X_D3DFMT_A8;
break;
case CXBXFMT_L8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_L8 : xbox::X_D3DFMT_L8;
break;
case CXBXFMT_D16:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_D16 : xbox::X_D3DFMT_D16;
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_D16_LOCKABLE:
result = xbox::X_D3DFMT_D16_LOCKABLE;
break;
#endif
case CXBXFMT_UNKNOWN:
result = ((xbox::X_D3DFORMAT)0xffffffff); // TODO : return xbox::X_D3DFMT_UNKNOWN ?
break;
// Dxbx additions :
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_L6V5U5:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_L6V5U5 : xbox::X_D3DFMT_L6V5U5;
break;
#endif
case CXBXFMT_V8U8:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_V8U8 : xbox::X_D3DFMT_V8U8;
break;
case CXBXFMT_V16U16:
result = bPreferLinear ? xbox::X_D3DFMT_LIN_V16U16 : xbox::X_D3DFMT_V16U16;
break;
#ifndef CXBX_USE_D3D11 // Mapped to DXGI_FORMAT_NOT_AVAILABLE
case CXBXFMT_VERTEXDATA:
result = xbox::X_D3DFMT_VERTEXDATA;
break;
#endif
default:
CxbxrAbort("EmuPC2XB_D3DFormat: Unknown Format (%d)", Format);
}
return result;
}
DWORD EmuXB2PC_D3DLock(DWORD Flags)
{
DWORD NewFlags = 0;

View File

@ -73,9 +73,6 @@ extern BOOL EmuXBFormatIsDepthBuffer(xbox::X_D3DFORMAT Format);
// convert from xbox to pc color formats
extern CXBXFORMAT EmuXB2PC_D3DFormat(xbox::X_D3DFORMAT Format);
// convert from pc to xbox color formats
extern xbox::X_D3DFORMAT EmuPC2XB_D3DFormat(CXBXFORMAT Format, bool bPreferLinear = true);
// convert from xbox to pc d3d lock flags
extern DWORD EmuXB2PC_D3DLock(DWORD Flags);

View File

@ -43,7 +43,6 @@
#include "common\xbe\XbePrinter.h" // For DumpInformation
#include "EmuShared.h"
#include "core\hle\D3D8\Direct3D9\Direct3D9.h" // For CxbxSetPixelContainerHeader
#include "core\hle\D3D8\XbConvert.h" // For EmuPC2XB_D3DFormat
#include "common\Settings.hpp"
#include "common/util/cliConfig.hpp"
#include "common/win32/WineEnv.h"
@ -1502,19 +1501,19 @@ void WndMain::LoadGameLogo()
switch (*(DWORD*)pSection) {
case MAKEFOURCC('D', 'D', 'S', ' '): {
DDS_HEADER *pDDSHeader = (DDS_HEADER *)(pSection + sizeof(DWORD));
CXBXFORMAT Format = CXBXFMT_UNKNOWN;
xbox::X_D3DFORMAT XbFormat = xbox::X_D3DFMT_UNKNOWN;
if (pDDSHeader->ddspf.dwFlags & DDPF_FOURCC) {
switch (pDDSHeader->ddspf.dwFourCC) {
case MAKEFOURCC('D', 'X', 'T', '1'): Format = CXBXFMT_DXT1; break;
case MAKEFOURCC('D', 'X', 'T', '3'): Format = CXBXFMT_DXT3; break;
case MAKEFOURCC('D', 'X', 'T', '5'): Format = CXBXFMT_DXT5; break;
case MAKEFOURCC('D', 'X', 'T', '1'): XbFormat = xbox::X_D3DFMT_DXT1; break;
case MAKEFOURCC('D', 'X', 'T', '3'): XbFormat = xbox::X_D3DFMT_DXT3; break;
case MAKEFOURCC('D', 'X', 'T', '5'): XbFormat = xbox::X_D3DFMT_DXT5; break;
}
}
else {
// TODO : Determine D3D format based on pDDSHeader->ddspf.dwABitMask, .dwRBitMask, .dwGBitMask and .dwBBitMask
}
if (Format == CXBXFMT_UNKNOWN)
if (XbFormat == xbox::X_D3DFMT_UNKNOWN)
return;
ImageData = (uint8_t *)(pSection + sizeof(DWORD) + pDDSHeader->dwSize);
@ -1527,7 +1526,7 @@ void WndMain::LoadGameLogo()
(UINT)pDDSHeader->dwWidth,
(UINT)pDDSHeader->dwHeight,
1,
EmuPC2XB_D3DFormat(Format),
XbFormat,
2,
(UINT)pDDSHeader->dwPitchOrLinearSize);
break;