diff options
author | Liam <byteslice@airmail.cc> | 2023-07-15 02:16:39 +0200 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2023-08-08 17:09:37 +0200 |
commit | 84cb20bc72031947ac9e625b4a2b5e0059dda441 (patch) | |
tree | 94e816691b3800153f7955b03ae63cc36dfdb9dc /src/core/hle/service/vi | |
parent | Merge pull request #11216 from lat9nq/no-mesa-astc (diff) | |
download | yuzu-84cb20bc72031947ac9e625b4a2b5e0059dda441.tar yuzu-84cb20bc72031947ac9e625b4a2b5e0059dda441.tar.gz yuzu-84cb20bc72031947ac9e625b4a2b5e0059dda441.tar.bz2 yuzu-84cb20bc72031947ac9e625b4a2b5e0059dda441.tar.lz yuzu-84cb20bc72031947ac9e625b4a2b5e0059dda441.tar.xz yuzu-84cb20bc72031947ac9e625b4a2b5e0059dda441.tar.zst yuzu-84cb20bc72031947ac9e625b4a2b5e0059dda441.zip |
Diffstat (limited to 'src/core/hle/service/vi')
-rw-r--r-- | src/core/hle/service/vi/display/vi_display.cpp | 5 | ||||
-rw-r--r-- | src/core/hle/service/vi/display/vi_display.h | 2 | ||||
-rw-r--r-- | src/core/hle/service/vi/vi.cpp | 33 |
3 files changed, 24 insertions, 16 deletions
diff --git a/src/core/hle/service/vi/display/vi_display.cpp b/src/core/hle/service/vi/display/vi_display.cpp index 69af2868a..f0b5eff8a 100644 --- a/src/core/hle/service/vi/display/vi_display.cpp +++ b/src/core/hle/service/vi/display/vi_display.cpp @@ -58,14 +58,15 @@ const Layer& Display::GetLayer(std::size_t index) const { return *layers.at(index); } -ResultVal<Kernel::KReadableEvent*> Display::GetVSyncEvent() { +Result Display::GetVSyncEvent(Kernel::KReadableEvent** out_vsync_event) { if (got_vsync_event) { return ResultPermissionDenied; } got_vsync_event = true; - return GetVSyncEventUnchecked(); + *out_vsync_event = GetVSyncEventUnchecked(); + return ResultSuccess; } Kernel::KReadableEvent* Display::GetVSyncEventUnchecked() { diff --git a/src/core/hle/service/vi/display/vi_display.h b/src/core/hle/service/vi/display/vi_display.h index 3f31d1f32..101cbce20 100644 --- a/src/core/hle/service/vi/display/vi_display.h +++ b/src/core/hle/service/vi/display/vi_display.h @@ -85,7 +85,7 @@ public: * @returns The internal Vsync event if it has not yet been retrieved, * VI::ResultPermissionDenied otherwise. */ - [[nodiscard]] ResultVal<Kernel::KReadableEvent*> GetVSyncEvent(); + [[nodiscard]] Result GetVSyncEvent(Kernel::KReadableEvent** out_vsync_event); /// Gets the internal vsync event. Kernel::KReadableEvent* GetVSyncEventUnchecked(); diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index 1b193f00c..5998e786e 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp @@ -683,9 +683,9 @@ private: LOG_DEBUG(Service_VI, "called. display_id={}", display_id); - const auto vsync_event = nv_flinger.FindVsyncEvent(display_id); - if (vsync_event.Failed()) { - const auto result = vsync_event.Code(); + Kernel::KReadableEvent* vsync_event{}; + const auto result = nv_flinger.FindVsyncEvent(&vsync_event, display_id); + if (result != ResultSuccess) { if (result == ResultNotFound) { LOG_ERROR(Service_VI, "Vsync event was not found for display_id={}", display_id); } @@ -705,15 +705,16 @@ private: const auto mode = rp.PopEnum<NintendoScaleMode>(); LOG_DEBUG(Service_VI, "called mode={}", mode); - const auto converted_mode = ConvertScalingModeImpl(mode); + ConvertedScaleMode converted_mode{}; + const auto result = ConvertScalingModeImpl(&converted_mode, mode); - if (converted_mode.Succeeded()) { + if (result == ResultSuccess) { IPC::ResponseBuilder rb{ctx, 4}; rb.Push(ResultSuccess); - rb.PushEnum(*converted_mode); + rb.PushEnum(converted_mode); } else { IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(converted_mode.Code()); + rb.Push(result); } } @@ -760,18 +761,24 @@ private: rb.Push(alignment); } - static ResultVal<ConvertedScaleMode> ConvertScalingModeImpl(NintendoScaleMode mode) { + static Result ConvertScalingModeImpl(ConvertedScaleMode* out_scaling_mode, + NintendoScaleMode mode) { switch (mode) { case NintendoScaleMode::None: - return ConvertedScaleMode::None; + *out_scaling_mode = ConvertedScaleMode::None; + return ResultSuccess; case NintendoScaleMode::Freeze: - return ConvertedScaleMode::Freeze; + *out_scaling_mode = ConvertedScaleMode::Freeze; + return ResultSuccess; case NintendoScaleMode::ScaleToWindow: - return ConvertedScaleMode::ScaleToWindow; + *out_scaling_mode = ConvertedScaleMode::ScaleToWindow; + return ResultSuccess; case NintendoScaleMode::ScaleAndCrop: - return ConvertedScaleMode::ScaleAndCrop; + *out_scaling_mode = ConvertedScaleMode::ScaleAndCrop; + return ResultSuccess; case NintendoScaleMode::PreserveAspectRatio: - return ConvertedScaleMode::PreserveAspectRatio; + *out_scaling_mode = ConvertedScaleMode::PreserveAspectRatio; + return ResultSuccess; default: LOG_ERROR(Service_VI, "Invalid scaling mode specified, mode={}", mode); return ResultOperationFailed; |