mirror of
https://git.ryujinx.app/projects/Kenji-NX.git
synced 2026-09-20 17:51:13 +02:00
* Fixed an issue where games would boot loop because of an incorrect HID state.
* Turns out the SamplingNumber of the atomic input storage doesn't match the SamplingNumber of the input state held by the atomic storage, instead it is exactly double the value in the input state.
* Added new Condition struct to the HID Shared memory and populate it with dummy data to fix the no-controller crash (already merged).
* The audio renderer has been mostly updated to rev15, allowing rev15 games to launch.
* Biquad filters now use floats.
* Several structures have been renamed to match the SDK names, making it easier to compare functionality. A few names are still missing and will be changed at a later date.
* The new commands from rev15 have been added to the CommandType enum, but they are still missing from the code itself.
* Due to changes in the SDK layout, the time estimation functions are either missing or very well hidden (or Ghidra search functionality is useless). We can't fully implement the new commands until the timing data has been located.
* A few minor tweaks to the code have been made to more accurately match the SDK.
84 lines
2.6 KiB
C#
84 lines
2.6 KiB
C#
using Ryujinx.Common.Memory;
|
|
using Ryujinx.Common.Utilities;
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Ryujinx.Audio.Renderer.Parameter
|
|
{
|
|
/// <summary>
|
|
/// Input header for a splitter destination version 1 update.
|
|
/// </summary>
|
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
|
public struct SplitterDestinationInParameterVersion1 : ISplitterDestinationInParameter
|
|
{
|
|
/// <summary>
|
|
/// Magic of the input header.
|
|
/// </summary>
|
|
public uint Magic;
|
|
|
|
/// <summary>
|
|
/// Target splitter destination data id.
|
|
/// </summary>
|
|
public int Id;
|
|
|
|
/// <summary>
|
|
/// Mix buffer volumes storage.
|
|
/// </summary>
|
|
private MixArray _mixBufferVolume;
|
|
|
|
/// <summary>
|
|
/// The mix to output the result of the splitter.
|
|
/// </summary>
|
|
public int DestinationId;
|
|
|
|
/// <summary>
|
|
/// Set to true if in use.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.I1)]
|
|
public bool IsUsed;
|
|
|
|
/// <summary>
|
|
/// Set to true to force resetting the previous mix volumes.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.I1)]
|
|
public bool ResetPrevVolume;
|
|
|
|
/// <summary>
|
|
/// Reserved/padding.
|
|
/// </summary>
|
|
private unsafe fixed byte _reserved[2];
|
|
|
|
[StructLayout(LayoutKind.Sequential, Size = sizeof(float) * Constants.MixBufferCountMax, Pack = 1)]
|
|
private struct MixArray { }
|
|
|
|
/// <summary>
|
|
/// Mix buffer volumes.
|
|
/// </summary>
|
|
/// <remarks>Used when a splitter id is specified in the mix.</remarks>
|
|
public Span<float> MixBufferVolume => SpanHelpers.AsSpan<MixArray, float>(ref _mixBufferVolume);
|
|
|
|
readonly int ISplitterDestinationInParameter.Id => Id;
|
|
|
|
readonly int ISplitterDestinationInParameter.DestinationId => DestinationId;
|
|
|
|
readonly Array2<BiquadFilterParameter2> ISplitterDestinationInParameter.BiquadFilters2 => default;
|
|
|
|
readonly bool ISplitterDestinationInParameter.IsUsed => IsUsed;
|
|
readonly bool ISplitterDestinationInParameter.ResetPrevVolume => ResetPrevVolume;
|
|
|
|
/// <summary>
|
|
/// The expected constant of any input header.
|
|
/// </summary>
|
|
private const uint ValidMagic = 0x44444E53;
|
|
|
|
/// <summary>
|
|
/// Check if the magic is valid.
|
|
/// </summary>
|
|
/// <returns>Returns true if the magic is valid.</returns>
|
|
public readonly bool IsMagicValid()
|
|
{
|
|
return Magic == ValidMagic;
|
|
}
|
|
}
|
|
}
|