diff options
| author | 2019-01-04 19:55:01 -0500 | |
|---|---|---|
| committer | 2019-01-04 21:45:18 -0500 | |
| commit | 56e51da1d90010ee5cc9f3c278d278d42f438a88 (patch) | |
| tree | e6b501e4b73a7b42418db5684d7d55c6c8429809 /src/core | |
| parent | service/vi: Unstub IApplicationDisplayService' SetLayerScalingMode() (diff) | |
| download | yuzu-56e51da1d90010ee5cc9f3c278d278d42f438a88.tar.gz yuzu-56e51da1d90010ee5cc9f3c278d278d42f438a88.tar.xz yuzu-56e51da1d90010ee5cc9f3c278d278d42f438a88.zip | |
service/vi: Factor out scaling mode conversions from the IPC function itself
Avoids entangling the IPC buffer appending with the actual operation of
converting the scaling values over. This also inserts the proper error
handling for invalid scaling values.
Diffstat (limited to 'src/core')
| -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 | ||