mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 15:21:51 +00:00
- add GroupMemoryBarrierCommand
This commit is contained in:
parent
efa434d47b
commit
c9fd52340e
2 changed files with 24 additions and 0 deletions
|
@ -203,6 +203,8 @@ void DrawerThreads::StopThreads()
|
||||||
shutdown_flag = false;
|
shutdown_flag = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
DrawerCommandQueue::DrawerCommandQueue(RenderMemory *frameMemory) : FrameMemory(frameMemory)
|
DrawerCommandQueue::DrawerCommandQueue(RenderMemory *frameMemory) : FrameMemory(frameMemory)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -211,3 +213,13 @@ void *DrawerCommandQueue::AllocMemory(size_t size)
|
||||||
{
|
{
|
||||||
return FrameMemory->AllocMemory<uint8_t>((int)size);
|
return FrameMemory->AllocMemory<uint8_t>((int)size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void GroupMemoryBarrierCommand::Execute(DrawerThread *thread)
|
||||||
|
{
|
||||||
|
std::unique_lock<std::mutex> lock(mutex);
|
||||||
|
count++;
|
||||||
|
condition.notify_all();
|
||||||
|
condition.wait(lock, [&]() { return count >= thread->num_cores; });
|
||||||
|
}
|
||||||
|
|
|
@ -97,6 +97,18 @@ public:
|
||||||
virtual void Execute(DrawerThread *thread) = 0;
|
virtual void Execute(DrawerThread *thread) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Wait for all worker threads before executing next command
|
||||||
|
class GroupMemoryBarrierCommand : public DrawerCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Execute(DrawerThread *thread);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::mutex mutex;
|
||||||
|
std::condition_variable condition;
|
||||||
|
size_t count = 0;
|
||||||
|
};
|
||||||
|
|
||||||
class DrawerCommandQueue;
|
class DrawerCommandQueue;
|
||||||
typedef std::shared_ptr<DrawerCommandQueue> DrawerCommandQueuePtr;
|
typedef std::shared_ptr<DrawerCommandQueue> DrawerCommandQueuePtr;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue