aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs')
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs75
1 files changed, 40 insertions, 35 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs b/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs
index 89eed5b5..3fbd7d20 100644
--- a/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs
+++ b/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs
@@ -3,7 +3,6 @@ using Ryujinx.Common.Logging;
using Ryujinx.Common.Memory;
using Ryujinx.HLE.HOS.Applets;
using Ryujinx.HLE.HOS.Ipc;
-using Ryujinx.HLE.HOS.Kernel.Common;
using Ryujinx.HLE.HOS.Services.SurfaceFlinger;
using Ryujinx.HLE.HOS.Services.Vi.RootService.ApplicationDisplayService;
using Ryujinx.HLE.HOS.Services.Vi.RootService.ApplicationDisplayService.Types;
@@ -27,27 +26,27 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
public int RetrievedEventsCount;
}
- private readonly List<DisplayInfo> _displayInfo;
+ private readonly List<DisplayInfo> _displayInfo;
private readonly Dictionary<ulong, DisplayState> _openDisplays;
private int _vsyncEventHandle;
public IApplicationDisplayService(ViServiceType serviceType)
{
- _serviceType = serviceType;
- _displayInfo = new List<DisplayInfo>();
+ _serviceType = serviceType;
+ _displayInfo = new List<DisplayInfo>();
_openDisplays = new Dictionary<ulong, DisplayState>();
void AddDisplayInfo(string name, bool layerLimitEnabled, ulong layerLimitMax, ulong width, ulong height)
{
- DisplayInfo displayInfo = new DisplayInfo()
+ DisplayInfo displayInfo = new()
{
- Name = new Array64<byte>(),
+ Name = new Array64<byte>(),
LayerLimitEnabled = layerLimitEnabled,
- Padding = new Array7<byte>(),
- LayerLimitMax = layerLimitMax,
- Width = width,
- Height = height
+ Padding = new Array7<byte>(),
+ LayerLimitMax = layerLimitMax,
+ Width = width,
+ Height = height,
};
Encoding.ASCII.GetBytes(name).AsSpan().CopyTo(displayInfo.Name.AsSpan());
@@ -55,11 +54,11 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
_displayInfo.Add(displayInfo);
}
- AddDisplayInfo("Default", true, 1, 1920, 1080);
- AddDisplayInfo("External", true, 1, 1920, 1080);
- AddDisplayInfo("Edid", true, 1, 0, 0);
- AddDisplayInfo("Internal", true, 1, 1920, 1080);
- AddDisplayInfo("Null", false, 0, 1920, 1080);
+ AddDisplayInfo("Default", true, 1, 1920, 1080);
+ AddDisplayInfo("External", true, 1, 1920, 1080);
+ AddDisplayInfo("Edid", true, 1, 0, 0);
+ AddDisplayInfo("Internal", true, 1, 1920, 1080);
+ AddDisplayInfo("Null", false, 0, 1920, 1080);
}
[CommandCmif(100)]
@@ -232,10 +231,14 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
public ResultCode OpenLayer(ServiceCtx context)
{
// TODO: support multi display.
+#pragma warning disable IDE0059 // Remove unnecessary value assignment
byte[] displayName = context.RequestData.ReadBytes(0x40);
+#pragma warning restore IDE0059
- long layerId = context.RequestData.ReadInt64();
- long userId = context.RequestData.ReadInt64();
+ long layerId = context.RequestData.ReadInt64();
+#pragma warning disable IDE0059 // Remove unnecessary value assignment
+ long userId = context.RequestData.ReadInt64();
+#pragma warning restore IDE0059
ulong parcelPtr = context.Request.ReceiveBuff[0].Position;
ResultCode result = context.Device.System.SurfaceFlinger.OpenLayer(context.Request.HandleDesc.PId, layerId, out IBinder producer);
@@ -247,7 +250,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
context.Device.System.SurfaceFlinger.SetRenderLayer(layerId);
- Parcel parcel = new Parcel(0x28, 0x4);
+ Parcel parcel = new(0x28, 0x4);
parcel.WriteObject(producer, "dispdrv\0");
@@ -273,8 +276,10 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
// CreateStrayLayer(u32, u64) -> (u64, u64, buffer<bytes, 6>)
public ResultCode CreateStrayLayer(ServiceCtx context)
{
+#pragma warning disable IDE0059 // Remove unnecessary value assignment
long layerFlags = context.RequestData.ReadInt64();
- long displayId = context.RequestData.ReadInt64();
+ long displayId = context.RequestData.ReadInt64();
+#pragma warning restore IDE0059
ulong parcelPtr = context.Request.ReceiveBuff[0].Position;
@@ -283,7 +288,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
context.Device.System.SurfaceFlinger.SetRenderLayer(layerId);
- Parcel parcel = new Parcel(0x28, 0x4);
+ Parcel parcel = new(0x28, 0x4);
parcel.WriteObject(producer, "dispdrv\0");
@@ -327,10 +332,10 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
DestinationScalingMode? convertedScalingMode = scalingMode switch
{
- SourceScalingMode.None => DestinationScalingMode.None,
- SourceScalingMode.Freeze => DestinationScalingMode.Freeze,
- SourceScalingMode.ScaleAndCrop => DestinationScalingMode.ScaleAndCrop,
- SourceScalingMode.ScaleToWindow => DestinationScalingMode.ScaleToWindow,
+ SourceScalingMode.None => DestinationScalingMode.None,
+ SourceScalingMode.Freeze => DestinationScalingMode.Freeze,
+ SourceScalingMode.ScaleAndCrop => DestinationScalingMode.ScaleAndCrop,
+ SourceScalingMode.ScaleToWindow => DestinationScalingMode.ScaleToWindow,
SourceScalingMode.PreserveAspectRatio => DestinationScalingMode.PreserveAspectRatio,
_ => null,
};
@@ -354,13 +359,13 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
private ulong GetA8B8G8R8LayerSize(int width, int height, out int pitch, out int alignment)
{
- const int DefaultAlignment = 0x1000;
- const ulong DefaultSize = 0x20000;
+ const int DefaultAlignment = 0x1000;
+ const ulong DefaultSize = 0x20000;
alignment = DefaultAlignment;
- pitch = BitUtils.AlignUp(BitUtils.DivRoundUp(width * 32, 8), 64);
+ pitch = BitUtils.AlignUp(BitUtils.DivRoundUp(width * 32, 8), 64);
- int memorySize = pitch * BitUtils.AlignUp(height, 64);
+ int memorySize = pitch * BitUtils.AlignUp(height, 64);
ulong requiredMemorySize = (ulong)BitUtils.AlignUp(memorySize, alignment);
return (requiredMemorySize + DefaultSize - 1) / DefaultSize * DefaultSize;
@@ -373,18 +378,18 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
// The size of the layer buffer should be an aligned multiple of width * height
// because it was created using GetIndirectLayerImageRequiredMemoryInfo as a guide.
- long layerWidth = context.RequestData.ReadInt64();
- long layerHeight = context.RequestData.ReadInt64();
- long layerHandle = context.RequestData.ReadInt64();
+ long layerWidth = context.RequestData.ReadInt64();
+ long layerHeight = context.RequestData.ReadInt64();
+ long layerHandle = context.RequestData.ReadInt64();
ulong layerBuffPosition = context.Request.ReceiveBuff[0].Position;
- ulong layerBuffSize = context.Request.ReceiveBuff[0].Size;
+ ulong layerBuffSize = context.Request.ReceiveBuff[0].Size;
// Get the pitch of the layer that is necessary to render correctly.
ulong size = GetA8B8G8R8LayerSize((int)layerWidth, (int)layerHeight, out int pitch, out _);
Debug.Assert(layerBuffSize == size);
- RenderingSurfaceInfo surfaceInfo = new RenderingSurfaceInfo(ColorFormat.A8B8G8R8, (uint)layerWidth, (uint)layerHeight, (uint)pitch, (uint)layerBuffSize);
+ RenderingSurfaceInfo surfaceInfo = new(ColorFormat.A8B8G8R8, (uint)layerWidth, (uint)layerHeight, (uint)pitch, (uint)layerBuffSize);
// Get the applet associated with the handle.
object appletObject = context.Device.System.AppletState.IndirectLayerHandles.GetData((int)layerHandle);
@@ -425,7 +430,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
}
*/
- int width = (int)context.RequestData.ReadUInt64();
+ int width = (int)context.RequestData.ReadUInt64();
int height = (int)context.RequestData.ReadUInt64();
if (height < 0 || width < 0)
@@ -445,7 +450,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
// NOTE: The official service setup a A8B8G8R8 texture with a linear layout and then query its size.
// As we don't need this texture on the emulator, we can just simplify this logic and directly
// do a linear layout size calculation. (stride * height * bytePerPixel)
- ulong size = GetA8B8G8R8LayerSize(width, height, out int pitch, out int alignment);
+ ulong size = GetA8B8G8R8LayerSize(width, height, out _, out int alignment);
context.ResponseData.Write(size);
context.ResponseData.Write(alignment);