Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
9480e5c5ce | ||
|
0652813b0f | ||
|
e7f2342eba | ||
|
543d75a587 |
@@ -20,7 +20,7 @@
|
|||||||
<PackageVersion Include="LibHac" Version="0.19.0" />
|
<PackageVersion Include="LibHac" Version="0.19.0" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
||||||
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="7.4.0" />
|
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="7.5.1" />
|
||||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
|
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
|
||||||
<PackageVersion Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.0" />
|
<PackageVersion Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.0" />
|
||||||
<PackageVersion Include="MsgPack.Cli" Version="1.0.1" />
|
<PackageVersion Include="MsgPack.Cli" Version="1.0.1" />
|
||||||
|
@@ -2426,7 +2426,11 @@ namespace ARMeilleure.Instructions
|
|||||||
}
|
}
|
||||||
else if (Optimizations.FastFP && Optimizations.UseSse41 && sizeF == 0)
|
else if (Optimizations.FastFP && Optimizations.UseSse41 && sizeF == 0)
|
||||||
{
|
{
|
||||||
Operand res = EmitSse41Round32Exp8OpF(context, context.AddIntrinsic(Intrinsic.X86Rsqrtss, GetVec(op.Rn)), scalar: true);
|
// RSQRTSS handles subnormals as zero, which differs from Arm, so we can't use it here.
|
||||||
|
|
||||||
|
Operand res = context.AddIntrinsic(Intrinsic.X86Sqrtss, GetVec(op.Rn));
|
||||||
|
res = context.AddIntrinsic(Intrinsic.X86Rcpss, res);
|
||||||
|
res = EmitSse41Round32Exp8OpF(context, res, scalar: true);
|
||||||
|
|
||||||
context.Copy(GetVec(op.Rd), context.VectorZeroUpper96(res));
|
context.Copy(GetVec(op.Rd), context.VectorZeroUpper96(res));
|
||||||
}
|
}
|
||||||
@@ -2451,7 +2455,11 @@ namespace ARMeilleure.Instructions
|
|||||||
}
|
}
|
||||||
else if (Optimizations.FastFP && Optimizations.UseSse41 && sizeF == 0)
|
else if (Optimizations.FastFP && Optimizations.UseSse41 && sizeF == 0)
|
||||||
{
|
{
|
||||||
Operand res = EmitSse41Round32Exp8OpF(context, context.AddIntrinsic(Intrinsic.X86Rsqrtps, GetVec(op.Rn)), scalar: false);
|
// RSQRTPS handles subnormals as zero, which differs from Arm, so we can't use it here.
|
||||||
|
|
||||||
|
Operand res = context.AddIntrinsic(Intrinsic.X86Sqrtps, GetVec(op.Rn));
|
||||||
|
res = context.AddIntrinsic(Intrinsic.X86Rcpps, res);
|
||||||
|
res = EmitSse41Round32Exp8OpF(context, res, scalar: false);
|
||||||
|
|
||||||
if (op.RegisterSize == RegisterSize.Simd64)
|
if (op.RegisterSize == RegisterSize.Simd64)
|
||||||
{
|
{
|
||||||
|
@@ -29,7 +29,7 @@ namespace ARMeilleure.Translation.PTC
|
|||||||
private const string OuterHeaderMagicString = "PTCohd\0\0";
|
private const string OuterHeaderMagicString = "PTCohd\0\0";
|
||||||
private const string InnerHeaderMagicString = "PTCihd\0\0";
|
private const string InnerHeaderMagicString = "PTCihd\0\0";
|
||||||
|
|
||||||
private const uint InternalVersion = 6613; //! To be incremented manually for each change to the ARMeilleure project.
|
private const uint InternalVersion = 6634; //! To be incremented manually for each change to the ARMeilleure project.
|
||||||
|
|
||||||
private const string ActualDir = "0";
|
private const string ActualDir = "0";
|
||||||
private const string BackupDir = "1";
|
private const string BackupDir = "1";
|
||||||
|
@@ -159,6 +159,11 @@ namespace Ryujinx.Audio.Renderer.Server.Splitter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (destinationCount < parameter.DestinationCount)
|
||||||
|
{
|
||||||
|
input.Advance((parameter.DestinationCount - destinationCount) * sizeof(int));
|
||||||
|
}
|
||||||
|
|
||||||
Debug.Assert(parameter.Id == Id);
|
Debug.Assert(parameter.Id == Id);
|
||||||
|
|
||||||
if (parameter.Id == Id)
|
if (parameter.Id == Id)
|
||||||
|
@@ -112,6 +112,7 @@ namespace Ryujinx.Ava
|
|||||||
private readonly object _lockObject = new();
|
private readonly object _lockObject = new();
|
||||||
|
|
||||||
public event EventHandler AppExit;
|
public event EventHandler AppExit;
|
||||||
|
public event EventHandler<StatusInitEventArgs> StatusInitEvent;
|
||||||
public event EventHandler<StatusUpdatedEventArgs> StatusUpdatedEvent;
|
public event EventHandler<StatusUpdatedEventArgs> StatusUpdatedEvent;
|
||||||
|
|
||||||
public VirtualFileSystem VirtualFileSystem { get; }
|
public VirtualFileSystem VirtualFileSystem { get; }
|
||||||
@@ -947,6 +948,7 @@ namespace Ryujinx.Ava
|
|||||||
{
|
{
|
||||||
_renderingStarted = true;
|
_renderingStarted = true;
|
||||||
_viewModel.SwitchToRenderer(false);
|
_viewModel.SwitchToRenderer(false);
|
||||||
|
InitStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
Device.PresentFrame(() => (RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.SwapBuffers());
|
Device.PresentFrame(() => (RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.SwapBuffers());
|
||||||
@@ -970,6 +972,18 @@ namespace Ryujinx.Ava
|
|||||||
(RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(true);
|
(RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InitStatus()
|
||||||
|
{
|
||||||
|
StatusInitEvent?.Invoke(this, new StatusInitEventArgs(
|
||||||
|
ConfigurationState.Instance.Graphics.GraphicsBackend.Value switch
|
||||||
|
{
|
||||||
|
GraphicsBackend.Vulkan => "Vulkan",
|
||||||
|
GraphicsBackend.OpenGl => "OpenGL",
|
||||||
|
_ => throw new NotImplementedException()
|
||||||
|
},
|
||||||
|
$"GPU: {_renderer.GetHardwareInfo().GpuDriver}"));
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateStatus()
|
public void UpdateStatus()
|
||||||
{
|
{
|
||||||
// Run a status update only when a frame is to be drawn. This prevents from updating the ui and wasting a render when no frame is queued.
|
// Run a status update only when a frame is to be drawn. This prevents from updating the ui and wasting a render when no frame is queued.
|
||||||
@@ -983,12 +997,10 @@ namespace Ryujinx.Ava
|
|||||||
StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs(
|
StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs(
|
||||||
Device.EnableDeviceVsync,
|
Device.EnableDeviceVsync,
|
||||||
LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%",
|
LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%",
|
||||||
ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.Vulkan ? "Vulkan" : "OpenGL",
|
|
||||||
dockedMode,
|
dockedMode,
|
||||||
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
|
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
|
||||||
LocaleManager.Instance[LocaleKeys.Game] + $": {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
|
LocaleManager.Instance[LocaleKeys.Game] + $": {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
|
||||||
$"FIFO: {Device.Statistics.GetFifoPercent():00.00} %",
|
$"FIFO: {Device.Statistics.GetFifoPercent():00.00} %"));
|
||||||
$"GPU: {_renderer.GetHardwareInfo().GpuDriver}"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ShowExitPrompt()
|
public async Task ShowExitPrompt()
|
||||||
|
16
src/Ryujinx/UI/Models/StatusInitEventArgs.cs
Normal file
16
src/Ryujinx/UI/Models/StatusInitEventArgs.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Models
|
||||||
|
{
|
||||||
|
internal class StatusInitEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public string GpuBackend { get; }
|
||||||
|
public string GpuName { get; }
|
||||||
|
|
||||||
|
public StatusInitEventArgs(string gpuBackend, string gpuName)
|
||||||
|
{
|
||||||
|
GpuBackend = gpuBackend;
|
||||||
|
GpuName = gpuName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -6,23 +6,19 @@ namespace Ryujinx.Ava.UI.Models
|
|||||||
{
|
{
|
||||||
public bool VSyncEnabled { get; }
|
public bool VSyncEnabled { get; }
|
||||||
public string VolumeStatus { get; }
|
public string VolumeStatus { get; }
|
||||||
public string GpuBackend { get; }
|
|
||||||
public string AspectRatio { get; }
|
public string AspectRatio { get; }
|
||||||
public string DockedMode { get; }
|
public string DockedMode { get; }
|
||||||
public string FifoStatus { get; }
|
public string FifoStatus { get; }
|
||||||
public string GameStatus { get; }
|
public string GameStatus { get; }
|
||||||
public string GpuName { get; }
|
|
||||||
|
|
||||||
public StatusUpdatedEventArgs(bool vSyncEnabled, string volumeStatus, string gpuBackend, string dockedMode, string aspectRatio, string gameStatus, string fifoStatus, string gpuName)
|
public StatusUpdatedEventArgs(bool vSyncEnabled, string volumeStatus, string dockedMode, string aspectRatio, string gameStatus, string fifoStatus)
|
||||||
{
|
{
|
||||||
VSyncEnabled = vSyncEnabled;
|
VSyncEnabled = vSyncEnabled;
|
||||||
VolumeStatus = volumeStatus;
|
VolumeStatus = volumeStatus;
|
||||||
GpuBackend = gpuBackend;
|
|
||||||
DockedMode = dockedMode;
|
DockedMode = dockedMode;
|
||||||
AspectRatio = aspectRatio;
|
AspectRatio = aspectRatio;
|
||||||
GameStatus = gameStatus;
|
GameStatus = gameStatus;
|
||||||
FifoStatus = fifoStatus;
|
FifoStatus = fifoStatus;
|
||||||
GpuName = gpuName;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1172,6 +1172,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
{
|
{
|
||||||
RendererHostControl.WindowCreated += RendererHost_Created;
|
RendererHostControl.WindowCreated += RendererHost_Created;
|
||||||
|
|
||||||
|
AppHost.StatusInitEvent += Init_StatusBar;
|
||||||
AppHost.StatusUpdatedEvent += Update_StatusBar;
|
AppHost.StatusUpdatedEvent += Update_StatusBar;
|
||||||
AppHost.AppExit += AppHost_AppExit;
|
AppHost.AppExit += AppHost_AppExit;
|
||||||
|
|
||||||
@@ -1198,6 +1199,18 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Init_StatusBar(object sender, StatusInitEventArgs args)
|
||||||
|
{
|
||||||
|
if (ShowMenuAndStatusBar && !ShowLoadProgress)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
GpuNameText = args.GpuName;
|
||||||
|
BackendText = args.GpuBackend;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void Update_StatusBar(object sender, StatusUpdatedEventArgs args)
|
private void Update_StatusBar(object sender, StatusUpdatedEventArgs args)
|
||||||
{
|
{
|
||||||
if (ShowMenuAndStatusBar && !ShowLoadProgress)
|
if (ShowMenuAndStatusBar && !ShowLoadProgress)
|
||||||
@@ -1220,8 +1233,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
GameStatusText = args.GameStatus;
|
GameStatusText = args.GameStatus;
|
||||||
VolumeStatusText = args.VolumeStatus;
|
VolumeStatusText = args.VolumeStatus;
|
||||||
FifoStatusText = args.FifoStatus;
|
FifoStatusText = args.FifoStatus;
|
||||||
GpuNameText = args.GpuName;
|
|
||||||
BackendText = args.GpuBackend;
|
|
||||||
|
|
||||||
ShowStatusSeparator = true;
|
ShowStatusSeparator = true;
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user