Prevent rendering ownership change between command lists. (#1486)

This commit is contained in:
squidbus 2025-03-30 05:53:11 -07:00 committed by GitHub
parent 49d3b675ed
commit f5f92d0761
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -736,10 +736,13 @@ static void DestructTempResources()
}
static std::thread::id g_presentThreadId = std::this_thread::get_id();
static std::atomic<bool> g_readyForCommands;
PPC_FUNC_IMPL(__imp__sub_824ECA00);
PPC_FUNC(sub_824ECA00)
{
// Guard against thread ownership changes when between command lists.
g_readyForCommands.wait(false);
g_presentThreadId = std::this_thread::get_id();
__imp__sub_824ECA00(ctx, base);
}
@ -1624,6 +1627,9 @@ static void BeginCommandList()
commandList->setGraphicsDescriptorSet(g_textureDescriptorSet.get(), 1);
commandList->setGraphicsDescriptorSet(g_textureDescriptorSet.get(), 2);
commandList->setGraphicsDescriptorSet(g_samplerDescriptorSet.get(), 3);
g_readyForCommands = true;
g_readyForCommands.notify_one();
}
template<typename T>
@ -2749,6 +2755,8 @@ static std::atomic<bool> g_executedCommandList;
void Video::Present()
{
g_readyForCommands = false;
RenderCommand cmd;
cmd.type = RenderCommandType::ExecutePendingStretchRectCommands;
g_renderQueue.enqueue(cmd);