diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/vi/vi.cpp | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index 266909ba4..b0ae074c9 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp | |||
| @@ -1003,7 +1003,7 @@ private: | |||
| 1003 | const u64 unknown = rp.Pop<u64>(); | 1003 | const u64 unknown = rp.Pop<u64>(); |
| 1004 | 1004 | ||
| 1005 | LOG_DEBUG(Service_VI, "called. scaling_mode=0x{:08X}, unknown=0x{:016X}", | 1005 | LOG_DEBUG(Service_VI, "called. scaling_mode=0x{:08X}, unknown=0x{:016X}", |
| 1006 | static_cast<u32>(scaling_mode), unknown); | 1006 | static_cast<u32>(scaling_mode), unknown); |
| 1007 | 1007 | ||
| 1008 | IPC::ResponseBuilder rb{ctx, 2}; | 1008 | IPC::ResponseBuilder rb{ctx, 2}; |
| 1009 | 1009 | ||
| @@ -1102,31 +1102,35 @@ private: | |||
| 1102 | 1102 | ||
| 1103 | void ConvertScalingMode(Kernel::HLERequestContext& ctx) { | 1103 | void ConvertScalingMode(Kernel::HLERequestContext& ctx) { |
| 1104 | IPC::RequestParser rp{ctx}; | 1104 | IPC::RequestParser rp{ctx}; |
| 1105 | auto mode = rp.PopEnum<NintendoScaleMode>(); | 1105 | const auto mode = rp.PopEnum<NintendoScaleMode>(); |
| 1106 | LOG_DEBUG(Service_VI, "called mode={}", static_cast<u32>(mode)); | 1106 | LOG_DEBUG(Service_VI, "called mode={}", static_cast<u32>(mode)); |
| 1107 | 1107 | ||
| 1108 | IPC::ResponseBuilder rb{ctx, 4}; | 1108 | const auto converted_mode = ConvertScalingModeImpl(mode); |
| 1109 | rb.Push(RESULT_SUCCESS); | 1109 | |
| 1110 | if (converted_mode.Succeeded()) { | ||
| 1111 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 1112 | rb.Push(RESULT_SUCCESS); | ||
| 1113 | rb.PushEnum(*converted_mode); | ||
| 1114 | } else { | ||
| 1115 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 1116 | rb.Push(converted_mode.Code()); | ||
| 1117 | } | ||
| 1118 | } | ||
| 1119 | |||
| 1120 | static ResultVal<ConvertedScaleMode> ConvertScalingModeImpl(NintendoScaleMode mode) { | ||
| 1110 | switch (mode) { | 1121 | switch (mode) { |
| 1111 | case NintendoScaleMode::None: | 1122 | case NintendoScaleMode::None: |
| 1112 | rb.PushEnum(ConvertedScaleMode::None); | 1123 | return MakeResult(ConvertedScaleMode::None); |
| 1113 | break; | ||
| 1114 | case NintendoScaleMode::Freeze: | 1124 | case NintendoScaleMode::Freeze: |
| 1115 | rb.PushEnum(ConvertedScaleMode::Freeze); | 1125 | return MakeResult(ConvertedScaleMode::Freeze); |
| 1116 | break; | ||
| 1117 | case NintendoScaleMode::ScaleToWindow: | 1126 | case NintendoScaleMode::ScaleToWindow: |
| 1118 | rb.PushEnum(ConvertedScaleMode::ScaleToWindow); | 1127 | return MakeResult(ConvertedScaleMode::ScaleToWindow); |
| 1119 | break; | ||
| 1120 | case NintendoScaleMode::Crop: | 1128 | case NintendoScaleMode::Crop: |
| 1121 | rb.PushEnum(ConvertedScaleMode::Crop); | 1129 | return MakeResult(ConvertedScaleMode::Crop); |
| 1122 | break; | ||
| 1123 | case NintendoScaleMode::NoCrop: | 1130 | case NintendoScaleMode::NoCrop: |
| 1124 | rb.PushEnum(ConvertedScaleMode::NoCrop); | 1131 | return MakeResult(ConvertedScaleMode::NoCrop); |
| 1125 | break; | ||
| 1126 | default: | 1132 | default: |
| 1127 | UNIMPLEMENTED_MSG("Unknown scaling mode {}", static_cast<u32>(mode)); | 1133 | return ERR_OPERATION_FAILED; |
| 1128 | rb.PushEnum(ConvertedScaleMode::None); | ||
| 1129 | break; | ||
| 1130 | } | 1134 | } |
| 1131 | } | 1135 | } |
| 1132 | 1136 | ||