Do not try to resolve the palettized texture if there is no palette bound
Fixes a crash in DRIV3R
This commit is contained in:
parent
4d8c4fbb68
commit
7af503b90c
|
@ -5956,14 +5956,27 @@ void CreateHostResource(xbox::X_D3DResource *pResource, DWORD D3DUsage, int iTex
|
||||||
if (bConvertToARGB) {
|
if (bConvertToARGB) {
|
||||||
EmuLog(LOG_LEVEL::DEBUG, "Unsupported texture format, expanding to D3DFMT_A8R8G8B8");
|
EmuLog(LOG_LEVEL::DEBUG, "Unsupported texture format, expanding to D3DFMT_A8R8G8B8");
|
||||||
|
|
||||||
|
// In case where there is a palettized texture without a palette attached,
|
||||||
|
// fill it with zeroes for now. This might not be correct, but it prevents a crash.
|
||||||
|
// Test case: DRIV3R
|
||||||
|
bool skipDueToNoPalette = false;
|
||||||
|
if (X_Format == xbox::X_D3DFMT_P8 && g_pXbox_Palette_Data[iTextureStage] == nullptr) {
|
||||||
|
LOG_TEST_CASE("Palettized texture bound without a palette");
|
||||||
|
|
||||||
|
memset(pDst, 0, dwDstRowPitch * dwMipHeight);
|
||||||
|
skipDueToNoPalette = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Convert a row at a time, using a libyuv-like callback approach :
|
// Convert a row at a time, using a libyuv-like callback approach :
|
||||||
if (!ConvertD3DTextureToARGBBuffer(
|
if (!skipDueToNoPalette) {
|
||||||
X_Format,
|
if (!ConvertD3DTextureToARGBBuffer(
|
||||||
pSrc, dwMipWidth, dwMipHeight, dwMipRowPitch, dwSrcSlicePitch,
|
X_Format,
|
||||||
pDst, dwDstRowPitch, dwDstSlicePitch,
|
pSrc, dwMipWidth, dwMipHeight, dwMipRowPitch, dwSrcSlicePitch,
|
||||||
dwDepth,
|
pDst, dwDstRowPitch, dwDstSlicePitch,
|
||||||
iTextureStage)) {
|
dwDepth,
|
||||||
CxbxKrnlCleanup("Unhandled conversion!");
|
iTextureStage)) {
|
||||||
|
CxbxKrnlCleanup("Unhandled conversion!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (bSwizzled) {
|
else if (bSwizzled) {
|
||||||
|
|
Loading…
Reference in New Issue