diff options
author | bunnei <bunneidev@gmail.com> | 2020-10-13 02:35:34 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2020-10-14 07:11:52 +0200 |
commit | 1f186f34a29da8c4e39e3ad25fff1e4a39b33e85 (patch) | |
tree | 0345d677ffe053bb1ed06ba1728d8ce31ee66fae /src/core/hle/service/nvflinger | |
parent | Merge pull request #4787 from lioncash/conversion (diff) | |
download | yuzu-1f186f34a29da8c4e39e3ad25fff1e4a39b33e85.tar yuzu-1f186f34a29da8c4e39e3ad25fff1e4a39b33e85.tar.gz yuzu-1f186f34a29da8c4e39e3ad25fff1e4a39b33e85.tar.bz2 yuzu-1f186f34a29da8c4e39e3ad25fff1e4a39b33e85.tar.lz yuzu-1f186f34a29da8c4e39e3ad25fff1e4a39b33e85.tar.xz yuzu-1f186f34a29da8c4e39e3ad25fff1e4a39b33e85.tar.zst yuzu-1f186f34a29da8c4e39e3ad25fff1e4a39b33e85.zip |
Diffstat (limited to 'src/core/hle/service/nvflinger')
-rw-r--r-- | src/core/hle/service/nvflinger/buffer_queue.cpp | 14 | ||||
-rw-r--r-- | src/core/hle/service/nvflinger/buffer_queue.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/core/hle/service/nvflinger/buffer_queue.cpp b/src/core/hle/service/nvflinger/buffer_queue.cpp index 637b310d7..4f1e210b1 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue.cpp @@ -99,6 +99,20 @@ void BufferQueue::QueueBuffer(u32 slot, BufferTransformFlags transform, queue_sequence.push_back(slot); } +void BufferQueue::CancelBuffer(u32 slot, const Service::Nvidia::MultiFence& multi_fence) { + const auto itr = std::find_if(queue.begin(), queue.end(), + [slot](const Buffer& buffer) { return buffer.slot == slot; }); + ASSERT(itr != queue.end()); + ASSERT(itr->status != Buffer::Status::Free); + itr->status = Buffer::Status::Free; + itr->multi_fence = multi_fence; + itr->swap_interval = 0; + + free_buffers.push_back(slot); + + buffer_wait_event.writable->Signal(); +} + std::optional<std::reference_wrapper<const BufferQueue::Buffer>> BufferQueue::AcquireBuffer() { auto itr = queue.end(); // Iterate to find a queued buffer matching the requested slot. diff --git a/src/core/hle/service/nvflinger/buffer_queue.h b/src/core/hle/service/nvflinger/buffer_queue.h index 8a837e5aa..e7517c7e1 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.h +++ b/src/core/hle/service/nvflinger/buffer_queue.h @@ -95,6 +95,7 @@ public: void QueueBuffer(u32 slot, BufferTransformFlags transform, const Common::Rectangle<int>& crop_rect, u32 swap_interval, Service::Nvidia::MultiFence& multi_fence); + void CancelBuffer(u32 slot, const Service::Nvidia::MultiFence& multi_fence); std::optional<std::reference_wrapper<const Buffer>> AcquireBuffer(); void ReleaseBuffer(u32 slot); void Disconnect(); |