mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-05-27 15:39:14 +00:00
Compare commits
4 Commits
Canary-1.3
...
Canary-1.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa72b5a298 | ||
|
|
e02081c09e | ||
|
|
de70f66a27 | ||
|
|
6c1692ed60 |
@@ -588,8 +588,10 @@ namespace Ryujinx.Graphics.Vulkan
|
||||
dynamicStates[5] = DynamicState.StencilReference;
|
||||
dynamicStates[6] = DynamicState.BlendConstants;
|
||||
|
||||
if (supportsExtDynamicState)
|
||||
if (supportsExtDynamicState && (gd.SupportsMTL31 || !gd.IsMoltenVk))
|
||||
{
|
||||
// Requires Metal 3.1 and new MoltenVK, however extended dynamic states extension is not
|
||||
// available on older versions of MVK, so we can safely check only OS version.
|
||||
dynamicStates[dynamicStatesCount++] = DynamicState.VertexInputBindingStrideExt;
|
||||
}
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||
internal bool IsIntelArc { get; private set; }
|
||||
internal bool IsQualcommProprietary { get; private set; }
|
||||
internal bool IsMoltenVk { get; private set; }
|
||||
internal bool SupportsMTL31 { get; private set; }
|
||||
internal bool IsTBDR { get; private set; }
|
||||
internal bool IsSharedMemory { get; private set; }
|
||||
|
||||
@@ -123,6 +124,8 @@ namespace Ryujinx.Graphics.Vulkan
|
||||
// Any device running on MacOS is using MoltenVK, even Intel and AMD vendors.
|
||||
if (IsMoltenVk = OperatingSystem.IsMacOS())
|
||||
MVKInitialization.Initialize();
|
||||
|
||||
SupportsMTL31 = OperatingSystem.IsMacOSVersionAtLeast(14);
|
||||
}
|
||||
|
||||
public static VulkanRenderer Create(
|
||||
|
||||
@@ -443,6 +443,7 @@ namespace Ryujinx.HLE.HOS.Applets
|
||||
if ((newCalc.Flags & KeyboardCalcFlags.SetInputText) != 0)
|
||||
{
|
||||
_textValue = newCalc.InputText;
|
||||
_cursorBegin = _textValue.Length;
|
||||
updateText = true;
|
||||
|
||||
Logger.Debug?.Print(LogClass.ServiceAm, $"Input text set to {_textValue}");
|
||||
|
||||
@@ -155,9 +155,7 @@ namespace Ryujinx.Input.SDL3
|
||||
result |= GamepadFeaturesFlag.Led;
|
||||
}
|
||||
SDL_UnlockProperties(propID);
|
||||
|
||||
// NOTE: Do not call SDL_DestroyProperties here. These properties are owned
|
||||
// internally by SDL and are freed when SDL_CloseGamepad is called (in Dispose).
|
||||
SDL_DestroyProperties(propID);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -331,18 +331,28 @@ namespace Ryujinx.Input.SDL3
|
||||
|
||||
public IEnumerable<IGamepad> GetGamepads()
|
||||
{
|
||||
string[] ids;
|
||||
lock (_lock)
|
||||
lock (_gamepadsIds)
|
||||
{
|
||||
ids = _gamepadsIds.Values
|
||||
.Concat(_joyConsIds.Values)
|
||||
.Concat(_linkedJoyConsIds.Values)
|
||||
.ToArray();
|
||||
foreach (var gamepad in _gamepadsIds)
|
||||
{
|
||||
yield return GetGamepad(gamepad.Value);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (string id in ids)
|
||||
lock (_joyConsIds)
|
||||
{
|
||||
yield return GetGamepad(id);
|
||||
foreach (var gamepad in _joyConsIds)
|
||||
{
|
||||
yield return GetGamepad(gamepad.Value);
|
||||
}
|
||||
}
|
||||
|
||||
lock (_linkedJoyConsIds)
|
||||
{
|
||||
foreach (var gamepad in _linkedJoyConsIds)
|
||||
{
|
||||
yield return GetGamepad(gamepad.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -561,24 +561,25 @@ namespace Ryujinx.Input.HLE
|
||||
!controllerConfig.Rumble.EnableRumble)
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
VibrationValue leftVibrationValue = dualVibrationValue.Item1;
|
||||
VibrationValue rightVibrationValue = dualVibrationValue.Item2;
|
||||
|
||||
|
||||
leftVibrationValue.AmplitudeLow *= controllerConfig.Rumble.WeakRumble;
|
||||
leftVibrationValue.AmplitudeHigh *= controllerConfig.Rumble.StrongRumble;
|
||||
rightVibrationValue.AmplitudeLow *= controllerConfig.Rumble.WeakRumble;
|
||||
rightVibrationValue.AmplitudeHigh *= controllerConfig.Rumble.StrongRumble;
|
||||
|
||||
|
||||
if (!controllerConfig.Rumble.UseHDRumble || _gamepad?.HDRumble(leftVibrationValue, rightVibrationValue) == false)
|
||||
{
|
||||
float low = Math.Min(1f, (float)((rightVibrationValue.AmplitudeLow * 0.85 + rightVibrationValue.AmplitudeHigh * 0.15)));
|
||||
float high = Math.Min(1f, (float)((leftVibrationValue.AmplitudeLow * 0.15 + leftVibrationValue.AmplitudeHigh * 0.85)));
|
||||
_gamepad?.Rumble(low, high, 0xFFFFFFFF);
|
||||
}
|
||||
|
||||
Logger.Debug?.Print(LogClass.Hid, $"Effect for {controllerConfig.PlayerIndex} " +
|
||||
|
||||
Logger.Debug?.Print(LogClass.Hid, $"Effect for {controllerConfig.PlayerIndex} " +
|
||||
// Value=value/multiplier * multiplier (result)
|
||||
$"L.low.amp={leftVibrationValue.AmplitudeLow / controllerConfig.Rumble.WeakRumble} * {controllerConfig.Rumble.WeakRumble} ({leftVibrationValue.AmplitudeLow}), " +
|
||||
$"L.high.amp={leftVibrationValue.AmplitudeHigh / controllerConfig.Rumble.WeakRumble} * {controllerConfig.Rumble.WeakRumble} ({leftVibrationValue.AmplitudeHigh}), " +
|
||||
|
||||
@@ -1094,10 +1094,10 @@ namespace Ryujinx.Ava.Systems
|
||||
{
|
||||
Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
if (_viewModel.StartGamesInFullscreen)
|
||||
if (_viewModel.StartGamesInFullscreen && _viewModel.WindowState is not WindowState.FullScreen)
|
||||
{
|
||||
_viewModel.WindowState = WindowState.FullScreen;
|
||||
_viewModel.Window.TitleBar.ExtendsContentIntoTitleBar = true;
|
||||
// Use the view model toggle so decoration ordering matches user toggles.
|
||||
_viewModel.ToggleFullscreen();
|
||||
}
|
||||
|
||||
if (_viewModel.WindowState is WindowState.FullScreen || _viewModel.StartGamesWithoutUi)
|
||||
|
||||
Reference in New Issue
Block a user