Compare commits

...

7 Commits

Author SHA1 Message Date
Isaac Marovitz
851d81d24a Fix Redundant Qualifer Warnings (#4091)
* Fix Redundant Qualifer Warnings

* Remove unnecessary using
2022-12-10 21:21:13 +01:00
gdkchan
459c4caeba Fix HasUnalignedStorageBuffers value when buffers are always unaligned (#4078) 2022-12-09 17:41:40 -03:00
Mary
539b22ef7b Add explicit dependency on System.Drawing.Common on Ryujinx.Ava to workaround triming bugs 2022-12-09 20:12:09 +01:00
Mary-nyan
872f036d64 misc: Remove dependency on System.Drawing.Common (#4082)
We only used it in one spot for DPI scaling factor.

This implements the same behaviour using gdiplus.

This remove 700KB of dependency to download and around 170KB unpacked.
2022-12-09 18:00:53 +01:00
TSRBerry
dca96122bf gha: Add concurrency restriction on release workflow (#4081) 2022-12-09 16:15:28 +00:00
Mary-nyan
e752959109 misc: Update Ryujinx.Graphics.Nvdec.Dependencies to 5.0.1-build12 (#4080)
This adds support for Linux x64, macOS x64 and macOS arm64.
2022-12-09 15:46:07 +01:00
Ac_K
cf01664698 ava: Restyle the Status Bar (#4048) 2022-12-09 15:21:54 +01:00
34 changed files with 171 additions and 91 deletions

View File

@@ -11,6 +11,7 @@ on:
- '*.yml' - '*.yml'
- 'README.md' - 'README.md'
concurrency: release
jobs: jobs:
release: release:

View File

@@ -161,6 +161,7 @@
<Style Selector="MenuItem"> <Style Selector="MenuItem">
<Setter Property="Height" Value="{DynamicResource MenuItemHeight}" /> <Setter Property="Height" Value="{DynamicResource MenuItemHeight}" />
<Setter Property="Padding" Value="{DynamicResource MenuItemPadding}" /> <Setter Property="Padding" Value="{DynamicResource MenuItemPadding}" />
<Setter Property="FontSize" Value="12" />
</Style> </Style>
<Style Selector="MenuItem:selected /template/ Border#root"> <Style Selector="MenuItem:selected /template/ Border#root">
<Setter Property="Background" Value="{DynamicResource ThemeControlBorderColor}" /> <Setter Property="Background" Value="{DynamicResource ThemeControlBorderColor}" />

View File

@@ -355,7 +355,7 @@ namespace Ryujinx.Modules
list[index] = args.Result; list[index] = args.Result;
Interlocked.Increment(ref completedRequests); Interlocked.Increment(ref completedRequests);
if (Interlocked.Equals(completedRequests, ConnectionCount)) if (Equals(completedRequests, ConnectionCount))
{ {
byte[] mergedFileBytes = new byte[_buildSize]; byte[] mergedFileBytes = new byte[_buildSize];
for (int connectionIndex = 0, destinationOffset = 0; connectionIndex < ConnectionCount; connectionIndex++) for (int connectionIndex = 0, destinationOffset = 0; connectionIndex < ConnectionCount; connectionIndex++)

View File

@@ -32,8 +32,7 @@
<PackageReference Include="OpenTK.Core" Version="4.7.5" /> <PackageReference Include="OpenTK.Core" Version="4.7.5" />
<PackageReference Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" /> <PackageReference Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" />
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.1-build10" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" /> <PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.1-build12" />
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies.osx" Version="5.0.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'win10-x64'" />
<PackageReference Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'win10-x64'" /> <PackageReference Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'win10-x64'" />
<PackageReference Include="Silk.NET.Vulkan" Version="2.16.0" /> <PackageReference Include="Silk.NET.Vulkan" Version="2.16.0" />
<PackageReference Include="Silk.NET.Vulkan.Extensions.EXT" Version="2.16.0" /> <PackageReference Include="Silk.NET.Vulkan.Extensions.EXT" Version="2.16.0" />
@@ -41,6 +40,9 @@
<PackageReference Include="SPB" Version="0.0.4-build28" /> <PackageReference Include="SPB" Version="0.0.4-build28" />
<PackageReference Include="SharpZipLib" Version="1.4.1" /> <PackageReference Include="SharpZipLib" Version="1.4.1" />
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.4" /> <PackageReference Include="SixLabors.ImageSharp" Version="1.0.4" />
<!--NOTE: DO NOT REMOVE, THIS IS REQUIRED AS A RESULT OF A TRIMMING ISSUE IN AVALONIA -->
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -66,7 +66,7 @@ namespace Ryujinx.Ava.Ui.Applet
}); });
} }
private void AvaloniaDynamicTextInputHandler_KeyRelease(object sender, Avalonia.Input.KeyEventArgs e) private void AvaloniaDynamicTextInputHandler_KeyRelease(object sender, KeyEventArgs e)
{ {
var key = (HidKey)AvaloniaKeyboardMappingHelper.ToInputKey(e.Key); var key = (HidKey)AvaloniaKeyboardMappingHelper.ToInputKey(e.Key);

View File

@@ -222,7 +222,7 @@ namespace Ryujinx.Ava.Ui.Controls
content.MinHeight = 80; content.MinHeight = 80;
SymbolIcon icon = new SymbolIcon { Symbol = (Symbol)symbol, Margin = new Avalonia.Thickness(10) }; SymbolIcon icon = new SymbolIcon { Symbol = (Symbol)symbol, Margin = new Thickness(10) };
icon.FontSize = 40; icon.FontSize = 40;
icon.VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center; icon.VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center;
Grid.SetColumn(icon, 0); Grid.SetColumn(icon, 0);
@@ -232,15 +232,15 @@ namespace Ryujinx.Ava.Ui.Controls
TextBlock primaryLabel = new TextBlock() TextBlock primaryLabel = new TextBlock()
{ {
Text = primaryText, Text = primaryText,
Margin = new Avalonia.Thickness(5), Margin = new Thickness(5),
TextWrapping = Avalonia.Media.TextWrapping.Wrap, TextWrapping = TextWrapping.Wrap,
MaxWidth = 450 MaxWidth = 450
}; };
TextBlock secondaryLabel = new TextBlock() TextBlock secondaryLabel = new TextBlock()
{ {
Text = secondaryText, Text = secondaryText,
Margin = new Avalonia.Thickness(5), Margin = new Thickness(5),
TextWrapping = Avalonia.Media.TextWrapping.Wrap, TextWrapping = TextWrapping.Wrap,
MaxWidth = 450 MaxWidth = 450
}; };

View File

@@ -39,7 +39,7 @@ namespace Ryujinx.Ava.Ui.Controls
public EmbeddedWindow() public EmbeddedWindow()
{ {
var stateObserverable = this.GetObservable(Control.BoundsProperty); var stateObserverable = this.GetObservable(BoundsProperty);
stateObserverable.Subscribe(StateChanged); stateObserverable.Subscribe(StateChanged);
@@ -165,7 +165,7 @@ namespace Ryujinx.Ava.Ui.Controls
isLeft = msg == WindowsMessages.LBUTTONDOWN; isLeft = msg == WindowsMessages.LBUTTONDOWN;
this.RaiseEvent(new PointerPressedEventArgs( this.RaiseEvent(new PointerPressedEventArgs(
this, this,
new Avalonia.Input.Pointer(0, PointerType.Mouse, true), new Pointer(0, PointerType.Mouse, true),
root, root,
this.TranslatePoint(point, root).Value, this.TranslatePoint(point, root).Value,
(ulong)Environment.TickCount64, (ulong)Environment.TickCount64,
@@ -177,7 +177,7 @@ namespace Ryujinx.Ava.Ui.Controls
isLeft = msg == WindowsMessages.LBUTTONUP; isLeft = msg == WindowsMessages.LBUTTONUP;
this.RaiseEvent(new PointerReleasedEventArgs( this.RaiseEvent(new PointerReleasedEventArgs(
this, this,
new Avalonia.Input.Pointer(0, PointerType.Mouse, true), new Pointer(0, PointerType.Mouse, true),
root, root,
this.TranslatePoint(point, root).Value, this.TranslatePoint(point, root).Value,
(ulong)Environment.TickCount64, (ulong)Environment.TickCount64,
@@ -189,7 +189,7 @@ namespace Ryujinx.Ava.Ui.Controls
this.RaiseEvent(new PointerEventArgs( this.RaiseEvent(new PointerEventArgs(
PointerMovedEvent, PointerMovedEvent,
this, this,
new Avalonia.Input.Pointer(0, PointerType.Mouse, true), new Pointer(0, PointerType.Mouse, true),
root, root,
this.TranslatePoint(point, root).Value, this.TranslatePoint(point, root).Value,
(ulong)Environment.TickCount64, (ulong)Environment.TickCount64,

View File

@@ -138,6 +138,9 @@
<Style Selector="ListBoxItem:selected /template/ ContentPresenter"> <Style Selector="ListBoxItem:selected /template/ ContentPresenter">
<Setter Property="Background" Value="{DynamicResource AppListBackgroundColor}" /> <Setter Property="Background" Value="{DynamicResource AppListBackgroundColor}" />
</Style> </Style>
<Style Selector="ListBoxItem:selected /template/ Border#SelectionIndicator">
<Setter Property="MinHeight" Value="100" />
</Style>
<Style Selector="ListBoxItem:pointerover /template/ ContentPresenter"> <Style Selector="ListBoxItem:pointerover /template/ ContentPresenter">
<Setter Property="Background" Value="{DynamicResource AppListHoverBackgroundColor}" /> <Setter Property="Background" Value="{DynamicResource AppListHoverBackgroundColor}" />
</Style> </Style>

View File

@@ -545,7 +545,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
config = new StandardKeyboardInputConfig config = new StandardKeyboardInputConfig
{ {
Version = Ryujinx.Common.Configuration.Hid.InputConfig.CurrentVersion, Version = InputConfig.CurrentVersion,
Backend = InputBackendType.WindowKeyboard, Backend = InputBackendType.WindowKeyboard,
Id = id, Id = id,
ControllerType = ControllerType.ProController, ControllerType = ControllerType.ProController,
@@ -600,7 +600,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
config = new StandardControllerInputConfig config = new StandardControllerInputConfig
{ {
Version = Ryujinx.Common.Configuration.Hid.InputConfig.CurrentVersion, Version = InputConfig.CurrentVersion,
Backend = InputBackendType.GamepadSDL2, Backend = InputBackendType.GamepadSDL2,
Id = id, Id = id,
ControllerType = ControllerType.ProController, ControllerType = ControllerType.ProController,

View File

@@ -104,11 +104,11 @@ namespace Ryujinx.Ava.Ui.Windows
var device = ViewModel.Devices[ViewModel.Device]; var device = ViewModel.Devices[ViewModel.Device];
if (device.Type == Models.DeviceType.Keyboard) if (device.Type == DeviceType.Keyboard)
{ {
assigner = new KeyboardKeyAssigner((IKeyboard)ViewModel.SelectedGamepad); assigner = new KeyboardKeyAssigner((IKeyboard)ViewModel.SelectedGamepad);
} }
else if (device.Type == Models.DeviceType.Controller) else if (device.Type == DeviceType.Controller)
{ {
assigner = new GamepadButtonAssigner(ViewModel.SelectedGamepad, (ViewModel.Config as StandardControllerInputConfig).TriggerThreshold, forStick); assigner = new GamepadButtonAssigner(ViewModel.SelectedGamepad, (ViewModel.Config as StandardControllerInputConfig).TriggerThreshold, forStick);
} }

View File

@@ -12,9 +12,9 @@
xmlns:window="clr-namespace:Ryujinx.Ava.Ui.Windows" xmlns:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
Title="Ryujinx" Title="Ryujinx"
Width="1280" Width="1280"
Height="785" Height="777"
MinWidth="1092" MinWidth="1092"
MinHeight="680" MinHeight="672"
d:DesignHeight="720" d:DesignHeight="720"
d:DesignWidth="1280" d:DesignWidth="1280"
x:CompileBindings="True" x:CompileBindings="True"
@@ -552,9 +552,8 @@
<Grid <Grid
Name="StatusBar" Name="StatusBar"
Grid.Row="2" Grid.Row="2"
MinHeight="30" Margin="0"
Height="30" MinHeight="22"
Margin="0,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Bottom" VerticalAlignment="Bottom"
Background="{DynamicResource ThemeContentBackgroundColor}" Background="{DynamicResource ThemeContentBackgroundColor}"
@@ -568,7 +567,7 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel <StackPanel
Grid.Column="0" Grid.Column="0"
Margin="10,0" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
IsVisible="{Binding EnableNonGameRunningControls}"> IsVisible="{Binding EnableNonGameRunningControls}">
<Grid Margin="0"> <Grid Margin="0">
@@ -610,14 +609,14 @@
</StackPanel> </StackPanel>
<StackPanel <StackPanel
Grid.Column="1" Grid.Column="1"
Margin="10,0" Margin="0,2"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
IsVisible="{Binding IsGameRunning}" IsVisible="{Binding IsGameRunning}"
Orientation="Horizontal"> Orientation="Horizontal">
<TextBlock <TextBlock
Name="VsyncStatus" Name="VsyncStatus"
Margin="0,0,5,0" Margin="5,0,5,0"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
Foreground="{Binding VsyncColor}" Foreground="{Binding VsyncColor}"
@@ -628,7 +627,7 @@
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="2,0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding !ShowLoadProgress}" />
@@ -644,7 +643,7 @@
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="2,0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding !ShowLoadProgress}" />
@@ -660,13 +659,13 @@
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="2,0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding !ShowLoadProgress}" />
<ui:ToggleSplitButton <ui:ToggleSplitButton
Name="VolumeStatus" Name="VolumeStatus"
Padding="5" Padding="5,0,5,0"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
@@ -679,6 +678,7 @@
<Flyout Placement="Bottom" ShowMode="TransientWithDismissOnPointerMoveAway"> <Flyout Placement="Bottom" ShowMode="TransientWithDismissOnPointerMoveAway">
<Grid Margin="0"> <Grid Margin="0">
<Slider <Slider
MaxHeight="40"
Width="150" Width="150"
Margin="0" Margin="0"
Padding="0" Padding="0"
@@ -697,7 +697,7 @@
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="2,0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding !ShowLoadProgress}" />
@@ -711,7 +711,7 @@
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="2,0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding !ShowLoadProgress}" />
@@ -725,7 +725,7 @@
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="2,0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding !ShowLoadProgress}" />
@@ -739,7 +739,7 @@
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="2,0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding !ShowLoadProgress}" />
@@ -753,7 +753,7 @@
</StackPanel> </StackPanel>
<StackPanel <StackPanel
Grid.Column="3" Grid.Column="3"
Margin="10,0" Margin="0,0,5,0"
VerticalAlignment="Center" VerticalAlignment="Center"
IsVisible="{Binding ShowFirmwareStatus}" IsVisible="{Binding ShowFirmwareStatus}"
Orientation="Horizontal"> Orientation="Horizontal">

View File

@@ -7,7 +7,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="MsgPack.Cli" Version="1.0.1" /> <PackageReference Include="MsgPack.Cli" Version="1.0.1" />
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
<PackageReference Include="System.Management" Version="7.0.0" /> <PackageReference Include="System.Management" Version="7.0.0" />
</ItemGroup> </ItemGroup>

View File

@@ -1,6 +1,5 @@
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using System; using System;
using System.Drawing;
using System.Globalization; using System.Globalization;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@@ -51,7 +50,7 @@ namespace Ryujinx.Common.System
{ {
if (OperatingSystem.IsWindows()) if (OperatingSystem.IsWindows())
{ {
userDpiScale = Graphics.FromHwnd(IntPtr.Zero).DpiX; userDpiScale = GdiPlusHelper.GetDpiX(IntPtr.Zero);
} }
else if (OperatingSystem.IsLinux()) else if (OperatingSystem.IsLinux())
{ {

View File

@@ -0,0 +1,76 @@
using System;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
namespace Ryujinx.Common.System
{
[SupportedOSPlatform("windows")]
public static class GdiPlusHelper
{
private const string LibraryName = "gdiplus.dll";
private static readonly IntPtr _initToken;
static GdiPlusHelper()
{
CheckStatus(GdiplusStartup(out _initToken, StartupInputEx.Default, out _));
}
private static void CheckStatus(int gdiStatus)
{
if (gdiStatus != 0)
{
throw new Exception($"GDI Status Error: {gdiStatus}");
}
}
private struct StartupInputEx
{
public int GdiplusVersion;
#pragma warning disable CS0649
public IntPtr DebugEventCallback;
public int SuppressBackgroundThread;
public int SuppressExternalCodecs;
public int StartupParameters;
#pragma warning restore CS0649
public static StartupInputEx Default => new StartupInputEx
{
// We assume Windows 8 and upper
GdiplusVersion = 2,
DebugEventCallback = IntPtr.Zero,
SuppressBackgroundThread = 0,
SuppressExternalCodecs = 0,
StartupParameters = 0,
};
}
private struct StartupOutput
{
public IntPtr NotificationHook;
public IntPtr NotificationUnhook;
}
[DllImport(LibraryName)]
private static extern int GdiplusStartup(out IntPtr token, in StartupInputEx input, out StartupOutput output);
[DllImport(LibraryName)]
private static extern int GdipCreateFromHWND(IntPtr hwnd, out IntPtr graphics);
[DllImport(LibraryName)]
private static extern int GdipDeleteGraphics(IntPtr graphics);
[DllImport(LibraryName)]
private static extern int GdipGetDpiX(IntPtr graphics, out float dpi);
public static float GetDpiX(IntPtr hwnd)
{
CheckStatus(GdipCreateFromHWND(hwnd, out IntPtr graphicsHandle));
CheckStatus(GdipGetDpiX(graphicsHandle, out float result));
CheckStatus(GdipDeleteGraphics(graphicsHandle));
return result;
}
}
}

View File

@@ -61,7 +61,7 @@ namespace Ryujinx.Graphics.GAL
AddressMode.ClampToEdge, AddressMode.ClampToEdge,
AddressMode.ClampToEdge, AddressMode.ClampToEdge,
CompareMode.None, CompareMode.None,
GAL.CompareOp.Always, CompareOp.Always,
new ColorF(0f, 0f, 0f, 0f), new ColorF(0f, 0f, 0f, 0f),
0f, 0f,
0f, 0f,

View File

@@ -253,14 +253,19 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// Indicates that any storage buffer use is unaligned. /// Indicates that any storage buffer use is unaligned.
/// </summary> /// </summary>
/// <param name="value">The new value</param> /// <param name="value">The new value</param>
public void SetHasUnalignedStorageBuffer(bool value) /// <returns>True if the unaligned state changed, false otherwise</returns>
public bool SetHasUnalignedStorageBuffer(bool value)
{ {
if (value != _graphics.HasUnalignedStorageBuffer) if (value != _graphics.HasUnalignedStorageBuffer)
{ {
_graphics.HasUnalignedStorageBuffer = value; _graphics.HasUnalignedStorageBuffer = value;
Signal(); Signal();
return true;
} }
return false;
} }
/// <summary> /// <summary>

View File

@@ -304,14 +304,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
private void CommitBindings() private void CommitBindings()
{ {
var buffers = _channel.BufferManager;
var hasUnaligned = buffers.HasUnalignedStorageBuffers;
UpdateStorageBuffers(); UpdateStorageBuffers();
if (!_channel.TextureManager.CommitGraphicsBindings(_shaderSpecState) || (buffers.HasUnalignedStorageBuffers != hasUnaligned)) bool unalignedChanged = _currentSpecState.SetHasUnalignedStorageBuffer(_channel.BufferManager.HasUnalignedStorageBuffers);
if (!_channel.TextureManager.CommitGraphicsBindings(_shaderSpecState) || unalignedChanged)
{ {
_currentSpecState.SetHasUnalignedStorageBuffer(buffers.HasUnalignedStorageBuffers);
// Shader must be reloaded. _vtgWritesRtLayer should not change. // Shader must be reloaded. _vtgWritesRtLayer should not change.
UpdateShaderState(); UpdateShaderState();
} }

View File

@@ -110,7 +110,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
/// <summary> /// <summary>
/// Texture target. /// Texture target.
/// </summary> /// </summary>
public Image.TextureTarget TextureTarget; public TextureTarget TextureTarget;
/// <summary> /// <summary>
/// Indicates if the coordinates used to sample the texture are normalized or not (0.0..1.0 or 0..Width/Height). /// Indicates if the coordinates used to sample the texture are normalized or not (0.0..1.0 or 0..Width/Height).
@@ -331,7 +331,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
int cbufSlot, int cbufSlot,
uint format, uint format,
bool formatSrgb, bool formatSrgb,
Image.TextureTarget target, TextureTarget target,
bool coordNormalized) bool coordNormalized)
{ {
Box<TextureSpecializationState> state = GetOrCreateTextureSpecState(stageIndex, handle, cbufSlot); Box<TextureSpecializationState> state = GetOrCreateTextureSpecState(stageIndex, handle, cbufSlot);
@@ -415,7 +415,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
/// <param name="stageIndex">Shader stage where the texture is used</param> /// <param name="stageIndex">Shader stage where the texture is used</param>
/// <param name="handle">Offset in words of the texture handle on the texture buffer</param> /// <param name="handle">Offset in words of the texture handle on the texture buffer</param>
/// <param name="cbufSlot">Slot of the texture buffer constant buffer</param> /// <param name="cbufSlot">Slot of the texture buffer constant buffer</param>
public Image.TextureTarget GetTextureTarget(int stageIndex, int handle, int cbufSlot) public TextureTarget GetTextureTarget(int stageIndex, int handle, int cbufSlot)
{ {
return GetTextureSpecState(stageIndex, handle, cbufSlot).Value.TextureTarget; return GetTextureSpecState(stageIndex, handle, cbufSlot).Value.TextureTarget;
} }

View File

@@ -10,8 +10,6 @@ using static Spv.Specification;
namespace Ryujinx.Graphics.Shader.CodeGen.Spirv namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
{ {
using SpvInstruction = Spv.Generator.Instruction;
static class Declarations static class Declarations
{ {
// At least 16 attributes are guaranteed by the spec. // At least 16 attributes are guaranteed by the spec.
@@ -60,7 +58,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
for (int funcIndex = 0; funcIndex < functions.Count; funcIndex++) for (int funcIndex = 0; funcIndex < functions.Count; funcIndex++)
{ {
StructuredFunction function = functions[funcIndex]; StructuredFunction function = functions[funcIndex];
SpvInstruction[] locals = new SpvInstruction[function.InArguments.Length]; Instruction[] locals = new Instruction[function.InArguments.Length];
for (int i = 0; i < function.InArguments.Length; i++) for (int i = 0; i < function.InArguments.Length; i++)
{ {
@@ -122,7 +120,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
context.SharedMemory = DeclareMemory(context, StorageClass.Workgroup, size); context.SharedMemory = DeclareMemory(context, StorageClass.Workgroup, size);
} }
private static SpvInstruction DeclareMemory(CodeGenContext context, StorageClass storage, int size) private static Instruction DeclareMemory(CodeGenContext context, StorageClass storage, int size)
{ {
var arrayType = context.TypeArray(context.TypeU32(), context.Constant(context.TypeU32(), size)); var arrayType = context.TypeArray(context.TypeU32(), context.Constant(context.TypeU32(), size));
var pointerType = context.TypePointer(storage, arrayType); var pointerType = context.TypePointer(storage, arrayType);

View File

@@ -272,7 +272,7 @@ namespace Ryujinx.Graphics.Vulkan
_gd, _gd,
cbs.CommandBuffer, cbs.CommandBuffer,
dstBuffer, dstBuffer,
BufferHolder.DefaultAccessFlags, DefaultAccessFlags,
AccessFlags.TransferWriteBit, AccessFlags.TransferWriteBit,
PipelineStageFlags.AllCommandsBit, PipelineStageFlags.AllCommandsBit,
PipelineStageFlags.TransferBit, PipelineStageFlags.TransferBit,
@@ -294,7 +294,7 @@ namespace Ryujinx.Graphics.Vulkan
cbs.CommandBuffer, cbs.CommandBuffer,
dstBuffer, dstBuffer,
AccessFlags.TransferWriteBit, AccessFlags.TransferWriteBit,
BufferHolder.DefaultAccessFlags, DefaultAccessFlags,
PipelineStageFlags.TransferBit, PipelineStageFlags.TransferBit,
PipelineStageFlags.AllCommandsBit, PipelineStageFlags.AllCommandsBit,
dstOffset, dstOffset,
@@ -319,7 +319,7 @@ namespace Ryujinx.Graphics.Vulkan
gd, gd,
cbs.CommandBuffer, cbs.CommandBuffer,
dstBuffer, dstBuffer,
BufferHolder.DefaultAccessFlags, DefaultAccessFlags,
AccessFlags.TransferWriteBit, AccessFlags.TransferWriteBit,
PipelineStageFlags.AllCommandsBit, PipelineStageFlags.AllCommandsBit,
PipelineStageFlags.TransferBit, PipelineStageFlags.TransferBit,
@@ -335,7 +335,7 @@ namespace Ryujinx.Graphics.Vulkan
cbs.CommandBuffer, cbs.CommandBuffer,
dstBuffer, dstBuffer,
AccessFlags.TransferWriteBit, AccessFlags.TransferWriteBit,
BufferHolder.DefaultAccessFlags, DefaultAccessFlags,
PipelineStageFlags.TransferBit, PipelineStageFlags.TransferBit,
PipelineStageFlags.AllCommandsBit, PipelineStageFlags.AllCommandsBit,
dstOffset, dstOffset,

View File

@@ -97,7 +97,7 @@ namespace Ryujinx.Graphics.Vulkan
_dummyBuffer = gd.BufferManager.Create(gd, 0x10000, forConditionalRendering: false, deviceLocal: true); _dummyBuffer = gd.BufferManager.Create(gd, 0x10000, forConditionalRendering: false, deviceLocal: true);
} }
_dummyTexture = gd.CreateTextureView(new GAL.TextureCreateInfo( _dummyTexture = gd.CreateTextureView(new TextureCreateInfo(
1, 1,
1, 1,
1, 1,

View File

@@ -3,7 +3,7 @@ using System;
namespace Ryujinx.Graphics.Vulkan namespace Ryujinx.Graphics.Vulkan
{ {
readonly struct DisposableBufferView : System.IDisposable readonly struct DisposableBufferView : IDisposable
{ {
private readonly Vk _api; private readonly Vk _api;
private readonly Device _device; private readonly Device _device;

View File

@@ -86,7 +86,7 @@ namespace Ryujinx.Graphics.Vulkan
iter++; iter++;
} }
DescriptorSetLayout[] layouts = new DescriptorSetLayout[PipelineFull.DescriptorSetLayouts]; DescriptorSetLayout[] layouts = new DescriptorSetLayout[PipelineBase.DescriptorSetLayouts];
var uDescriptorSetLayoutCreateInfo = new DescriptorSetLayoutCreateInfo() var uDescriptorSetLayoutCreateInfo = new DescriptorSetLayoutCreateInfo()
{ {
@@ -117,10 +117,10 @@ namespace Ryujinx.Graphics.Vulkan
BindingCount = (uint)iCount BindingCount = (uint)iCount
}; };
gd.Api.CreateDescriptorSetLayout(device, uDescriptorSetLayoutCreateInfo, null, out layouts[PipelineFull.UniformSetIndex]).ThrowOnError(); gd.Api.CreateDescriptorSetLayout(device, uDescriptorSetLayoutCreateInfo, null, out layouts[PipelineBase.UniformSetIndex]).ThrowOnError();
gd.Api.CreateDescriptorSetLayout(device, sDescriptorSetLayoutCreateInfo, null, out layouts[PipelineFull.StorageSetIndex]).ThrowOnError(); gd.Api.CreateDescriptorSetLayout(device, sDescriptorSetLayoutCreateInfo, null, out layouts[PipelineBase.StorageSetIndex]).ThrowOnError();
gd.Api.CreateDescriptorSetLayout(device, tDescriptorSetLayoutCreateInfo, null, out layouts[PipelineFull.TextureSetIndex]).ThrowOnError(); gd.Api.CreateDescriptorSetLayout(device, tDescriptorSetLayoutCreateInfo, null, out layouts[PipelineBase.TextureSetIndex]).ThrowOnError();
gd.Api.CreateDescriptorSetLayout(device, iDescriptorSetLayoutCreateInfo, null, out layouts[PipelineFull.ImageSetIndex]).ThrowOnError(); gd.Api.CreateDescriptorSetLayout(device, iDescriptorSetLayoutCreateInfo, null, out layouts[PipelineBase.ImageSetIndex]).ThrowOnError();
fixed (DescriptorSetLayout* pLayouts = layouts) fixed (DescriptorSetLayout* pLayouts = layouts)
{ {
@@ -128,7 +128,7 @@ namespace Ryujinx.Graphics.Vulkan
{ {
SType = StructureType.PipelineLayoutCreateInfo, SType = StructureType.PipelineLayoutCreateInfo,
PSetLayouts = pLayouts, PSetLayouts = pLayouts,
SetLayoutCount = PipelineFull.DescriptorSetLayouts SetLayoutCount = PipelineBase.DescriptorSetLayouts
}; };
gd.Api.CreatePipelineLayout(device, &pipelineLayoutCreateInfo, null, out layout).ThrowOnError(); gd.Api.CreatePipelineLayout(device, &pipelineLayoutCreateInfo, null, out layout).ThrowOnError();
@@ -191,7 +191,7 @@ namespace Ryujinx.Graphics.Vulkan
Set(iLayoutBindings, DescriptorType.StorageImage, ref iIndex, shader.Bindings.ImageBindings); Set(iLayoutBindings, DescriptorType.StorageImage, ref iIndex, shader.Bindings.ImageBindings);
} }
DescriptorSetLayout[] layouts = new DescriptorSetLayout[PipelineFull.DescriptorSetLayouts]; DescriptorSetLayout[] layouts = new DescriptorSetLayout[PipelineBase.DescriptorSetLayouts];
var uDescriptorSetLayoutCreateInfo = new DescriptorSetLayoutCreateInfo() var uDescriptorSetLayoutCreateInfo = new DescriptorSetLayoutCreateInfo()
{ {
@@ -221,10 +221,10 @@ namespace Ryujinx.Graphics.Vulkan
BindingCount = (uint)iCount BindingCount = (uint)iCount
}; };
gd.Api.CreateDescriptorSetLayout(device, uDescriptorSetLayoutCreateInfo, null, out layouts[PipelineFull.UniformSetIndex]).ThrowOnError(); gd.Api.CreateDescriptorSetLayout(device, uDescriptorSetLayoutCreateInfo, null, out layouts[PipelineBase.UniformSetIndex]).ThrowOnError();
gd.Api.CreateDescriptorSetLayout(device, sDescriptorSetLayoutCreateInfo, null, out layouts[PipelineFull.StorageSetIndex]).ThrowOnError(); gd.Api.CreateDescriptorSetLayout(device, sDescriptorSetLayoutCreateInfo, null, out layouts[PipelineBase.StorageSetIndex]).ThrowOnError();
gd.Api.CreateDescriptorSetLayout(device, tDescriptorSetLayoutCreateInfo, null, out layouts[PipelineFull.TextureSetIndex]).ThrowOnError(); gd.Api.CreateDescriptorSetLayout(device, tDescriptorSetLayoutCreateInfo, null, out layouts[PipelineBase.TextureSetIndex]).ThrowOnError();
gd.Api.CreateDescriptorSetLayout(device, iDescriptorSetLayoutCreateInfo, null, out layouts[PipelineFull.ImageSetIndex]).ThrowOnError(); gd.Api.CreateDescriptorSetLayout(device, iDescriptorSetLayoutCreateInfo, null, out layouts[PipelineBase.ImageSetIndex]).ThrowOnError();
fixed (DescriptorSetLayout* pLayouts = layouts) fixed (DescriptorSetLayout* pLayouts = layouts)
{ {
@@ -232,7 +232,7 @@ namespace Ryujinx.Graphics.Vulkan
{ {
SType = StructureType.PipelineLayoutCreateInfo, SType = StructureType.PipelineLayoutCreateInfo,
PSetLayouts = pLayouts, PSetLayouts = pLayouts,
SetLayoutCount = PipelineFull.DescriptorSetLayouts SetLayoutCount = PipelineBase.DescriptorSetLayouts
}; };
gd.Api.CreatePipelineLayout(device, &pipelineLayoutCreateInfo, null, out layout).ThrowOnError(); gd.Api.CreatePipelineLayout(device, &pipelineLayoutCreateInfo, null, out layout).ThrowOnError();

View File

@@ -157,7 +157,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
int supportedLanguages = (int)context.Device.Application.ControlData.Value.SupportedLanguageFlag; int supportedLanguages = (int)context.Device.Application.ControlData.Value.SupportedLanguageFlag;
int firstSupported = BitOperations.TrailingZeroCount(supportedLanguages); int firstSupported = BitOperations.TrailingZeroCount(supportedLanguages);
if (firstSupported > (int)SystemState.TitleLanguage.BrazilianPortuguese) if (firstSupported > (int)TitleLanguage.BrazilianPortuguese)
{ {
Logger.Warning?.Print(LogClass.ServiceAm, "Application has zero supported languages"); Logger.Warning?.Print(LogClass.ServiceAm, "Application has zero supported languages");
@@ -170,7 +170,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
// TODO: In the future, a GUI could enable user-specified search priority // TODO: In the future, a GUI could enable user-specified search priority
if (((1 << (int)context.Device.System.State.DesiredTitleLanguage) & supportedLanguages) == 0) if (((1 << (int)context.Device.System.State.DesiredTitleLanguage) & supportedLanguages) == 0)
{ {
SystemLanguage newLanguage = Enum.Parse<SystemLanguage>(Enum.GetName(typeof(SystemState.TitleLanguage), firstSupported)); SystemLanguage newLanguage = Enum.Parse<SystemLanguage>(Enum.GetName(typeof(TitleLanguage), firstSupported));
desiredLanguageCode = SystemStateMgr.GetLanguageCode((int)newLanguage); desiredLanguageCode = SystemStateMgr.GetLanguageCode((int)newLanguage);
Logger.Info?.Print(LogClass.ServiceAm, $"Application doesn't support configured language. Using {newLanguage}"); Logger.Info?.Print(LogClass.ServiceAm, $"Application doesn't support configured language. Using {newLanguage}");

View File

@@ -901,7 +901,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs
[CommandHipc(606)] [CommandHipc(606)]
public ResultCode GetRightsId(ServiceCtx context) public ResultCode GetRightsId(ServiceCtx context)
{ {
LibHac.Ncm.StorageId storageId = (LibHac.Ncm.StorageId)context.RequestData.ReadInt64(); StorageId storageId = (StorageId)context.RequestData.ReadInt64();
ProgramId programId = context.RequestData.ReadStruct<ProgramId>(); ProgramId programId = context.RequestData.ReadStruct<ProgramId>();
Result result = _baseFileSystemProxy.Get.GetRightsId(out RightsId rightsId, programId, storageId); Result result = _baseFileSystemProxy.Get.GetRightsId(out RightsId rightsId, programId, storageId);

View File

@@ -130,7 +130,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone
} }
List<(int Offset, string Location, string Abbr)> outList = new List<(int Offset, string Location, string Abbr)>(); List<(int Offset, string Location, string Abbr)> outList = new List<(int Offset, string Location, string Abbr)>();
var now = System.DateTimeOffset.Now.ToUnixTimeSeconds(); var now = DateTimeOffset.Now.ToUnixTimeSeconds();
using (IStorage ncaStorage = new LocalStorage(_virtualFileSystem.SwitchPathToSystemPath(tzBinaryContentPath), FileAccess.Read, FileMode.Open)) using (IStorage ncaStorage = new LocalStorage(_virtualFileSystem.SwitchPathToSystemPath(tzBinaryContentPath), FileAccess.Read, FileMode.Open))
using (IFileSystem romfs = new Nca(_virtualFileSystem.KeySet, ncaStorage).OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel)) using (IFileSystem romfs = new Nca(_virtualFileSystem.KeySet, ncaStorage).OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel))
{ {

View File

@@ -12,8 +12,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="OpenTK.Core" Version="4.7.5" /> <PackageReference Include="OpenTK.Core" Version="4.7.5" />
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.1-build10" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" /> <PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.1-build12" />
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies.osx" Version="5.0.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'win10-x64'" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -122,14 +122,14 @@ namespace Ryujinx.Tests.Unicorn
{ {
if (!_isDisposed) if (!_isDisposed)
{ {
Interface.Checked(Native.Interface.uc_close(uc)); Interface.Checked(Interface.uc_close(uc));
_isDisposed = true; _isDisposed = true;
} }
} }
public void RunForCount(ulong count) public void RunForCount(ulong count)
{ {
Interface.Checked(Native.Interface.uc_emu_start(uc, this.PC, 0xFFFFFFFFFFFFFFFFu, 0, count)); Interface.Checked(Interface.uc_emu_start(uc, this.PC, 0xFFFFFFFFFFFFFFFFu, 0, count));
} }
public void Step() public void Step()
@@ -222,7 +222,7 @@ namespace Ryujinx.Tests.Unicorn
{ {
byte[] data = new byte[4]; byte[] data = new byte[4];
Interface.Checked(Native.Interface.uc_reg_read(uc, (int)register, data)); Interface.Checked(Interface.uc_reg_read(uc, (int)register, data));
return (uint)BitConverter.ToInt32(data, 0); return (uint)BitConverter.ToInt32(data, 0);
} }

View File

@@ -111,14 +111,14 @@ namespace Ryujinx.Tests.Unicorn
{ {
if (!_isDisposed) if (!_isDisposed)
{ {
Interface.Checked(Native.Interface.uc_close(uc)); Interface.Checked(Interface.uc_close(uc));
_isDisposed = true; _isDisposed = true;
} }
} }
public void RunForCount(ulong count) public void RunForCount(ulong count)
{ {
Interface.Checked(Native.Interface.uc_emu_start(uc, this.PC, 0xFFFFFFFFFFFFFFFFu, 0, count)); Interface.Checked(Interface.uc_emu_start(uc, this.PC, 0xFFFFFFFFFFFFFFFFu, 0, count));
} }
public void Step() public void Step()
@@ -241,7 +241,7 @@ namespace Ryujinx.Tests.Unicorn
{ {
byte[] data = new byte[8]; byte[] data = new byte[8];
Interface.Checked(Native.Interface.uc_reg_read(uc, (int)register, data)); Interface.Checked(Interface.uc_reg_read(uc, (int)register, data));
return (ulong)BitConverter.ToInt64(data, 0); return (ulong)BitConverter.ToInt64(data, 0);
} }

View File

@@ -32,7 +32,7 @@ namespace Ryujinx.Modules
_mainWindow = mainWindow; _mainWindow = mainWindow;
_buildUrl = buildUrl; _buildUrl = buildUrl;
Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png"); Icon = new Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
MainText.Text = "Do you want to update Ryujinx to the latest version?"; MainText.Text = "Do you want to update Ryujinx to the latest version?";
SecondaryText.Text = $"{Program.Version} -> {newVersion}"; SecondaryText.Text = $"{Program.Version} -> {newVersion}";

View File

@@ -293,7 +293,7 @@ namespace Ryujinx.Modules
list[index] = args.Result; list[index] = args.Result;
Interlocked.Increment(ref completedRequests); Interlocked.Increment(ref completedRequests);
if (Interlocked.Equals(completedRequests, ConnectionCount)) if (Equals(completedRequests, ConnectionCount))
{ {
byte[] mergedFileBytes = new byte[_buildSize]; byte[] mergedFileBytes = new byte[_buildSize];
for (int connectionIndex = 0, destinationOffset = 0; connectionIndex < ConnectionCount; connectionIndex++) for (int connectionIndex = 0, destinationOffset = 0; connectionIndex < ConnectionCount; connectionIndex++)

View File

@@ -151,7 +151,7 @@ namespace Ryujinx
// Initialize SDL2 driver // Initialize SDL2 driver
SDL2Driver.MainThreadDispatcher = action => SDL2Driver.MainThreadDispatcher = action =>
{ {
Gtk.Application.Invoke(delegate Application.Invoke(delegate
{ {
action(); action();
}); });
@@ -282,7 +282,7 @@ namespace Ryujinx
? GraphicsBackend.Vulkan ? GraphicsBackend.Vulkan
: GraphicsBackend.OpenGl; : GraphicsBackend.OpenGl;
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath); ConfigurationState.Instance.ToFileFormat().SaveConfig(ConfigurationPath);
} }
Application.Run(); Application.Run();

View File

@@ -22,8 +22,7 @@
<PackageReference Include="Ryujinx.GtkSharp" Version="3.24.24.59-ryujinx" /> <PackageReference Include="Ryujinx.GtkSharp" Version="3.24.24.59-ryujinx" />
<PackageReference Include="GtkSharp.Dependencies" Version="1.1.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" /> <PackageReference Include="GtkSharp.Dependencies" Version="1.1.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" />
<PackageReference Include="GtkSharp.Dependencies.osx" Version="0.0.5" Condition="'$(RuntimeIdentifier)' == 'osx-x64' OR '$(RuntimeIdentifier)' == 'osx-arm64'" /> <PackageReference Include="GtkSharp.Dependencies.osx" Version="0.0.5" Condition="'$(RuntimeIdentifier)' == 'osx-x64' OR '$(RuntimeIdentifier)' == 'osx-arm64'" />
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.1-build10" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" /> <PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.1-build12" />
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies.osx" Version="5.0.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'win10-x64'" />
<PackageReference Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" /> <PackageReference Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" />
<PackageReference Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'win10-x64'" /> <PackageReference Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'win10-x64'" />
<PackageReference Include="OpenTK.Core" Version="4.7.5" /> <PackageReference Include="OpenTK.Core" Version="4.7.5" />

View File

@@ -132,7 +132,7 @@ namespace Ryujinx.Ui
private void HideCursorStateChanged(object sender, ReactiveEventArgs<bool> state) private void HideCursorStateChanged(object sender, ReactiveEventArgs<bool> state)
{ {
Gtk.Application.Invoke(delegate Application.Invoke(delegate
{ {
_hideCursorOnIdle = state.NewValue; _hideCursorOnIdle = state.NewValue;
@@ -248,7 +248,7 @@ namespace Ryujinx.Ui
&& keyboard.IsPressed(Key.Enter)) && keyboard.IsPressed(Key.Enter))
|| keyboard.IsPressed(Key.Escape); || keyboard.IsPressed(Key.Escape);
bool fullScreenToggled = ParentWindow.State.HasFlag(Gdk.WindowState.Fullscreen); bool fullScreenToggled = ParentWindow.State.HasFlag(WindowState.Fullscreen);
if (toggleFullscreen != _toggleFullscreen) if (toggleFullscreen != _toggleFullscreen)
{ {
@@ -340,7 +340,7 @@ namespace Ryujinx.Ui
string directory = AppDataManager.Mode switch string directory = AppDataManager.Mode switch
{ {
AppDataManager.LaunchMode.Portable => System.IO.Path.Combine(AppDataManager.BaseDirPath, "screenshots"), AppDataManager.LaunchMode.Portable => System.IO.Path.Combine(AppDataManager.BaseDirPath, "screenshots"),
_ => System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyPictures), "Ryujinx") _ => System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Ryujinx")
}; };
string path = System.IO.Path.Combine(directory, filename); string path = System.IO.Path.Combine(directory, filename);
@@ -434,7 +434,7 @@ namespace Ryujinx.Ui
if (_ticks >= _ticksPerFrame) if (_ticks >= _ticksPerFrame)
{ {
string dockedMode = ConfigurationState.Instance.System.EnableDockedMode ? "Docked" : "Handheld"; string dockedMode = ConfigurationState.Instance.System.EnableDockedMode ? "Docked" : "Handheld";
float scale = Graphics.Gpu.GraphicsConfig.ResScale; float scale = GraphicsConfig.ResScale;
if (scale != 1) if (scale != 1)
{ {
dockedMode += $" ({scale}x)"; dockedMode += $" ({scale}x)";