Simplified D3DDevice_GetBackBuffer and D3DDevice_SetRenderTarget
This seems to prevent exceptions for some titles
This commit is contained in:
parent
690451dfae
commit
da9a919a89
|
@ -1937,6 +1937,7 @@ static void EmuUnswizzleTextureStages()
|
||||||
|
|
||||||
HRESULT hRet;
|
HRESULT hRet;
|
||||||
XTL::IDirect3DTexture8 *pHostTexture = GetHostTexture(pPixelContainer);
|
XTL::IDirect3DTexture8 *pHostTexture = GetHostTexture(pPixelContainer);
|
||||||
|
|
||||||
if (pHostTexture != nullptr)
|
if (pHostTexture != nullptr)
|
||||||
{
|
{
|
||||||
hRet = pHostTexture->UnlockRect(0); // remove old lock
|
hRet = pHostTexture->UnlockRect(0); // remove old lock
|
||||||
|
@ -2809,7 +2810,13 @@ XTL::X_D3DSurface* WINAPI XTL::EMUPATCH(D3DDevice_GetBackBuffer2)
|
||||||
}
|
}
|
||||||
//*/
|
//*/
|
||||||
|
|
||||||
static X_D3DSurface *pBackBuffer = EmuNewD3DSurface();
|
|
||||||
|
static X_D3DSurface *pBackBuffer;
|
||||||
|
#if 1
|
||||||
|
pBackBuffer = g_pCachedRenderTarget;
|
||||||
|
pBackBuffer->Common++;
|
||||||
|
#else
|
||||||
|
pBackBuffer = EmuNewD3DSurface();
|
||||||
XTL::IDirect3DSurface8 *pNewHostSurface = nullptr;
|
XTL::IDirect3DSurface8 *pNewHostSurface = nullptr;
|
||||||
|
|
||||||
if(BackBuffer == -1)
|
if(BackBuffer == -1)
|
||||||
|
@ -2824,7 +2831,7 @@ XTL::X_D3DSurface* WINAPI XTL::EMUPATCH(D3DDevice_GetBackBuffer2)
|
||||||
SetHostSurface(pBackBuffer, pNewHostSurface);
|
SetHostSurface(pBackBuffer, pNewHostSurface);
|
||||||
// update data pointer
|
// update data pointer
|
||||||
pBackBuffer->Data = X_D3DRESOURCE_DATA_BACK_BUFFER;
|
pBackBuffer->Data = X_D3DRESOURCE_DATA_BACK_BUFFER;
|
||||||
|
#endif
|
||||||
return pBackBuffer;
|
return pBackBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8176,34 +8183,19 @@ HRESULT WINAPI XTL::EMUPATCH(D3DDevice_SetRenderTarget)
|
||||||
LOG_FUNC_ARG(pNewZStencil)
|
LOG_FUNC_ARG(pNewZStencil)
|
||||||
LOG_FUNC_END;
|
LOG_FUNC_END;
|
||||||
|
|
||||||
IDirect3DSurface8 *pPCRenderTarget = nullptr;
|
|
||||||
IDirect3DSurface8 *pPCNewZStencil = nullptr;
|
|
||||||
|
|
||||||
if(pRenderTarget != NULL)
|
if (pRenderTarget == NULL)
|
||||||
{
|
pRenderTarget = g_pCachedRenderTarget;
|
||||||
if(GetHostSurface(pRenderTarget) != nullptr)
|
|
||||||
{
|
|
||||||
EmuVerifyResourceIsRegistered(pRenderTarget);
|
EmuVerifyResourceIsRegistered(pRenderTarget);
|
||||||
pPCRenderTarget = GetHostSurface(pRenderTarget);
|
IDirect3DSurface8 *pPCRenderTarget = GetHostSurface(pRenderTarget);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pPCRenderTarget = GetHostSurface(g_pCachedRenderTarget);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
IDirect3DSurface8 *pPCNewZStencil = nullptr;
|
||||||
if(pNewZStencil != NULL)
|
if(pNewZStencil != NULL)
|
||||||
{
|
|
||||||
if(GetHostSurface(pNewZStencil) != nullptr)
|
|
||||||
{
|
{
|
||||||
EmuVerifyResourceIsRegistered(pNewZStencil);
|
EmuVerifyResourceIsRegistered(pNewZStencil);
|
||||||
pPCNewZStencil = GetHostSurface(pNewZStencil);
|
pPCNewZStencil = GetHostSurface(pNewZStencil);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
pPCNewZStencil = GetHostSurface(g_pCachedDepthStencil);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Follow that stencil!
|
// TODO: Follow that stencil!
|
||||||
HRESULT hRet = g_pD3DDevice8->SetRenderTarget(pPCRenderTarget, pPCNewZStencil);
|
HRESULT hRet = g_pD3DDevice8->SetRenderTarget(pPCRenderTarget, pPCNewZStencil);
|
||||||
|
|
Loading…
Reference in New Issue