summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/nvflinger
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-10-13 02:35:34 +0200
committerbunnei <bunneidev@gmail.com>2020-10-14 07:11:52 +0200
commit1f186f34a29da8c4e39e3ad25fff1e4a39b33e85 (patch)
tree0345d677ffe053bb1ed06ba1728d8ce31ee66fae /src/core/hle/service/nvflinger
parentMerge pull request #4787 from lioncash/conversion (diff)
downloadyuzu-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.cpp14
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue.h1
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();