Reviewed texture formats
This commit is contained in:
parent
9baea76494
commit
f2529e8cb7
|
@ -5826,7 +5826,7 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
if (D3DUsage & D3DUSAGE_DEPTHSTENCIL) {
|
||||
// If it was a depth stencil, fall back to a known supported depth format
|
||||
EmuLog(LOG_LEVEL::WARNING, "Xbox %s Format %x will be converted to D3DFMT_D24S8", ResourceTypeName, X_Format);
|
||||
PCFormat = D3DFMT_D24S8;
|
||||
PCFormat = _9_11(D3DFMT_D24S8, DXGI_FORMAT_D24_UNORM_S8_UINT);
|
||||
} else if (EmuXBFormatCanBeConvertedToARGB(X_Format)) {
|
||||
EmuLog(LOG_LEVEL::WARNING, "Xbox %s Format %x will be converted to ARGB", ResourceTypeName, X_Format);
|
||||
bConvertToARGB = true;
|
||||
|
@ -5916,6 +5916,23 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
// Create the surface/volume/(volume/cube/)texture
|
||||
switch (XboxResourceType) {
|
||||
case xbox::X_D3DRTYPE_SURFACE: {
|
||||
#ifdef CXBX_USE_D3D11
|
||||
D3D11_TEXTURE2D_DESC desc;
|
||||
desc.Width = hostWidth;
|
||||
desc.Height = hostHeight;
|
||||
desc.MipLevels = 1;
|
||||
desc.ArraySize = 1;
|
||||
desc.Format = PCFormat;
|
||||
desc.SampleDesc.Count = 1; // TODO : Use g_EmuCDPD.HostPresentationParameters.MultiSampleType ?
|
||||
desc.SampleDesc.Quality = 0;
|
||||
desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | (D3DUsage & D3DUSAGE_DEPTHSTENCIL) ? D3D11_BIND_DEPTH_STENCIL : 0;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
desc.MiscFlags = 0;
|
||||
|
||||
hRet = g_pD3DDevice->CreateTexture2D(&desc, NULL, &pNewHostResource);
|
||||
DEBUG_D3DRESULT(hRet, "g_pD3DDevice->CreateTexture2D");
|
||||
#else
|
||||
if (D3DUsage & D3DUSAGE_DEPTHSTENCIL) {
|
||||
hRet = g_pD3DDevice->CreateDepthStencilSurface(hostWidth, hostHeight, PCFormat,
|
||||
g_EmuCDPD.HostPresentationParameters.MultiSampleType,
|
||||
|
@ -5960,7 +5977,7 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
EmuLog(LOG_LEVEL::WARNING, "Trying Fallback");
|
||||
hRet = g_pD3DDevice->CreateOffscreenPlainSurface(hostWidth, hostHeight, PCFormat, D3DPool, pNewHostSurface.GetAddressOf(), nullptr);
|
||||
}
|
||||
|
||||
#endif
|
||||
// If the fallback failed, show an error and exit execution.
|
||||
if (hRet != D3D_OK) {
|
||||
// We cannot safely continue in this state.
|
||||
|
@ -5968,7 +5985,7 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
DXGetErrorString(hRet), DXGetErrorDescription(hRet));
|
||||
}
|
||||
|
||||
SetHostSurface(pResource, pNewHostSurface.Get(), iTextureStage);
|
||||
SetHostSurface(pResource, _9_11(pNewHostSurface, pNewHostResource).Get(), iTextureStage);
|
||||
EmuLog(LOG_LEVEL::DEBUG, "CreateHostResource : Successfully created %s (0x%.08X, 0x%.08X)",
|
||||
ResourceTypeName, pResource, pNewHostSurface.Get());
|
||||
EmuLog(LOG_LEVEL::DEBUG, "CreateHostResource : Width : %d, Height : %d, Format : %d",
|
||||
|
@ -5983,7 +6000,7 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
// So, we need to do this differently - we need to step up to the containing VolumeTexture,
|
||||
// and retrieve and convert all of it's GetVolumeLevel() slices.
|
||||
pNewHostVolume = nullptr;
|
||||
// SetHostVolume(pResource, pNewHostVolume, iTextureStage);
|
||||
// SetHostVolume(pResource, _9_11(pNewHostVolume, pNewHostResource), iTextureStage);
|
||||
// EmuLog(LOG_LEVEL::DEBUG, "CreateHostResource : Successfully created %s (0x%.08X, 0x%.08X)",
|
||||
// ResourceTypeName, pResource, pNewHostVolume);
|
||||
break;
|
||||
|
@ -6049,9 +6066,9 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
}
|
||||
#endif
|
||||
|
||||
SetHostTexture(pResource, pNewHostTexture.Get(), iTextureStage);
|
||||
SetHostTexture(pResource, _9_11(pNewHostTexture, pNewHostResource).Get(), iTextureStage);
|
||||
EmuLog(LOG_LEVEL::DEBUG, "CreateHostResource : Successfully created %s (0x%.08X, 0x%.08X)",
|
||||
ResourceTypeName, pResource, pNewHostTexture.Get());
|
||||
ResourceTypeName, pResource, _9_11(pNewHostTexture, pNewHostResource).Get());
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -6091,7 +6108,7 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
}
|
||||
#endif
|
||||
|
||||
SetHostVolumeTexture(pResource, pNewHostVolumeTexture.Get(), iTextureStage);
|
||||
SetHostVolumeTexture(pResource, _9_11(pNewHostVolumeTexture, pNewHostResource).Get(), iTextureStage);
|
||||
EmuLog(LOG_LEVEL::DEBUG, "CreateHostResource : Successfully created %s (0x%.08X, 0x%.08X)",
|
||||
ResourceTypeName, pResource, pNewHostVolumeTexture.Get());
|
||||
break;
|
||||
|
@ -6138,7 +6155,7 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
DXGetErrorString(hRet), DXGetErrorDescription(hRet)*/);
|
||||
}
|
||||
|
||||
SetHostCubeTexture(pResource, pNewHostCubeTexture.Get(), iTextureStage);
|
||||
SetHostCubeTexture(pResource, _9_11(pNewHostCubeTexture, pNewHostResource).Get(), iTextureStage);
|
||||
// TODO : Cube face surfaces can be used as a render-target,
|
||||
// so we need to associate host surfaces to each surface of this cube texture
|
||||
// However, we can't do it here: On Xbox, a new Surface is created on every call to
|
||||
|
@ -6194,14 +6211,15 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
DWORD mip2dSize = dwMipRowPitch * numRows; // the size of one layer of the mip slice
|
||||
DWORD mipSlicePitch = mip2dSize * pxMipDepth; // the total size of the mip slice (depth is only > 1 for volume textures)
|
||||
|
||||
// Lock the host resource
|
||||
#ifdef CXBX_USE_D3D11
|
||||
// Map the host resource
|
||||
UINT Subresource = (face * dwMipMapLevels) + mipmap_level;
|
||||
// See https://docs.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-resources-subresources
|
||||
D3D11_MAPPED_SUBRESOURCE MappedResource;
|
||||
|
||||
hRet = g_pD3DDeviceContext->Map(pNewHostResource, Subresource, D3D11_MAP_WRITE_DISCARD, D3D11_MAP_FLAG_DO_NOT_WAIT, &MappedResource);
|
||||
#else
|
||||
// Lock the host resource
|
||||
D3DLOCKED_RECT LockedRect = {};
|
||||
D3DLOCKED_BOX LockedBox = {};
|
||||
DWORD D3DLockFlags = D3DLOCK_NOSYSLOCK;
|
||||
|
@ -6313,10 +6331,11 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
|||
}
|
||||
}
|
||||
|
||||
// Unlock the host resource
|
||||
#ifdef CXBX_USE_D3D11
|
||||
// Unmap the host resource
|
||||
g_pD3DDeviceContext->Unmap(pNewHostResource, Subresource);
|
||||
#else
|
||||
// Unlock the host resource
|
||||
switch (XboxResourceType) {
|
||||
case xbox::X_D3DRTYPE_SURFACE:
|
||||
hRet = pNewHostSurface->UnlockRect();
|
||||
|
|
|
@ -878,72 +878,72 @@ static const FormatInfo FormatInfos[] = {
|
|||
// D3D9 D3FFORMAT to D3D11 DXGI_FORMAT mapping : https://docs.microsoft.com/en-us/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-legacy-formats
|
||||
#define DXGI_FORMAT_NOT_AVAILABLE DXGI_FORMAT_UNKNOWN // TODO : Replace below occurences with a suitable format and corresponding conversion
|
||||
|
||||
/* 0x00 X_D3DFMT_L8 */ { 8, Swzzld, ______L8, _9_11(D3DFMT_L8, DXGI_FORMAT_R8_UNORM) },
|
||||
/* 0x01 X_D3DFMT_AL8 */ { 8, Swzzld, _____AL8, _9_11(D3DFMT_L8, DXGI_FORMAT_R8_UNORM) , Texture, "X_D3DFMT_AL8 -> D3DFMT_L8" },
|
||||
/* 0x02 X_D3DFMT_A1R5G5B5 */ { 16, Swzzld, A1R5G5B5, _9_11(D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM)},
|
||||
/* 0x03 X_D3DFMT_X1R5G5B5 */ { 16, Swzzld, X1R5G5B5, _9_11(D3DFMT_X1R5G5B5, DXGI_FORMAT_NOT_AVAILABLE) , RenderTarget },
|
||||
/* 0x04 X_D3DFMT_A4R4G4B4 */ { 16, Swzzld, A4R4G4B4, _9_11(D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM)},
|
||||
/* 0x05 X_D3DFMT_R5G6B5 */ { 16, Swzzld, __R5G6B5, _9_11(D3DFMT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM) , RenderTarget },
|
||||
/* 0x06 X_D3DFMT_A8R8G8B8 */ { 32, Swzzld, A8R8G8B8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM), RenderTarget },
|
||||
/* 0x07 X_D3DFMT_X8R8G8B8 */ { 32, Swzzld, X8R8G8B8, _9_11(D3DFMT_X8R8G8B8, DXGI_FORMAT_B8G8R8X8_UNORM), RenderTarget }, // Alias : X_D3DFMT_X8L8V8U8
|
||||
/* 0x00 X_D3DFMT_L8 */ { 8, Swzzld, ______L8, _9_11(D3DFMT_L8, DXGI_FORMAT_R8_UNORM) },
|
||||
/* 0x01 X_D3DFMT_AL8 */ { 8, Swzzld, _____AL8, _9_11(D3DFMT_L8, DXGI_FORMAT_R8_UNORM) , Texture, "X_D3DFMT_AL8 -> D3DFMT_L8" },
|
||||
/* 0x02 X_D3DFMT_A1R5G5B5 */ { 16, Swzzld, A1R5G5B5, _9_11(D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM) },
|
||||
/* 0x03 X_D3DFMT_X1R5G5B5 */ { 16, Swzzld, X1R5G5B5, _9_11(D3DFMT_X1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM) , RenderTarget }, // D3D11 TODO : Default A in shader
|
||||
/* 0x04 X_D3DFMT_A4R4G4B4 */ { 16, Swzzld, A4R4G4B4, _9_11(D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM) },
|
||||
/* 0x05 X_D3DFMT_R5G6B5 */ { 16, Swzzld, __R5G6B5, _9_11(D3DFMT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM) , RenderTarget },
|
||||
/* 0x06 X_D3DFMT_A8R8G8B8 */ { 32, Swzzld, A8R8G8B8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM) , RenderTarget },
|
||||
/* 0x07 X_D3DFMT_X8R8G8B8 */ { 32, Swzzld, X8R8G8B8, _9_11(D3DFMT_X8R8G8B8, DXGI_FORMAT_B8G8R8X8_UNORM) , RenderTarget }, // Alias : X_D3DFMT_X8L8V8U8
|
||||
/* 0x08 undefined */ {},
|
||||
/* 0x09 undefined */ {},
|
||||
/* 0x0A undefined */ {},
|
||||
/* 0x0B X_D3DFMT_P8 */ { 8, Swzzld, ______P8, _9_11(D3DFMT_P8, DXGI_FORMAT_R8_UINT) , Texture, "X_D3DFMT_P8 -> D3DFMT_L8" }, // 8-bit palletized
|
||||
/* 0x0C X_D3DFMT_DXT1 */ { 4, Cmprsd, ____DXT1, _9_11(D3DFMT_DXT1, DXGI_FORMAT_BC1_UNORM) }, // opaque/one-bit alpha // NOTE : DXT1 is half byte per pixel, so divide Size and Pitch calculations by two!
|
||||
/* 0x0B X_D3DFMT_P8 */ { 8, Swzzld, ______P8, _9_11(D3DFMT_P8, DXGI_FORMAT_R8_UINT) , Texture, "X_D3DFMT_P8 -> D3DFMT_L8" }, // 8-bit palletized
|
||||
/* 0x0C X_D3DFMT_DXT1 */ { 4, Cmprsd, ____DXT1, _9_11(D3DFMT_DXT1, DXGI_FORMAT_BC1_UNORM) }, // opaque/one-bit alpha // NOTE : DXT1 is half byte per pixel, so divide Size and Pitch calculations by two!
|
||||
/* 0x0D undefined */ {},
|
||||
/* 0x0E X_D3DFMT_DXT3 */ { 8, Cmprsd, ____DXT3, _9_11(D3DFMT_DXT3, DXGI_FORMAT_BC2_UNORM) }, // Alias : X_D3DFMT_DXT2 // linear alpha
|
||||
/* 0x0F X_D3DFMT_DXT5 */ { 8, Cmprsd, ____DXT5, _9_11(D3DFMT_DXT5, DXGI_FORMAT_BC3_UNORM) }, // Alias : X_D3DFMT_DXT4 // interpolated alpha
|
||||
/* 0x10 X_D3DFMT_LIN_A1R5G5B5 */ { 16, Linear, A1R5G5B5, _9_11(D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM)},
|
||||
/* 0x11 X_D3DFMT_LIN_R5G6B5 */ { 16, Linear, __R5G6B5, _9_11(D3DFMT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM) , RenderTarget },
|
||||
/* 0x12 X_D3DFMT_LIN_A8R8G8B8 */ { 32, Linear, A8R8G8B8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM), RenderTarget },
|
||||
/* 0x13 X_D3DFMT_LIN_L8 */ { 8, Linear, ______L8, _9_11(D3DFMT_L8, DXGI_FORMAT_R8_UNORM) , RenderTarget },
|
||||
/* 0x0E X_D3DFMT_DXT3 */ { 8, Cmprsd, ____DXT3, _9_11(D3DFMT_DXT3, DXGI_FORMAT_BC2_UNORM) }, // Alias : X_D3DFMT_DXT2 // linear alpha
|
||||
/* 0x0F X_D3DFMT_DXT5 */ { 8, Cmprsd, ____DXT5, _9_11(D3DFMT_DXT5, DXGI_FORMAT_BC3_UNORM) }, // Alias : X_D3DFMT_DXT4 // interpolated alpha
|
||||
/* 0x10 X_D3DFMT_LIN_A1R5G5B5 */ { 16, Linear, A1R5G5B5, _9_11(D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM) },
|
||||
/* 0x11 X_D3DFMT_LIN_R5G6B5 */ { 16, Linear, __R5G6B5, _9_11(D3DFMT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM) , RenderTarget },
|
||||
/* 0x12 X_D3DFMT_LIN_A8R8G8B8 */ { 32, Linear, A8R8G8B8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM) , RenderTarget },
|
||||
/* 0x13 X_D3DFMT_LIN_L8 */ { 8, Linear, ______L8, _9_11(D3DFMT_L8, DXGI_FORMAT_R8_UNORM) , RenderTarget },
|
||||
/* 0x14 undefined */ {},
|
||||
/* 0x15 undefined */ {},
|
||||
/* 0x16 X_D3DFMT_LIN_R8B8 */ { 16, Linear, ____R8B8, _9_11(D3DFMT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM) , Texture, "X_D3DFMT_LIN_R8B8 -> D3DFMT_R5G6B5" },
|
||||
/* 0x17 X_D3DFMT_LIN_G8B8 */ { 16, Linear, ____G8B8, _9_11(D3DFMT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM) , RenderTarget, "X_D3DFMT_LIN_G8B8 -> D3DFMT_R5G6B5" }, // Alias : X_D3DFMT_LIN_V8U8
|
||||
/* 0x16 X_D3DFMT_LIN_R8B8 */ { 16, Linear, ____R8B8, _9_11(D3DFMT_A8L8, DXGI_FORMAT_R8G8_UNORM) , Texture, "X_D3DFMT_LIN_R8B8 -> D3DFMT_R5G6B5" },
|
||||
/* 0x17 X_D3DFMT_LIN_G8B8 */ { 16, Linear, ____G8B8, _9_11(D3DFMT_A8L8, DXGI_FORMAT_R8G8_UNORM) , RenderTarget, "X_D3DFMT_LIN_G8B8 -> D3DFMT_R5G6B5" }, // Alias : X_D3DFMT_LIN_V8U8
|
||||
/* 0x18 undefined */ {},
|
||||
/* 0x19 X_D3DFMT_A8 */ { 8, Swzzld, ______A8, _9_11(D3DFMT_A8, DXGI_FORMAT_A8_UNORM) , Texture, "X_D3DFMT_A8 -> D3DFMT_A8R8G8B8" }, // D3D9 sets RGB = 0 instead of 1
|
||||
/* 0x1A X_D3DFMT_A8L8 */ { 16, Swzzld, ____A8L8, _9_11(D3DFMT_A8L8, DXGI_FORMAT_NOT_AVAILABLE) },
|
||||
/* 0x1B X_D3DFMT_LIN_AL8 */ { 8, Linear, _____AL8, _9_11(D3DFMT_L8, DXGI_FORMAT_R8_UNORM) , Texture, "X_D3DFMT_LIN_AL8 -> D3DFMT_L8" },
|
||||
/* 0x1C X_D3DFMT_LIN_X1R5G5B5 */ { 16, Linear, X1R5G5B5, _9_11(D3DFMT_X1R5G5B5, DXGI_FORMAT_NOT_AVAILABLE) , RenderTarget },
|
||||
/* 0x1D X_D3DFMT_LIN_A4R4G4B4 */ { 16, Linear, A4R4G4B4, _9_11(D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM)},
|
||||
/* 0x1E X_D3DFMT_LIN_X8R8G8B8 */ { 32, Linear, X8R8G8B8, _9_11(D3DFMT_X8R8G8B8, DXGI_FORMAT_B8G8R8X8_UNORM), RenderTarget }, // Alias : X_D3DFMT_LIN_X8L8V8U8
|
||||
/* 0x1F X_D3DFMT_LIN_A8 */ { 8, Linear, ______A8, _9_11(D3DFMT_A8, DXGI_FORMAT_A8_UNORM) , Texture, "X_D3DFMT_LIN_A8 -> D3DFMT_A8R8G8B8" }, // D3D9 sets RGB = 0 instead of 1
|
||||
/* 0x20 X_D3DFMT_LIN_A8L8 */ { 16, Linear, ____A8L8, _9_11(D3DFMT_A8L8, DXGI_FORMAT_NOT_AVAILABLE) },
|
||||
/* 0x19 X_D3DFMT_A8 */ { 8, Swzzld, ______A8, _9_11(D3DFMT_A8, DXGI_FORMAT_A8_UNORM) , Texture, "X_D3DFMT_A8 -> D3DFMT_A8R8G8B8" }, // D3D9 sets RGB = 0 instead of 1
|
||||
/* 0x1A X_D3DFMT_A8L8 */ { 16, Swzzld, ____A8L8, _9_11(D3DFMT_A8L8, DXGI_FORMAT_R8G8_UNORM) },
|
||||
/* 0x1B X_D3DFMT_LIN_AL8 */ { 8, Linear, _____AL8, _9_11(D3DFMT_L8, DXGI_FORMAT_R8_UNORM) , Texture, "X_D3DFMT_LIN_AL8 -> D3DFMT_L8" },
|
||||
/* 0x1C X_D3DFMT_LIN_X1R5G5B5 */ { 16, Linear, X1R5G5B5, _9_11(D3DFMT_X1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM) , RenderTarget }, // D3D11 TODO : Default A in shader
|
||||
/* 0x1D X_D3DFMT_LIN_A4R4G4B4 */ { 16, Linear, A4R4G4B4, _9_11(D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM) },
|
||||
/* 0x1E X_D3DFMT_LIN_X8R8G8B8 */ { 32, Linear, X8R8G8B8, _9_11(D3DFMT_X8R8G8B8, DXGI_FORMAT_B8G8R8X8_UNORM) , RenderTarget }, // Alias : X_D3DFMT_LIN_X8L8V8U8
|
||||
/* 0x1F X_D3DFMT_LIN_A8 */ { 8, Linear, ______A8, _9_11(D3DFMT_A8, DXGI_FORMAT_A8_UNORM) , Texture, "X_D3DFMT_LIN_A8 -> D3DFMT_A8R8G8B8" }, // D3D9 sets RGB = 0 instead of 1
|
||||
/* 0x20 X_D3DFMT_LIN_A8L8 */ { 16, Linear, ____A8L8, _9_11(D3DFMT_A8L8, DXGI_FORMAT_R8G8_UNORM) },
|
||||
/* 0x21 undefined */ {},
|
||||
/* 0x22 undefined */ {},
|
||||
/* 0x23 undefined */ {},
|
||||
/* 0x24 X_D3DFMT_YUY2 */ { 16, Linear, ____YUY2, _9_11(D3DFMT_YUY2, DXGI_FORMAT_YUY2) }, // DXGI_FORMAT_NOT_AVAILABLE ?
|
||||
/* 0x25 X_D3DFMT_UYVY */ { 16, Linear, ____UYVY, _9_11(D3DFMT_UYVY, DXGI_FORMAT_NOT_AVAILABLE) },
|
||||
/* 0x24 X_D3DFMT_YUY2 */ { 16, Linear, ____YUY2, _9_11(D3DFMT_YUY2, DXGI_FORMAT_YUY2) }, // DXGI_FORMAT_NOT_AVAILABLE ?
|
||||
/* 0x25 X_D3DFMT_UYVY */ { 16, Linear, ____UYVY, _9_11(D3DFMT_UYVY, DXGI_FORMAT_NOT_AVAILABLE) },
|
||||
/* 0x26 undefined */ {},
|
||||
/* 0x27 X_D3DFMT_L6V5U5 */ { 16, Swzzld, __R6G5B5, _9_11(D3DFMT_L6V5U5, DXGI_FORMAT_NOT_AVAILABLE) }, // Alias : X_D3DFMT_R6G5B5 // XQEMU NOTE : This might be signed
|
||||
/* 0x28 X_D3DFMT_V8U8 */ { 16, Swzzld, ____G8B8, _9_11(D3DFMT_V8U8, DXGI_FORMAT_R8G8_SNORM) }, // Alias : X_D3DFMT_G8B8 // XQEMU NOTE : This might be signed
|
||||
/* 0x29 X_D3DFMT_R8B8 */ { 16, Swzzld, ____R8B8, _9_11(D3DFMT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM) , Texture, "X_D3DFMT_R8B8 -> D3DFMT_R5G6B5" }, // XQEMU NOTE : This might be signed
|
||||
/* 0x2A X_D3DFMT_D24S8 */ { 32, Swzzld, NoCmpnts, _9_11(D3DFMT_D24S8, DXGI_FORMAT_NOT_AVAILABLE) , DepthBuffer },
|
||||
/* 0x2B X_D3DFMT_F24S8 */ { 32, Swzzld, NoCmpnts, _9_11(D3DFMT_D24FS8, DXGI_FORMAT_NOT_AVAILABLE) , DepthBuffer },
|
||||
/* 0x2C X_D3DFMT_D16 */ { 16, Swzzld, NoCmpnts, _9_11(D3DFMT_D16, DXGI_FORMAT_D16_UNORM) , DepthBuffer }, // Note : X_D3DFMT_D16 is always lockable on Xbox, D3DFMT_D16 on host is not, but D3DFMT_D16_LOCKABLE often fails SetRenderTarget.
|
||||
/* 0x2D X_D3DFMT_F16 */ { 16, Swzzld, NoCmpnts, _9_11(D3DFMT_D16, DXGI_FORMAT_D16_UNORM) , DepthBuffer, "X_D3DFMT_F16 -> D3DFMT_D16" }, // HACK : PC doesn't have D3DFMT_F16 (Float vs Int) // TODO : Use D3DFMT_R16F?
|
||||
/* 0x2E X_D3DFMT_LIN_D24S8 */ { 32, Linear, NoCmpnts, _9_11(D3DFMT_D24S8, DXGI_FORMAT_NOT_AVAILABLE) , DepthBuffer },
|
||||
/* 0x2F X_D3DFMT_LIN_F24S8 */ { 32, Linear, NoCmpnts, _9_11(D3DFMT_D24FS8, DXGI_FORMAT_NOT_AVAILABLE) , DepthBuffer },
|
||||
/* 0x30 X_D3DFMT_LIN_D16 */ { 16, Linear, NoCmpnts, _9_11(D3DFMT_D16, DXGI_FORMAT_D16_UNORM) , DepthBuffer }, // Note : X_D3DFMT_D16 is always lockable on Xbox, D3DFMT_D16 on host is not, but D3DFMT_D16_LOCKABLE often fails SetRenderTarget.
|
||||
/* 0x31 X_D3DFMT_LIN_F16 */ { 16, Linear, NoCmpnts, _9_11(D3DFMT_D16, DXGI_FORMAT_D16_UNORM) , DepthBuffer, "X_D3DFMT_LIN_F16 -> D3DFMT_D16" }, // HACK : PC doesn't have D3DFMT_F16 (Float vs Int) // TODO : Use D3DFMT_R16F?
|
||||
/* 0x32 X_D3DFMT_L16 */ { 16, Swzzld, _____L16, _9_11(D3DFMT_L16, DXGI_FORMAT_R16_UNORM) },
|
||||
/* 0x33 X_D3DFMT_V16U16 */ { 32, Swzzld, NoCmpnts, _9_11(D3DFMT_V16U16, DXGI_FORMAT_R16G16_SNORM) },
|
||||
/* 0x27 X_D3DFMT_L6V5U5 */ { 16, Swzzld, __R6G5B5, _9_11(D3DFMT_L6V5U5, DXGI_FORMAT_NOT_AVAILABLE) }, // Alias : X_D3DFMT_R6G5B5 // XQEMU NOTE : This might be signed
|
||||
/* 0x28 X_D3DFMT_V8U8 */ { 16, Swzzld, ____G8B8, _9_11(D3DFMT_V8U8, DXGI_FORMAT_R8G8_SNORM) }, // Alias : X_D3DFMT_G8B8 // XQEMU NOTE : This might be signed
|
||||
/* 0x29 X_D3DFMT_R8B8 */ { 16, Swzzld, ____R8B8, _9_11(D3DFMT_A8L8, DXGI_FORMAT_R8G8_UNORM) , Texture, "X_D3DFMT_R8B8 -> D3DFMT_R5G6B5" }, // XQEMU NOTE : This might be signed
|
||||
/* 0x2A X_D3DFMT_D24S8 */ { 32, Swzzld, NoCmpnts, _9_11(D3DFMT_D24S8, DXGI_FORMAT_D24_UNORM_S8_UINT), DepthBuffer },
|
||||
/* 0x2B X_D3DFMT_F24S8 */ { 32, Swzzld, NoCmpnts, _9_11(D3DFMT_D24FS8, DXGI_FORMAT_R24G8_TYPELESS) , DepthBuffer },
|
||||
/* 0x2C X_D3DFMT_D16 */ { 16, Swzzld, NoCmpnts, _9_11(D3DFMT_D16, DXGI_FORMAT_D16_UNORM) , DepthBuffer }, // Note : X_D3DFMT_D16 is always lockable on Xbox, D3DFMT_D16 on host is not, but D3DFMT_D16_LOCKABLE often fails SetRenderTarget.
|
||||
/* 0x2D X_D3DFMT_F16 */ { 16, Swzzld, NoCmpnts, _9_11(D3DFMT_R16F, DXGI_FORMAT_R16_FLOAT) , DepthBuffer, "X_D3DFMT_F16 -> D3DFMT_R16F" }, // HACK : PC doesn't have D3DFMT_F16 (Float vs Int) // TODO : Use D3DFMT_R16F?
|
||||
/* 0x2E X_D3DFMT_LIN_D24S8 */ { 32, Linear, NoCmpnts, _9_11(D3DFMT_D24S8, DXGI_FORMAT_D24_UNORM_S8_UINT), DepthBuffer },
|
||||
/* 0x2F X_D3DFMT_LIN_F24S8 */ { 32, Linear, NoCmpnts, _9_11(D3DFMT_D24FS8, DXGI_FORMAT_R24G8_TYPELESS) , DepthBuffer },
|
||||
/* 0x30 X_D3DFMT_LIN_D16 */ { 16, Linear, NoCmpnts, _9_11(D3DFMT_D16, DXGI_FORMAT_D16_UNORM) , DepthBuffer }, // Note : X_D3DFMT_D16 is always lockable on Xbox, D3DFMT_D16 on host is not, but D3DFMT_D16_LOCKABLE often fails SetRenderTarget.
|
||||
/* 0x31 X_D3DFMT_LIN_F16 */ { 16, Linear, NoCmpnts, _9_11(D3DFMT_R16F, DXGI_FORMAT_R16_FLOAT) , DepthBuffer, "X_D3DFMT_LIN_F16 -> D3DFMT_R16F" }, // HACK : PC doesn't have D3DFMT_F16 (Float vs Int) // TODO : Use D3DFMT_R16F?
|
||||
/* 0x32 X_D3DFMT_L16 */ { 16, Swzzld, _____L16, _9_11(D3DFMT_L16, DXGI_FORMAT_R16_UNORM) },
|
||||
/* 0x33 X_D3DFMT_V16U16 */ { 32, Swzzld, NoCmpnts, _9_11(D3DFMT_V16U16, DXGI_FORMAT_R16G16_SNORM) },
|
||||
/* 0x34 undefined */ {},
|
||||
/* 0x35 X_D3DFMT_LIN_L16 */ { 16, Linear, _____L16, _9_11(D3DFMT_L16, DXGI_FORMAT_R16_UNORM) },
|
||||
/* 0x36 X_D3DFMT_LIN_V16U16 */ { 32, Linear, NoCmpnts, _9_11(D3DFMT_V16U16, DXGI_FORMAT_R16G16_SNORM) }, // Note : Seems unused on Xbox
|
||||
/* 0x37 X_D3DFMT_LIN_L6V5U5 */ { 16, Linear, __R6G5B5, _9_11(D3DFMT_L6V5U5, DXGI_FORMAT_NOT_AVAILABLE) }, // Alias : X_D3DFMT_LIN_R6G5B5
|
||||
/* 0x38 X_D3DFMT_R5G5B5A1 */ { 16, Swzzld, R5G5B5A1, _9_11(D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM), Texture, "X_D3DFMT_R5G5B5A1 -> D3DFMT_A1R5G5B5" },
|
||||
/* 0x39 X_D3DFMT_R4G4B4A4 */ { 16, Swzzld, R4G4B4A4, _9_11(D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM), Texture, "X_D3DFMT_R4G4B4A4 -> D3DFMT_A4R4G4B4" },
|
||||
/* 0x3A X_D3DFMT_Q8W8V8U8 */ { 32, Swzzld, A8B8G8R8, _9_11(D3DFMT_Q8W8V8U8, DXGI_FORMAT_R8G8B8A8_SNORM)}, // Alias : X_D3DFMT_A8B8G8R8 // Note : D3DFMT_A8B8G8R8=32 D3DFMT_Q8W8V8U8=63 // TODO : Needs testcase.
|
||||
/* 0x3B X_D3DFMT_B8G8R8A8 */ { 32, Swzzld, B8G8R8A8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM), Texture, "X_D3DFMT_B8G8R8A8 -> D3DFMT_A8R8G8B8" },
|
||||
/* 0x3C X_D3DFMT_R8G8B8A8 */ { 32, Swzzld, R8G8B8A8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM), Texture, "X_D3DFMT_R8G8B8A8 -> D3DFMT_A8R8G8B8" },
|
||||
/* 0x3D X_D3DFMT_LIN_R5G5B5A1 */ { 16, Linear, R5G5B5A1, _9_11(D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM), Texture, "X_D3DFMT_LIN_R5G5B5A1 -> D3DFMT_A1R5G5B5" },
|
||||
/* 0x3E X_D3DFMT_LIN_R4G4B4A4 */ { 16, Linear, R4G4B4A4, _9_11(D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM), Texture, "X_D3DFMT_LIN_R4G4B4A4 -> D3DFMT_A4R4G4B4" },
|
||||
/* 0x3F X_D3DFMT_LIN_A8B8G8R8 */ { 32, Linear, A8B8G8R8, _9_11(D3DFMT_A8B8G8R8, DXGI_FORMAT_R8G8B8A8_UNORM)}, // Note : D3DFMT_A8B8G8R8=32 D3DFMT_Q8W8V8U8=63 // TODO : Needs testcase.
|
||||
/* 0x40 X_D3DFMT_LIN_B8G8R8A8 */ { 32, Linear, B8G8R8A8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM), Texture, "X_D3DFMT_LIN_B8G8R8A8 -> D3DFMT_A8R8G8B8" },
|
||||
/* 0x41 X_D3DFMT_LIN_R8G8B8A8 */ { 32, Linear, R8G8B8A8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM), Texture, "X_D3DFMT_LIN_R8G8B8A8 -> D3DFMT_A8R8G8B8" },
|
||||
/* 0x35 X_D3DFMT_LIN_L16 */ { 16, Linear, _____L16, _9_11(D3DFMT_L16, DXGI_FORMAT_R16_UNORM) },
|
||||
/* 0x36 X_D3DFMT_LIN_V16U16 */ { 32, Linear, NoCmpnts, _9_11(D3DFMT_V16U16, DXGI_FORMAT_R16G16_SNORM) }, // Note : Seems unused on Xbox
|
||||
/* 0x37 X_D3DFMT_LIN_L6V5U5 */ { 16, Linear, __R6G5B5, _9_11(D3DFMT_L6V5U5, DXGI_FORMAT_NOT_AVAILABLE) }, // Alias : X_D3DFMT_LIN_R6G5B5
|
||||
/* 0x38 X_D3DFMT_R5G5B5A1 */ { 16, Swzzld, R5G5B5A1, _9_11(D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM) , Texture, "X_D3DFMT_R5G5B5A1 -> D3DFMT_A1R5G5B5" },
|
||||
/* 0x39 X_D3DFMT_R4G4B4A4 */ { 16, Swzzld, R4G4B4A4, _9_11(D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM) , Texture, "X_D3DFMT_R4G4B4A4 -> D3DFMT_A4R4G4B4" },
|
||||
/* 0x3A X_D3DFMT_Q8W8V8U8 */ { 32, Swzzld, A8B8G8R8, _9_11(D3DFMT_Q8W8V8U8, DXGI_FORMAT_R8G8B8A8_SNORM) }, // Alias : X_D3DFMT_A8B8G8R8 // Note : D3DFMT_A8B8G8R8=32 D3DFMT_Q8W8V8U8=63 // TODO : Needs testcase.
|
||||
/* 0x3B X_D3DFMT_B8G8R8A8 */ { 32, Swzzld, B8G8R8A8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM) , Texture, "X_D3DFMT_B8G8R8A8 -> D3DFMT_A8R8G8B8" },
|
||||
/* 0x3C X_D3DFMT_R8G8B8A8 */ { 32, Swzzld, R8G8B8A8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM) , Texture, "X_D3DFMT_R8G8B8A8 -> D3DFMT_A8R8G8B8" },
|
||||
/* 0x3D X_D3DFMT_LIN_R5G5B5A1 */ { 16, Linear, R5G5B5A1, _9_11(D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM) , Texture, "X_D3DFMT_LIN_R5G5B5A1 -> D3DFMT_A1R5G5B5" },
|
||||
/* 0x3E X_D3DFMT_LIN_R4G4B4A4 */ { 16, Linear, R4G4B4A4, _9_11(D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM) , Texture, "X_D3DFMT_LIN_R4G4B4A4 -> D3DFMT_A4R4G4B4" },
|
||||
/* 0x3F X_D3DFMT_LIN_A8B8G8R8 */ { 32, Linear, A8B8G8R8, _9_11(D3DFMT_A8B8G8R8, DXGI_FORMAT_R8G8B8A8_UNORM) }, // Note : D3DFMT_A8B8G8R8=32 D3DFMT_Q8W8V8U8=63 // TODO : Needs testcase.
|
||||
/* 0x40 X_D3DFMT_LIN_B8G8R8A8 */ { 32, Linear, B8G8R8A8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM) , Texture, "X_D3DFMT_LIN_B8G8R8A8 -> D3DFMT_A8R8G8B8" },
|
||||
/* 0x41 X_D3DFMT_LIN_R8G8B8A8 */ { 32, Linear, R8G8B8A8, _9_11(D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM) , Texture, "X_D3DFMT_LIN_R8G8B8A8 -> D3DFMT_A8R8G8B8" },
|
||||
#if 0
|
||||
/* 0x42 to 0x63 undefined */ {},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},
|
||||
/* 0x64 X_D3DFMT_VERTEXDATA */ { 8, Linear, NoCmpnts, D3DFMT_VERTEXDATA },
|
||||
|
|
Loading…
Reference in New Issue