diff --git a/DDrawCompat/D3dDdi/Adapter.cpp b/DDrawCompat/D3dDdi/Adapter.cpp index 2db54ea..580f518 100644 --- a/DDrawCompat/D3dDdi/Adapter.cpp +++ b/DDrawCompat/D3dDdi/Adapter.cpp @@ -129,15 +129,27 @@ namespace D3dDdi for (auto& formatOp : info.formatOps) { + if (D3DDDIFMT_P8 == formatOp.first) + { + continue; + } + auto fixedFormatOp = formatOp.second; if (isEmulatedRenderTargetFormat(formatOp.first, info.formatOps)) { fixedFormatOp.Operations |= FORMATOP_OFFSCREEN_RENDERTARGET; } - if (D3DDDIFMT_P8 == formatOp.first && Config::palettizedTextures.get()) + if (D3DDDIFMT_L8 == formatOp.first) { - fixedFormatOp.Operations |= FORMATOP_TEXTURE | FORMATOP_CUBETEXTURE; + auto p8FormatOp = formatOp.second; + p8FormatOp.Format = D3DDDIFMT_P8; + p8FormatOp.Operations |= FORMATOP_OFFSCREENPLAIN; + if (!Config::palettizedTextures.get()) + { + p8FormatOp.Operations &= ~(FORMATOP_TEXTURE | FORMATOP_VOLUMETEXTURE | FORMATOP_CUBETEXTURE); + } + fixedFormatOps[D3DDDIFMT_P8] = p8FormatOp; } if (D3DDDIFMT_D24X4S4 == formatOp.first || D3DDDIFMT_X4S4D24 == formatOp.first) diff --git a/DDrawCompat/D3dDdi/Resource.cpp b/DDrawCompat/D3dDdi/Resource.cpp index 5c171ac..90fe184 100644 --- a/DDrawCompat/D3dDdi/Resource.cpp +++ b/DDrawCompat/D3dDdi/Resource.cpp @@ -513,7 +513,7 @@ namespace D3dDdi if (D3DDDIFMT_P8 == m_fixedData.Format) { - data.Color <<= 16; + data.Color |= data.Color << 16; } prepareForBltDst(data.hResource, data.SubResourceIndex, data.DstRect); diff --git a/DDrawCompat/D3dDdi/SurfaceRepository.cpp b/DDrawCompat/D3dDdi/SurfaceRepository.cpp index 3bc1db5..071fa87 100644 --- a/DDrawCompat/D3dDdi/SurfaceRepository.cpp +++ b/DDrawCompat/D3dDdi/SurfaceRepository.cpp @@ -41,6 +41,11 @@ namespace D3dDdi m_releasedSurfaces.clear(); CompatPtr surface; + if (D3DDDIFMT_P8 == format) + { + format = D3DDDIFMT_L8; + } + DDSURFACEDESC2 desc = {}; desc.dwSize = sizeof(desc); desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS;