summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/vi/display/vi_display.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2022-10-02 12:02:59 +0200
committerGitHub <noreply@github.com>2022-10-02 12:02:59 +0200
commit80a3a731237472d8d2141243ca322ccf3276483c (patch)
treeeafea51bbdb8d7ceb9e69cd2d9b1156f1f3c3b9b /src/core/hle/service/vi/display/vi_display.cpp
parentMerge pull request #6598 from FernandoS27/falklands-are-british (diff)
parentservice: vi: Retrieve vsync event once per display (diff)
downloadyuzu-80a3a731237472d8d2141243ca322ccf3276483c.tar
yuzu-80a3a731237472d8d2141243ca322ccf3276483c.tar.gz
yuzu-80a3a731237472d8d2141243ca322ccf3276483c.tar.bz2
yuzu-80a3a731237472d8d2141243ca322ccf3276483c.tar.lz
yuzu-80a3a731237472d8d2141243ca322ccf3276483c.tar.xz
yuzu-80a3a731237472d8d2141243ca322ccf3276483c.tar.zst
yuzu-80a3a731237472d8d2141243ca322ccf3276483c.zip
Diffstat (limited to 'src/core/hle/service/vi/display/vi_display.cpp')
-rw-r--r--src/core/hle/service/vi/display/vi_display.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/core/hle/service/vi/display/vi_display.cpp b/src/core/hle/service/vi/display/vi_display.cpp
index b34febb50..aa49aa775 100644
--- a/src/core/hle/service/vi/display/vi_display.cpp
+++ b/src/core/hle/service/vi/display/vi_display.cpp
@@ -19,6 +19,7 @@
#include "core/hle/service/nvflinger/hos_binder_driver_server.h"
#include "core/hle/service/vi/display/vi_display.h"
#include "core/hle/service/vi/layer/vi_layer.h"
+#include "core/hle/service/vi/vi_results.h"
namespace Service::VI {
@@ -55,8 +56,18 @@ const Layer& Display::GetLayer(std::size_t index) const {
return *layers.at(index);
}
-Kernel::KReadableEvent& Display::GetVSyncEvent() {
- return vsync_event->GetReadableEvent();
+ResultVal<Kernel::KReadableEvent*> Display::GetVSyncEvent() {
+ if (got_vsync_event) {
+ return ResultPermissionDenied;
+ }
+
+ got_vsync_event = true;
+
+ return GetVSyncEventUnchecked();
+}
+
+Kernel::KReadableEvent* Display::GetVSyncEventUnchecked() {
+ return &vsync_event->GetReadableEvent();
}
void Display::SignalVSyncEvent() {