From e21fbd9ae5d8139d585019228e1fb1a6229f244c Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 8 Jan 2018 20:28:06 -0500 Subject: NV: Determine what buffer to draw for each layer of each display. Don't try to draw buffers that the guest application is using, only queued buffers are eligible for drawing. Drawing actual pixels is still not implemented. --- src/core/hle/service/vi/vi.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/core/hle/service/vi/vi.h') diff --git a/src/core/hle/service/vi/vi.h b/src/core/hle/service/vi/vi.h index 1bd8f7472..576c4ce32 100644 --- a/src/core/hle/service/vi/vi.h +++ b/src/core/hle/service/vi/vi.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include "core/hle/kernel/event.h" #include "core/hle/service/service.h" @@ -34,10 +35,20 @@ public: BufferQueue(u32 id, u64 layer_id); ~BufferQueue() = default; + struct Buffer { + enum class Status { Free = 0, Queued = 1, Dequeued = 2, Acquired = 3 }; + + u32 slot; + Status status = Status::Free; + IGBPBuffer igbp_buffer; + }; + void SetPreallocatedBuffer(u32 slot, IGBPBuffer& buffer); u32 DequeueBuffer(u32 pixel_format, u32 width, u32 height); const IGBPBuffer& RequestBuffer(u32 slot) const; void QueueBuffer(u32 slot); + boost::optional AcquireBuffer(); + void ReleaseBuffer(u32 slot); u32 GetId() const { return id; @@ -47,14 +58,6 @@ private: u32 id; u64 layer_id; - struct Buffer { - enum class Status { None = 0, Queued = 1, Dequeued = 2 }; - - u32 slot; - Status status = Status::None; - IGBPBuffer igbp_buffer; - }; - std::vector queue; }; -- cgit v1.2.3