core: Port all current usages of Event to Readable/WritableEvent
This commit is contained in:
parent
a56fc84e7a
commit
ff610103b5
29 changed files with 287 additions and 164 deletions
|
@ -7,14 +7,17 @@
|
|||
#include "common/assert.h"
|
||||
#include "common/logging/log.h"
|
||||
#include "core/core.h"
|
||||
#include "core/hle/kernel/kernel.h"
|
||||
#include "core/hle/kernel/readable_event.h"
|
||||
#include "core/hle/kernel/writable_event.h"
|
||||
#include "core/hle/service/nvflinger/buffer_queue.h"
|
||||
|
||||
namespace Service::NVFlinger {
|
||||
|
||||
BufferQueue::BufferQueue(u32 id, u64 layer_id) : id(id), layer_id(layer_id) {
|
||||
auto& kernel = Core::System::GetInstance().Kernel();
|
||||
buffer_wait_event =
|
||||
Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "BufferQueue NativeHandle");
|
||||
buffer_wait_event = Kernel::WritableEvent::CreateRegisteredEventPair(
|
||||
kernel, Kernel::ResetType::Sticky, "BufferQueue NativeHandle");
|
||||
}
|
||||
|
||||
BufferQueue::~BufferQueue() = default;
|
||||
|
@ -104,4 +107,14 @@ u32 BufferQueue::Query(QueryType type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
Kernel::SharedPtr<Kernel::WritableEvent> BufferQueue::GetWritableBufferWaitEvent() const {
|
||||
return buffer_wait_event;
|
||||
}
|
||||
|
||||
Kernel::SharedPtr<Kernel::ReadableEvent> BufferQueue::GetBufferWaitEvent() const {
|
||||
const auto& event{
|
||||
Core::System::GetInstance().Kernel().FindNamedEvent("BufferQueue NativeHandle")};
|
||||
return event->second;
|
||||
}
|
||||
|
||||
} // namespace Service::NVFlinger
|
||||
|
|
|
@ -10,12 +10,17 @@
|
|||
#include "common/common_funcs.h"
|
||||
#include "common/math_util.h"
|
||||
#include "common/swap.h"
|
||||
#include "core/hle/kernel/event.h"
|
||||
#include "core/hle/kernel/object.h"
|
||||
|
||||
namespace CoreTiming {
|
||||
struct EventType;
|
||||
}
|
||||
|
||||
namespace Kernel {
|
||||
class ReadableEvent;
|
||||
class WritableEvent;
|
||||
} // namespace Kernel
|
||||
|
||||
namespace Service::NVFlinger {
|
||||
|
||||
struct IGBPBuffer {
|
||||
|
@ -86,16 +91,16 @@ public:
|
|||
return id;
|
||||
}
|
||||
|
||||
Kernel::SharedPtr<Kernel::Event> GetBufferWaitEvent() const {
|
||||
return buffer_wait_event;
|
||||
}
|
||||
Kernel::SharedPtr<Kernel::WritableEvent> GetWritableBufferWaitEvent() const;
|
||||
|
||||
Kernel::SharedPtr<Kernel::ReadableEvent> GetBufferWaitEvent() const;
|
||||
|
||||
private:
|
||||
u32 id;
|
||||
u64 layer_id;
|
||||
|
||||
std::vector<Buffer> queue;
|
||||
Kernel::SharedPtr<Kernel::Event> buffer_wait_event;
|
||||
Kernel::SharedPtr<Kernel::WritableEvent> buffer_wait_event;
|
||||
};
|
||||
|
||||
} // namespace Service::NVFlinger
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
#include "core/core.h"
|
||||
#include "core/core_timing.h"
|
||||
#include "core/core_timing_util.h"
|
||||
#include "core/hle/kernel/kernel.h"
|
||||
#include "core/hle/kernel/readable_event.h"
|
||||
#include "core/hle/kernel/writable_event.h"
|
||||
#include "core/hle/service/nvdrv/devices/nvdisp_disp0.h"
|
||||
#include "core/hle/service/nvdrv/nvdrv.h"
|
||||
#include "core/hle/service/nvflinger/buffer_queue.h"
|
||||
|
@ -83,9 +86,10 @@ u32 NVFlinger::GetBufferQueueId(u64 display_id, u64 layer_id) {
|
|||
return layer.buffer_queue->GetId();
|
||||
}
|
||||
|
||||
Kernel::SharedPtr<Kernel::Event> NVFlinger::GetVsyncEvent(u64 display_id) {
|
||||
const auto& display = GetDisplay(display_id);
|
||||
return display.vsync_event;
|
||||
Kernel::SharedPtr<Kernel::ReadableEvent> NVFlinger::GetVsyncEvent(u64 display_id) {
|
||||
const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent(
|
||||
fmt::format("Display VSync Event {}", display_id))};
|
||||
return event->second;
|
||||
}
|
||||
|
||||
std::shared_ptr<BufferQueue> NVFlinger::GetBufferQueue(u32 id) const {
|
||||
|
@ -164,7 +168,8 @@ Layer::~Layer() = default;
|
|||
|
||||
Display::Display(u64 id, std::string name) : id(id), name(std::move(name)) {
|
||||
auto& kernel = Core::System::GetInstance().Kernel();
|
||||
vsync_event = Kernel::Event::Create(kernel, Kernel::ResetType::Pulse, "Display VSync Event");
|
||||
vsync_event = Kernel::WritableEvent::CreateRegisteredEventPair(
|
||||
kernel, Kernel::ResetType::Pulse, fmt::format("Display VSync Event {}", id));
|
||||
}
|
||||
|
||||
Display::~Display() = default;
|
||||
|
|
|
@ -10,12 +10,17 @@
|
|||
#include <vector>
|
||||
|
||||
#include "common/common_types.h"
|
||||
#include "core/hle/kernel/event.h"
|
||||
#include "core/hle/kernel/object.h"
|
||||
|
||||
namespace CoreTiming {
|
||||
struct EventType;
|
||||
}
|
||||
|
||||
namespace Kernel {
|
||||
class ReadableEvent;
|
||||
class WritableEvent;
|
||||
} // namespace Kernel
|
||||
|
||||
namespace Service::Nvidia {
|
||||
class Module;
|
||||
}
|
||||
|
@ -40,7 +45,7 @@ struct Display {
|
|||
std::string name;
|
||||
|
||||
std::vector<Layer> layers;
|
||||
Kernel::SharedPtr<Kernel::Event> vsync_event;
|
||||
Kernel::SharedPtr<Kernel::WritableEvent> vsync_event;
|
||||
};
|
||||
|
||||
class NVFlinger final {
|
||||
|
@ -61,7 +66,7 @@ public:
|
|||
u32 GetBufferQueueId(u64 display_id, u64 layer_id);
|
||||
|
||||
/// Gets the vsync event for the specified display.
|
||||
Kernel::SharedPtr<Kernel::Event> GetVsyncEvent(u64 display_id);
|
||||
Kernel::SharedPtr<Kernel::ReadableEvent> GetVsyncEvent(u64 display_id);
|
||||
|
||||
/// Obtains a buffer queue identified by the id.
|
||||
std::shared_ptr<BufferQueue> GetBufferQueue(u32 id) const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue