diff options
author | Liam <byteslice@airmail.cc> | 2022-11-15 03:00:32 +0100 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2022-11-15 03:18:52 +0100 |
commit | cf202f371862ebe92dd88924a9f7b8cfbc7ad738 (patch) | |
tree | d77708003ece5424446ac2824415c98dc1cf0c86 /src/core/hle/service/nvflinger/buffer_queue_producer.cpp | |
parent | Merge pull request #9225 from liamwhite/debugger-instance (diff) | |
download | yuzu-cf202f371862ebe92dd88924a9f7b8cfbc7ad738.tar yuzu-cf202f371862ebe92dd88924a9f7b8cfbc7ad738.tar.gz yuzu-cf202f371862ebe92dd88924a9f7b8cfbc7ad738.tar.bz2 yuzu-cf202f371862ebe92dd88924a9f7b8cfbc7ad738.tar.lz yuzu-cf202f371862ebe92dd88924a9f7b8cfbc7ad738.tar.xz yuzu-cf202f371862ebe92dd88924a9f7b8cfbc7ad738.tar.zst yuzu-cf202f371862ebe92dd88924a9f7b8cfbc7ad738.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/service/nvflinger/buffer_queue_producer.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/core/hle/service/nvflinger/buffer_queue_producer.cpp b/src/core/hle/service/nvflinger/buffer_queue_producer.cpp index 41ba44b21..e601b5da1 100644 --- a/src/core/hle/service/nvflinger/buffer_queue_producer.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue_producer.cpp @@ -121,8 +121,8 @@ Status BufferQueueProducer::SetBufferCount(s32 buffer_count) { return Status::NoError; } -Status BufferQueueProducer::WaitForFreeSlotThenRelock(bool async, s32* found, - Status* return_flags) const { +Status BufferQueueProducer::WaitForFreeSlotThenRelock(bool async, s32* found, Status* return_flags, + std::unique_lock<std::mutex>& lk) const { bool try_again = true; while (try_again) { @@ -214,7 +214,7 @@ Status BufferQueueProducer::WaitForFreeSlotThenRelock(bool async, s32* found, return Status::WouldBlock; } - if (!core->WaitForDequeueCondition()) { + if (!core->WaitForDequeueCondition(lk)) { // We are no longer running return Status::NoError; } @@ -237,7 +237,7 @@ Status BufferQueueProducer::DequeueBuffer(s32* out_slot, Fence* out_fence, bool Status return_flags = Status::NoError; bool attached_by_consumer = false; { - std::scoped_lock lock{core->mutex}; + std::unique_lock lock{core->mutex}; core->WaitWhileAllocatingLocked(); if (format == PixelFormat::NoFormat) { @@ -248,7 +248,7 @@ Status BufferQueueProducer::DequeueBuffer(s32* out_slot, Fence* out_fence, bool usage |= core->consumer_usage_bit; s32 found{}; - Status status = WaitForFreeSlotThenRelock(async, &found, &return_flags); + Status status = WaitForFreeSlotThenRelock(async, &found, &return_flags, lock); if (status != Status::NoError) { return status; } @@ -400,13 +400,13 @@ Status BufferQueueProducer::AttachBuffer(s32* out_slot, return Status::BadValue; } - std::scoped_lock lock{core->mutex}; + std::unique_lock lock{core->mutex}; core->WaitWhileAllocatingLocked(); Status return_flags = Status::NoError; s32 found{}; - const auto status = WaitForFreeSlotThenRelock(false, &found, &return_flags); + const auto status = WaitForFreeSlotThenRelock(false, &found, &return_flags, lock); if (status != Status::NoError) { return status; } |