mirror of
https://git.ryujinx.app/kenji-nx/ryujinx.git
synced 2025-12-13 04:37:02 +00: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.
203 lines
5 KiB
C#
203 lines
5 KiB
C#
using Ryujinx.Audio.Renderer.Dsp.Command;
|
|
using System.Diagnostics;
|
|
|
|
namespace Ryujinx.Audio.Renderer.Server
|
|
{
|
|
/// <summary>
|
|
/// <see cref="ICommandProcessingTimeEstimator"/> version 1.
|
|
/// </summary>
|
|
public class CommandProcessingTimeEstimatorVersion1 : ICommandProcessingTimeEstimator
|
|
{
|
|
private readonly uint _sampleCount;
|
|
private readonly uint _bufferCount;
|
|
|
|
public CommandProcessingTimeEstimatorVersion1(uint sampleCount, uint bufferCount)
|
|
{
|
|
_sampleCount = sampleCount;
|
|
_bufferCount = bufferCount;
|
|
}
|
|
|
|
public uint Estimate(PerformanceCommand command)
|
|
{
|
|
return 1454;
|
|
}
|
|
|
|
public uint Estimate(ClearMixBufferCommand command)
|
|
{
|
|
return (uint)(_sampleCount * 0.83f * _bufferCount * 1.2f);
|
|
}
|
|
|
|
public uint Estimate(BiquadFilterCommand command)
|
|
{
|
|
return (uint)(_sampleCount * 58.0f * 1.2f);
|
|
}
|
|
|
|
public uint Estimate(MixRampGroupedCommand command)
|
|
{
|
|
int volumeCount = 0;
|
|
|
|
for (int i = 0; i < command.MixBufferCount; i++)
|
|
{
|
|
if (command.Volume0[i] != 0.0f || command.Volume1[i] != 0.0f)
|
|
{
|
|
volumeCount++;
|
|
}
|
|
}
|
|
|
|
return (uint)(_sampleCount * 14.4f * 1.2f * volumeCount);
|
|
}
|
|
|
|
public uint Estimate(MixRampCommand command)
|
|
{
|
|
return (uint)(_sampleCount * 14.4f * 1.2f);
|
|
}
|
|
|
|
public uint Estimate(DepopPrepareCommand command)
|
|
{
|
|
return 1080;
|
|
}
|
|
|
|
public uint Estimate(VolumeRampCommand command)
|
|
{
|
|
return (uint)(_sampleCount * 9.8f * 1.2f);
|
|
}
|
|
|
|
public uint Estimate(PcmInt16DataSourceCommandVersion1 command)
|
|
{
|
|
return (uint)(command.Pitch * 0.25f * 1.2f);
|
|
}
|
|
|
|
public uint Estimate(AdpcmDataSourceCommandVersion1 command)
|
|
{
|
|
return (uint)(command.Pitch * 0.46f * 1.2f);
|
|
}
|
|
|
|
public uint Estimate(DepopForMixBuffersCommand command)
|
|
{
|
|
return (uint)(_sampleCount * 8.9f * command.MixBufferCount);
|
|
}
|
|
|
|
public uint Estimate(CopyMixBufferCommand command)
|
|
{
|
|
// NOTE: Nintendo returns 0 here for some reasons even if it will generate a command like that on version 1.. maybe a mistake?
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(MixCommand command)
|
|
{
|
|
return (uint)(_sampleCount * 10.0f * 1.2f);
|
|
}
|
|
|
|
public uint Estimate(DelayCommand command)
|
|
{
|
|
return (uint)(_sampleCount * command.Parameter.ChannelCount * 202.5f);
|
|
}
|
|
|
|
public uint Estimate(ReverbCommand command)
|
|
{
|
|
Debug.Assert(command.Parameter.IsChannelCountValid());
|
|
|
|
if (command.Enabled)
|
|
{
|
|
return (uint)(750 * _sampleCount * command.Parameter.ChannelCount * 1.2f);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(Reverb3dCommand command)
|
|
{
|
|
if (command.Enabled)
|
|
{
|
|
return (uint)(530 * _sampleCount * command.Parameter.ChannelCount * 1.2f);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(AuxiliaryBufferCommand command)
|
|
{
|
|
if (command.Enabled)
|
|
{
|
|
return 15956;
|
|
}
|
|
|
|
return 3765;
|
|
}
|
|
|
|
public uint Estimate(VolumeCommand command)
|
|
{
|
|
return (uint)(_sampleCount * 8.8f * 1.2f);
|
|
}
|
|
|
|
public uint Estimate(CircularBufferSinkCommand command)
|
|
{
|
|
return 55;
|
|
}
|
|
|
|
public uint Estimate(DownMixSurroundToStereoCommand command)
|
|
{
|
|
return 16108;
|
|
}
|
|
|
|
public uint Estimate(UpsampleCommand command)
|
|
{
|
|
return 357915;
|
|
}
|
|
|
|
public uint Estimate(DeviceSinkCommand command)
|
|
{
|
|
return 10042;
|
|
}
|
|
|
|
public uint Estimate(PcmFloatDataSourceCommandVersion1 command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(DataSourceVersion2Command command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(LimiterCommandVersion1 command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(LimiterCommandVersion2 command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(MultiTapBiquadFilterCommand command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(CaptureBufferCommand command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(CompressorCommand command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(BiquadFilterAndMixCommand command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(MultiTapBiquadFilterAndMixCommand command)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public uint Estimate(FillBufferCommand command)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
}
|