video_core: Use a CV for blocking commands.
There is no need for a busy loop here. Let's just use a condition variable to save some power.
This commit is contained in:
parent
e6fb49fa4b
commit
e8bd9aed8b
2 changed files with 32 additions and 24 deletions
|
@ -90,11 +90,12 @@ using CommandData =
|
|||
struct CommandDataContainer {
|
||||
CommandDataContainer() = default;
|
||||
|
||||
explicit CommandDataContainer(CommandData&& data_, u64 next_fence_)
|
||||
: data{std::move(data_)}, fence{next_fence_} {}
|
||||
explicit CommandDataContainer(CommandData&& data_, u64 next_fence_, bool block_)
|
||||
: data{std::move(data_)}, fence{next_fence_}, block(block_) {}
|
||||
|
||||
CommandData data;
|
||||
u64 fence{};
|
||||
bool block{};
|
||||
};
|
||||
|
||||
/// Struct used to synchronize the GPU thread
|
||||
|
@ -106,6 +107,7 @@ struct SynchState final {
|
|||
CommandQueue queue;
|
||||
u64 last_fence{};
|
||||
std::atomic<u64> signaled_fence{};
|
||||
std::condition_variable cv;
|
||||
};
|
||||
|
||||
/// Class used to manage the GPU thread
|
||||
|
@ -140,10 +142,7 @@ public:
|
|||
|
||||
private:
|
||||
/// Pushes a command to be executed by the GPU thread
|
||||
u64 PushCommand(CommandData&& command_data);
|
||||
|
||||
// Wait until the gpu thread is idle.
|
||||
void WaitIdle() const;
|
||||
u64 PushCommand(CommandData&& command_data, bool block = false);
|
||||
|
||||
Core::System& system;
|
||||
const bool is_async;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue