Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
0ec933a615 | ||
|
2135b6a51a | ||
|
00e35d9bf6 | ||
|
6dfb6ccf8c |
@@ -4,6 +4,11 @@ namespace ARMeilleure.CodeGen.X86
|
||||
{
|
||||
partial class Assembler
|
||||
{
|
||||
public static bool SupportsVexPrefix(X86Instruction inst)
|
||||
{
|
||||
return _instTable[(int)inst].Flags.HasFlag(InstructionFlags.Vex);
|
||||
}
|
||||
|
||||
private const int BadOp = 0;
|
||||
|
||||
[Flags]
|
||||
|
@@ -1297,11 +1297,15 @@ namespace ARMeilleure.CodeGen.X86
|
||||
{
|
||||
if (IsIntrinsic(operation.Instruction))
|
||||
{
|
||||
IntrinsicInfo info = IntrinsicTable.GetInfo(operation.Intrinsic);
|
||||
|
||||
bool hasVex = HardwareCapabilities.SupportsVexEncoding && Assembler.SupportsVexPrefix(info.Inst);
|
||||
|
||||
bool isUnary = operation.SourcesCount < 2;
|
||||
|
||||
bool hasVecDest = operation.Destination != default && operation.Destination.Type == OperandType.V128;
|
||||
|
||||
return !HardwareCapabilities.SupportsVexEncoding && !isUnary && hasVecDest;
|
||||
return !hasVex && !isUnary && hasVecDest;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@@ -82,8 +82,10 @@ namespace Ryujinx.Graphics.GAL
|
||||
Bc6HUfloat,
|
||||
Etc2RgbUnorm,
|
||||
Etc2RgbaUnorm,
|
||||
Etc2RgbPtaUnorm,
|
||||
Etc2RgbSrgb,
|
||||
Etc2RgbaSrgb,
|
||||
Etc2RgbPtaSrgb,
|
||||
R8Uscaled,
|
||||
R8Sscaled,
|
||||
R16Uscaled,
|
||||
|
@@ -93,8 +93,12 @@ namespace Ryujinx.Graphics.OpenGL
|
||||
Add(Format.Bc7Srgb, new FormatInfo(4, false, false, All.CompressedSrgbAlphaBptcUnorm));
|
||||
Add(Format.Bc6HSfloat, new FormatInfo(4, false, false, All.CompressedRgbBptcSignedFloat));
|
||||
Add(Format.Bc6HUfloat, new FormatInfo(4, false, false, All.CompressedRgbBptcUnsignedFloat));
|
||||
Add(Format.Etc2RgbUnorm, new FormatInfo(4, false, false, All.CompressedRgb8Etc2));
|
||||
Add(Format.Etc2RgbaUnorm, new FormatInfo(4, false, false, All.CompressedRgba8Etc2Eac));
|
||||
Add(Format.Etc2RgbPtaUnorm, new FormatInfo(4, false, false, All.CompressedRgb8PunchthroughAlpha1Etc2));
|
||||
Add(Format.Etc2RgbSrgb, new FormatInfo(4, false, false, All.CompressedSrgb8Etc2));
|
||||
Add(Format.Etc2RgbaSrgb, new FormatInfo(4, false, false, All.CompressedSrgb8Alpha8Etc2Eac));
|
||||
Add(Format.Etc2RgbPtaSrgb, new FormatInfo(4, false, false, All.CompressedSrgb8PunchthroughAlpha1Etc2));
|
||||
Add(Format.R8Uscaled, new FormatInfo(1, false, true, All.R8ui, PixelFormat.RedInteger, PixelType.UnsignedByte));
|
||||
Add(Format.R8Sscaled, new FormatInfo(1, false, true, All.R8i, PixelFormat.RedInteger, PixelType.Byte));
|
||||
Add(Format.R16Uscaled, new FormatInfo(1, false, true, All.R16ui, PixelFormat.RedInteger, PixelType.UnsignedShort));
|
||||
|
@@ -90,6 +90,12 @@ namespace Ryujinx.Graphics.Vulkan
|
||||
Add(Format.Bc7Srgb, VkFormat.BC7SrgbBlock);
|
||||
Add(Format.Bc6HSfloat, VkFormat.BC6HSfloatBlock);
|
||||
Add(Format.Bc6HUfloat, VkFormat.BC6HUfloatBlock);
|
||||
Add(Format.Etc2RgbUnorm, VkFormat.Etc2R8G8B8UnormBlock);
|
||||
Add(Format.Etc2RgbaUnorm, VkFormat.Etc2R8G8B8A8UnormBlock);
|
||||
Add(Format.Etc2RgbPtaUnorm, VkFormat.Etc2R8G8B8A1UnormBlock);
|
||||
Add(Format.Etc2RgbSrgb, VkFormat.Etc2R8G8B8SrgbBlock);
|
||||
Add(Format.Etc2RgbaSrgb, VkFormat.Etc2R8G8B8A8SrgbBlock);
|
||||
Add(Format.Etc2RgbPtaSrgb, VkFormat.Etc2R8G8B8A1SrgbBlock);
|
||||
Add(Format.R8Uscaled, VkFormat.R8Uscaled);
|
||||
Add(Format.R8Sscaled, VkFormat.R8Sscaled);
|
||||
Add(Format.R16Uscaled, VkFormat.R16Uscaled);
|
||||
|
@@ -72,9 +72,16 @@ namespace Ryujinx.HLE.HOS.Applets
|
||||
|
||||
int playerMin = argHeader.PlayerCountMin;
|
||||
int playerMax = argHeader.PlayerCountMax;
|
||||
bool singleMode = argHeader.EnableSingleMode != 0;
|
||||
|
||||
Logger.Stub?.PrintStub(LogClass.ServiceHid, $"ControllerApplet Arg {playerMin} {playerMax} {argHeader.EnableTakeOverConnection} {argHeader.EnableSingleMode}");
|
||||
|
||||
if (singleMode)
|
||||
{
|
||||
// Applications can set an arbitrary player range even with SingleMode, so clamp it
|
||||
playerMin = playerMax = 1;
|
||||
}
|
||||
|
||||
int configuredCount = 0;
|
||||
PlayerIndex primaryIndex = PlayerIndex.Unknown;
|
||||
while (!_system.Device.Hid.Npads.Validate(playerMin, playerMax, (ControllerType)privateArg.NpadStyleSet, out configuredCount, out primaryIndex))
|
||||
|
@@ -224,6 +224,17 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
||||
[CommandHipc(62)] // 4.0.0+
|
||||
// GetHdcpAuthenticationState() -> s32 state
|
||||
public ResultCode GetHdcpAuthenticationState(ServiceCtx context)
|
||||
{
|
||||
context.ResponseData.Write(0);
|
||||
|
||||
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
||||
[CommandHipc(66)] // 6.0.0+
|
||||
// SetCpuBoostMode(u32 cpu_boost_mode)
|
||||
public ResultCode SetCpuBoostMode(ServiceCtx context)
|
||||
|
@@ -2,6 +2,7 @@ using Ryujinx.Common.Logging;
|
||||
using Ryujinx.HLE.HOS.Ipc;
|
||||
using Ryujinx.HLE.HOS.Kernel.Common;
|
||||
using Ryujinx.HLE.HOS.Kernel.Threading;
|
||||
using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy.Types;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
||||
@@ -316,6 +317,22 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
||||
[CommandHipc(80)] // 4.0.0+
|
||||
// SetWirelessPriorityMode(s32 wireless_priority_mode)
|
||||
public ResultCode SetWirelessPriorityMode(ServiceCtx context)
|
||||
{
|
||||
WirelessPriorityMode wirelessPriorityMode = (WirelessPriorityMode)context.RequestData.ReadInt32();
|
||||
|
||||
if (wirelessPriorityMode > WirelessPriorityMode.Unknown2)
|
||||
{
|
||||
return ResultCode.InvalidParameters;
|
||||
}
|
||||
|
||||
Logger.Stub?.PrintStub(LogClass.ServiceAm, new { wirelessPriorityMode });
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
||||
[CommandHipc(90)] // 6.0.0+
|
||||
// GetAccumulatedSuspendedTickValue() -> u64
|
||||
public ResultCode GetAccumulatedSuspendedTickValue(ServiceCtx context)
|
||||
@@ -356,5 +373,21 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
||||
[CommandHipc(120)] // 11.0.0+
|
||||
// SaveCurrentScreenshot(s32 album_report_option)
|
||||
public ResultCode SaveCurrentScreenshot(ServiceCtx context)
|
||||
{
|
||||
AlbumReportOption albumReportOption = (AlbumReportOption)context.RequestData.ReadInt32();
|
||||
|
||||
if (albumReportOption > AlbumReportOption.Unknown3)
|
||||
{
|
||||
return ResultCode.InvalidParameters;
|
||||
}
|
||||
|
||||
Logger.Stub?.PrintStub(LogClass.ServiceAm, new { albumReportOption });
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,10 @@
|
||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy.Types
|
||||
{
|
||||
enum AlbumReportOption
|
||||
{
|
||||
OverlayNotDisplayed,
|
||||
OverlayDisplayed,
|
||||
Unknown2,
|
||||
Unknown3
|
||||
}
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy.Types
|
||||
{
|
||||
enum WirelessPriorityMode
|
||||
{
|
||||
Default,
|
||||
OptimizedForWlan,
|
||||
Unknown2
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user