summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Lioncash2019-01-04 19:55:01 -0500
committerGravatar Lioncash2019-01-04 21:45:18 -0500
commit56e51da1d90010ee5cc9f3c278d278d42f438a88 (patch)
treee6b501e4b73a7b42418db5684d7d55c6c8429809 /src/core
parentservice/vi: Unstub IApplicationDisplayService' SetLayerScalingMode() (diff)
downloadyuzu-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.cpp38
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