Lock the GPU3D state when rendering on the render thread or serializing it
This commit is contained in:
parent
2c921ba024
commit
2f49a551c1
|
@ -275,6 +275,7 @@ u32 RenderNumPolygons;
|
|||
u32 FlushRequest;
|
||||
u32 FlushAttributes;
|
||||
|
||||
Platform::Mutex* StateLock;
|
||||
std::unique_ptr<GPU3D::Renderer3D> CurrentRenderer = {};
|
||||
|
||||
bool AbortFrame;
|
||||
|
@ -294,12 +295,22 @@ void Vertex::DoSavestate(Savestate* file) noexcept
|
|||
|
||||
bool Init()
|
||||
{
|
||||
if (StateLock)
|
||||
{
|
||||
Platform::Mutex_Free(StateLock);
|
||||
}
|
||||
StateLock = Platform::Mutex_Create();
|
||||
return true;
|
||||
}
|
||||
|
||||
void DeInit()
|
||||
{
|
||||
CurrentRenderer = nullptr;
|
||||
if (StateLock)
|
||||
{
|
||||
Platform::Mutex_Free(StateLock);
|
||||
StateLock = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void ResetRenderingState()
|
||||
|
@ -410,6 +421,7 @@ void DoSavestate(Savestate* file)
|
|||
if (softRenderer && softRenderer->IsThreaded())
|
||||
{
|
||||
softRenderer->SetupRenderThread();
|
||||
Platform::Mutex_Lock(StateLock);
|
||||
}
|
||||
|
||||
CmdFIFO.DoSavestate(file);
|
||||
|
@ -643,6 +655,7 @@ void DoSavestate(Savestate* file)
|
|||
file->Var32(&TexPalette);
|
||||
if (softRenderer && softRenderer->IsThreaded())
|
||||
{
|
||||
Platform::Mutex_Unlock(StateLock);
|
||||
softRenderer->EnableRenderThread();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1736,6 +1736,7 @@ void SoftRenderer::RestartFrame()
|
|||
EnableRenderThread();
|
||||
}
|
||||
|
||||
extern Platform::Mutex* StateLock;
|
||||
void SoftRenderer::RenderThreadFunc()
|
||||
{
|
||||
for (;;)
|
||||
|
@ -1750,8 +1751,10 @@ void SoftRenderer::RenderThreadFunc()
|
|||
}
|
||||
else
|
||||
{
|
||||
Platform::Mutex_Lock(StateLock);
|
||||
ClearBuffers();
|
||||
RenderPolygons(true, &RenderPolygonRAM[0], RenderNumPolygons);
|
||||
Platform::Mutex_Unlock(StateLock);
|
||||
}
|
||||
|
||||
Platform::Semaphore_Post(Sema_RenderDone);
|
||||
|
|
Loading…
Reference in New Issue