mirror of https://github.com/PCSX2/pcsx2.git
GS: Clear current/merge textures on hardware reset
This commit is contained in:
parent
f6d997ca87
commit
4fd06b5ea8
|
@ -496,6 +496,10 @@ int GSfreeze(FreezeAction mode, freezeData* data)
|
||||||
}
|
}
|
||||||
else if (mode == FreezeAction::Load)
|
else if (mode == FreezeAction::Load)
|
||||||
{
|
{
|
||||||
|
// Since Defrost doesn't do a hardware reset (since it would be clearing
|
||||||
|
// local memory just before it's overwritten), we have to manually wipe
|
||||||
|
// out the current textures.
|
||||||
|
g_gs_device->ClearCurrent();
|
||||||
return g_gs_renderer->Defrost(data);
|
return g_gs_renderer->Defrost(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,6 +315,21 @@ void GSDevice::StretchRect(GSTexture* sTex, GSTexture* dTex, const GSVector4& dR
|
||||||
StretchRect(sTex, GSVector4(0, 0, 1, 1), dTex, dRect, shader, linear);
|
StretchRect(sTex, GSVector4(0, 0, 1, 1), dTex, dRect, shader, linear);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GSDevice::ClearCurrent()
|
||||||
|
{
|
||||||
|
m_current = nullptr;
|
||||||
|
|
||||||
|
delete m_merge;
|
||||||
|
delete m_weavebob;
|
||||||
|
delete m_blend;
|
||||||
|
delete m_target_tmp;
|
||||||
|
|
||||||
|
m_merge = nullptr;
|
||||||
|
m_weavebob = nullptr;
|
||||||
|
m_blend = nullptr;
|
||||||
|
m_target_tmp = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void GSDevice::Merge(GSTexture* sTex[3], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c)
|
void GSDevice::Merge(GSTexture* sTex[3], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c)
|
||||||
{
|
{
|
||||||
// KH:COM crashes at startup when booting *through the bios* due to m_merge being NULL.
|
// KH:COM crashes at startup when booting *through the bios* due to m_merge being NULL.
|
||||||
|
|
|
@ -727,6 +727,7 @@ public:
|
||||||
__fi FeatureSupport Features() const { return m_features; }
|
__fi FeatureSupport Features() const { return m_features; }
|
||||||
__fi GSTexture* GetCurrent() const { return m_current; }
|
__fi GSTexture* GetCurrent() const { return m_current; }
|
||||||
|
|
||||||
|
void ClearCurrent();
|
||||||
void Merge(GSTexture* sTex[3], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c);
|
void Merge(GSTexture* sTex[3], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c);
|
||||||
void Interlace(const GSVector2i& ds, int field, int mode, float yoffset);
|
void Interlace(const GSVector2i& ds, int field, int mode, float yoffset);
|
||||||
void FXAA();
|
void FXAA();
|
||||||
|
|
|
@ -60,6 +60,15 @@ GSRenderer::GSRenderer() = default;
|
||||||
|
|
||||||
GSRenderer::~GSRenderer() = default;
|
GSRenderer::~GSRenderer() = default;
|
||||||
|
|
||||||
|
void GSRenderer::Reset(bool hardware_reset)
|
||||||
|
{
|
||||||
|
// clear the current display texture
|
||||||
|
if (hardware_reset)
|
||||||
|
g_gs_device->ClearCurrent();
|
||||||
|
|
||||||
|
GSState::Reset(hardware_reset);
|
||||||
|
}
|
||||||
|
|
||||||
void GSRenderer::Destroy()
|
void GSRenderer::Destroy()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,8 @@ public:
|
||||||
GSRenderer();
|
GSRenderer();
|
||||||
virtual ~GSRenderer();
|
virtual ~GSRenderer();
|
||||||
|
|
||||||
|
virtual void Reset(bool hardware_reset) override;
|
||||||
|
|
||||||
virtual void Destroy();
|
virtual void Destroy();
|
||||||
|
|
||||||
virtual void VSync(u32 field, bool registers_written);
|
virtual void VSync(u32 field, bool registers_written);
|
||||||
|
|
Loading…
Reference in New Issue