From 50554a9f9b200c6df5dcb9fb5d78b27534b9a983 Mon Sep 17 00:00:00 2001 From: "a.miles.nz@gmail.com" Date: Fri, 1 Feb 2019 18:38:23 +1300 Subject: [PATCH] Check surface parent format matches surface format before creating it --- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index 906e382d0..5f41754fb 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -4677,7 +4677,10 @@ void CreateHostResource(XTL::X_D3DResource *pResource, DWORD D3DUsage, int iText case XTL::X_D3DRTYPE_SURFACE: { XTL::X_D3DSurface *pXboxSurface = (XTL::X_D3DSurface *)pResource; XTL::X_D3DTexture *pParentXboxTexture = (pXboxSurface) ? (XTL::X_D3DTexture *)pXboxSurface->Parent : xbnullptr; - if (pParentXboxTexture) { + + // Don't init the Parent if the Surface and Surface Parent formats differ + // Happens in some Outrun 2006 SetRenderTarget calls + if (pParentXboxTexture && (pXboxSurface->Format == pParentXboxTexture->Format)) { XTL::IDirect3DBaseTexture *pParentHostBaseTexture = GetHostBaseTexture(pParentXboxTexture, D3DUsage, iTextureStage); switch (pParentHostBaseTexture->GetType()) { case XTL::D3DRTYPE_VOLUMETEXTURE: {