mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 23:49:01 -05:00 
			
		
		
		
	Implement VI ConvertScalingMode (#1475)
* Implement VI ConvertScalingMode * Fixed push enum * Scale mode now uses Nintendo scale mode as an enum as well
This commit is contained in:
		| @@ -968,6 +968,54 @@ private: | ||||
|         rb.PushCopyObjects(vsync_event); | ||||
|     } | ||||
|  | ||||
|     enum class ConvertedScaleMode : u64 { | ||||
|         None = 0, // VI seems to name this as "Unknown" but lots of games pass it, assume it's no | ||||
|                   // scaling/default | ||||
|         Freeze = 1, | ||||
|         ScaleToWindow = 2, | ||||
|         Crop = 3, | ||||
|         NoCrop = 4, | ||||
|     }; | ||||
|  | ||||
|     // This struct is different, currently it's 1:1 but this might change in the future. | ||||
|     enum class NintendoScaleMode : u32 { | ||||
|         None = 0, | ||||
|         Freeze = 1, | ||||
|         ScaleToWindow = 2, | ||||
|         Crop = 3, | ||||
|         NoCrop = 4, | ||||
|     }; | ||||
|  | ||||
|     void ConvertScalingMode(Kernel::HLERequestContext& ctx) { | ||||
|         IPC::RequestParser rp{ctx}; | ||||
|         auto mode = rp.PopEnum<NintendoScaleMode>(); | ||||
|         LOG_DEBUG(Service_VI, "called mode={}", static_cast<u32>(mode)); | ||||
|  | ||||
|         IPC::ResponseBuilder rb{ctx, 4}; | ||||
|         rb.Push(RESULT_SUCCESS); | ||||
|         switch (mode) { | ||||
|         case NintendoScaleMode::None: | ||||
|             rb.PushEnum(ConvertedScaleMode::None); | ||||
|             break; | ||||
|         case NintendoScaleMode::Freeze: | ||||
|             rb.PushEnum(ConvertedScaleMode::Freeze); | ||||
|             break; | ||||
|         case NintendoScaleMode::ScaleToWindow: | ||||
|             rb.PushEnum(ConvertedScaleMode::ScaleToWindow); | ||||
|             break; | ||||
|         case NintendoScaleMode::Crop: | ||||
|             rb.PushEnum(ConvertedScaleMode::Crop); | ||||
|             break; | ||||
|         case NintendoScaleMode::NoCrop: | ||||
|             rb.PushEnum(ConvertedScaleMode::NoCrop); | ||||
|             break; | ||||
|         default: | ||||
|             UNIMPLEMENTED_MSG("Unknown scaling mode {}", static_cast<u32>(mode)); | ||||
|             rb.PushEnum(ConvertedScaleMode::None); | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     std::shared_ptr<NVFlinger::NVFlinger> nv_flinger; | ||||
| }; | ||||
|  | ||||
| @@ -991,7 +1039,7 @@ IApplicationDisplayService::IApplicationDisplayService( | ||||
|         {2030, &IApplicationDisplayService::CreateStrayLayer, "CreateStrayLayer"}, | ||||
|         {2031, &IApplicationDisplayService::DestroyStrayLayer, "DestroyStrayLayer"}, | ||||
|         {2101, &IApplicationDisplayService::SetLayerScalingMode, "SetLayerScalingMode"}, | ||||
|         {2102, nullptr, "ConvertScalingMode"}, | ||||
|         {2102, &IApplicationDisplayService::ConvertScalingMode, "ConvertScalingMode"}, | ||||
|         {2450, nullptr, "GetIndirectLayerImageMap"}, | ||||
|         {2451, nullptr, "GetIndirectLayerImageCropMap"}, | ||||
|         {2460, nullptr, "GetIndirectLayerImageRequiredMemoryInfo"}, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David
					David