aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs')
-rw-r--r--src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs133
1 files changed, 50 insertions, 83 deletions
diff --git a/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs b/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs
index 5cf539c6..22eebc7c 100644
--- a/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs
+++ b/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs
@@ -22,15 +22,15 @@ namespace Ryujinx.Audio.Renderer.Server
public class StateUpdater
{
private readonly ReadOnlyMemory<byte> _inputOrigin;
- private ReadOnlyMemory<byte> _outputOrigin;
+ private readonly ReadOnlyMemory<byte> _outputOrigin;
private ReadOnlyMemory<byte> _input;
private Memory<byte> _output;
- private uint _processHandle;
+ private readonly uint _processHandle;
private BehaviourContext _behaviourContext;
private UpdateDataHeader _inputHeader;
- private Memory<UpdateDataHeader> _outputHeader;
+ private readonly Memory<UpdateDataHeader> _outputHeader;
private ref UpdateDataHeader OutputHeader => ref _outputHeader.Span[0];
@@ -45,9 +45,9 @@ namespace Ryujinx.Audio.Renderer.Server
_inputHeader = SpanIOHelper.Read<UpdateDataHeader>(ref _input);
- _outputHeader = SpanMemoryManager<UpdateDataHeader>.Cast(_output.Slice(0, Unsafe.SizeOf<UpdateDataHeader>()));
+ _outputHeader = SpanMemoryManager<UpdateDataHeader>.Cast(_output[..Unsafe.SizeOf<UpdateDataHeader>()]);
OutputHeader.Initialize(_behaviourContext.UserRevision);
- _output = _output.Slice(Unsafe.SizeOf<UpdateDataHeader>());
+ _output = _output[Unsafe.SizeOf<UpdateDataHeader>()..];
}
public ResultCode UpdateBehaviourContext()
@@ -72,7 +72,7 @@ namespace Ryujinx.Audio.Renderer.Server
public ResultCode UpdateMemoryPools(Span<MemoryPoolState> memoryPools)
{
- PoolMapper mapper = new PoolMapper(_processHandle, _behaviourContext.IsMemoryPoolForceMappingEnabled());
+ PoolMapper mapper = new(_processHandle, _behaviourContext.IsMemoryPoolForceMappingEnabled());
if (memoryPools.Length * Unsafe.SizeOf<MemoryPoolInParameter>() != _inputHeader.MemoryPoolsSize)
{
@@ -136,11 +136,11 @@ namespace Ryujinx.Audio.Renderer.Server
int initialOutputSize = _output.Length;
- ReadOnlySpan<VoiceInParameter> parameters = MemoryMarshal.Cast<byte, VoiceInParameter>(_input.Slice(0, (int)_inputHeader.VoicesSize).Span);
+ ReadOnlySpan<VoiceInParameter> parameters = MemoryMarshal.Cast<byte, VoiceInParameter>(_input[..(int)_inputHeader.VoicesSize].Span);
- _input = _input.Slice((int)_inputHeader.VoicesSize);
+ _input = _input[(int)_inputHeader.VoicesSize..];
- PoolMapper mapper = new PoolMapper(_processHandle, memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
+ PoolMapper mapper = new(_processHandle, memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
// First make everything not in use.
for (int i = 0; i < context.GetCount(); i++)
@@ -151,7 +151,7 @@ namespace Ryujinx.Audio.Renderer.Server
}
Memory<VoiceUpdateState>[] voiceUpdateStatesArray = ArrayPool<Memory<VoiceUpdateState>>.Shared.Rent(Constants.VoiceChannelCountMax);
-
+
Span<Memory<VoiceUpdateState>> voiceUpdateStates = voiceUpdateStatesArray.AsSpan(0, Constants.VoiceChannelCountMax);
// Start processing
@@ -218,42 +218,20 @@ namespace Ryujinx.Audio.Renderer.Server
{
effect.ForceUnmapBuffers(mapper);
- switch (parameter.Type)
- {
- case EffectType.Invalid:
- effect = new BaseEffect();
- break;
- case EffectType.BufferMix:
- effect = new BufferMixEffect();
- break;
- case EffectType.AuxiliaryBuffer:
- effect = new AuxiliaryBufferEffect();
- break;
- case EffectType.Delay:
- effect = new DelayEffect();
- break;
- case EffectType.Reverb:
- effect = new ReverbEffect();
- break;
- case EffectType.Reverb3d:
- effect = new Reverb3dEffect();
- break;
- case EffectType.BiquadFilter:
- effect = new BiquadFilterEffect();
- break;
- case EffectType.Limiter:
- effect = new LimiterEffect();
- break;
- case EffectType.CaptureBuffer:
- effect = new CaptureBufferEffect();
- break;
- case EffectType.Compressor:
- effect = new CompressorEffect();
- break;
-
- default:
- throw new NotImplementedException($"EffectType {parameter.Type} not implemented!");
- }
+ effect = parameter.Type switch
+ {
+ EffectType.Invalid => new BaseEffect(),
+ EffectType.BufferMix => new BufferMixEffect(),
+ EffectType.AuxiliaryBuffer => new AuxiliaryBufferEffect(),
+ EffectType.Delay => new DelayEffect(),
+ EffectType.Reverb => new ReverbEffect(),
+ EffectType.Reverb3d => new Reverb3dEffect(),
+ EffectType.BiquadFilter => new BiquadFilterEffect(),
+ EffectType.Limiter => new LimiterEffect(),
+ EffectType.CaptureBuffer => new CaptureBufferEffect(),
+ EffectType.Compressor => new CompressorEffect(),
+ _ => throw new NotImplementedException($"EffectType {parameter.Type} not implemented!"),
+ };
}
public ResultCode UpdateEffects(EffectContext context, bool isAudioRendererActive, Memory<MemoryPoolState> memoryPools)
@@ -262,10 +240,8 @@ namespace Ryujinx.Audio.Renderer.Server
{
return UpdateEffectsVersion2(context, isAudioRendererActive, memoryPools);
}
- else
- {
- return UpdateEffectsVersion1(context, isAudioRendererActive, memoryPools);
- }
+
+ return UpdateEffectsVersion1(context, isAudioRendererActive, memoryPools);
}
public ResultCode UpdateEffectsVersion2(EffectContext context, bool isAudioRendererActive, Memory<MemoryPoolState> memoryPools)
@@ -277,11 +253,11 @@ namespace Ryujinx.Audio.Renderer.Server
int initialOutputSize = _output.Length;
- ReadOnlySpan<EffectInParameterVersion2> parameters = MemoryMarshal.Cast<byte, EffectInParameterVersion2>(_input.Slice(0, (int)_inputHeader.EffectsSize).Span);
+ ReadOnlySpan<EffectInParameterVersion2> parameters = MemoryMarshal.Cast<byte, EffectInParameterVersion2>(_input[..(int)_inputHeader.EffectsSize].Span);
- _input = _input.Slice((int)_inputHeader.EffectsSize);
+ _input = _input[(int)_inputHeader.EffectsSize..];
- PoolMapper mapper = new PoolMapper(_processHandle, memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
+ PoolMapper mapper = new(_processHandle, memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
for (int i = 0; i < context.GetCount(); i++)
{
@@ -333,11 +309,11 @@ namespace Ryujinx.Audio.Renderer.Server
int initialOutputSize = _output.Length;
- ReadOnlySpan<EffectInParameterVersion1> parameters = MemoryMarshal.Cast<byte, EffectInParameterVersion1>(_input.Slice(0, (int)_inputHeader.EffectsSize).Span);
+ ReadOnlySpan<EffectInParameterVersion1> parameters = MemoryMarshal.Cast<byte, EffectInParameterVersion1>(_input[..(int)_inputHeader.EffectsSize].Span);
- _input = _input.Slice((int)_inputHeader.EffectsSize);
+ _input = _input[(int)_inputHeader.EffectsSize..];
- PoolMapper mapper = new PoolMapper(_processHandle, memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
+ PoolMapper mapper = new(_processHandle, memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
for (int i = 0; i < context.GetCount(); i++)
{
@@ -376,17 +352,15 @@ namespace Ryujinx.Audio.Renderer.Server
{
if (context.Update(_input.Span, out int consumedSize))
{
- _input = _input.Slice(consumedSize);
+ _input = _input[consumedSize..];
return ResultCode.Success;
}
- else
- {
- return ResultCode.InvalidUpdateInfo;
- }
+
+ return ResultCode.InvalidUpdateInfo;
}
- private bool CheckMixParametersValidity(MixContext mixContext, uint mixBufferCount, uint inputMixCount, ReadOnlySpan<MixParameter> parameters)
+ private static bool CheckMixParametersValidity(MixContext mixContext, uint mixBufferCount, uint inputMixCount, ReadOnlySpan<MixParameter> parameters)
{
uint maxMixStateCount = mixContext.GetCount();
uint totalRequiredMixBufferCount = 0;
@@ -439,12 +413,12 @@ namespace Ryujinx.Audio.Renderer.Server
if (_behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported())
{
- _input = _input.Slice(Unsafe.SizeOf<MixInParameterDirtyOnlyUpdate>());
+ _input = _input[Unsafe.SizeOf<MixInParameterDirtyOnlyUpdate>()..];
}
- ReadOnlySpan<MixParameter> parameters = MemoryMarshal.Cast<byte, MixParameter>(_input.Span.Slice(0, (int)inputMixSize));
+ ReadOnlySpan<MixParameter> parameters = MemoryMarshal.Cast<byte, MixParameter>(_input.Span[..(int)inputMixSize]);
- _input = _input.Slice((int)inputMixSize);
+ _input = _input[(int)inputMixSize..];
if (CheckMixParametersValidity(mixContext, mixBufferCount, mixCount, parameters))
{
@@ -506,25 +480,18 @@ namespace Ryujinx.Audio.Renderer.Server
{
sink.CleanUp();
- switch (parameter.Type)
- {
- case SinkType.Invalid:
- sink = new BaseSink();
- break;
- case SinkType.CircularBuffer:
- sink = new CircularBufferSink();
- break;
- case SinkType.Device:
- sink = new DeviceSink();
- break;
- default:
- throw new NotImplementedException($"SinkType {parameter.Type} not implemented!");
- }
+ sink = parameter.Type switch
+ {
+ SinkType.Invalid => new BaseSink(),
+ SinkType.CircularBuffer => new CircularBufferSink(),
+ SinkType.Device => new DeviceSink(),
+ _ => throw new NotImplementedException($"SinkType {parameter.Type} not implemented!"),
+ };
}
public ResultCode UpdateSinks(SinkContext context, Memory<MemoryPoolState> memoryPools)
{
- PoolMapper mapper = new PoolMapper(_processHandle, memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
+ PoolMapper mapper = new(_processHandle, memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
if (context.GetCount() * Unsafe.SizeOf<SinkInParameter>() != _inputHeader.SinksSize)
{
@@ -533,9 +500,9 @@ namespace Ryujinx.Audio.Renderer.Server
int initialOutputSize = _output.Length;
- ReadOnlySpan<SinkInParameter> parameters = MemoryMarshal.Cast<byte, SinkInParameter>(_input.Slice(0, (int)_inputHeader.SinksSize).Span);
+ ReadOnlySpan<SinkInParameter> parameters = MemoryMarshal.Cast<byte, SinkInParameter>(_input[..(int)_inputHeader.SinksSize].Span);
- _input = _input.Slice((int)_inputHeader.SinksSize);
+ _input = _input[(int)_inputHeader.SinksSize..];
for (int i = 0; i < context.GetCount(); i++)
{
@@ -640,4 +607,4 @@ namespace Ryujinx.Audio.Renderer.Server
return ResultCode.Success;
}
}
-} \ No newline at end of file
+}