Formatting

This commit is contained in:
Gabriel A 2024-05-15 22:02:00 -03:00
commit c099df0c39
3 changed files with 142 additions and 117 deletions

View file

@ -40,4 +40,4 @@ namespace Ryujinx.Audio.Renderer.Parameter
/// <returns>Returns true if the magic is valid.</returns> /// <returns>Returns true if the magic is valid.</returns>
bool IsMagicValid(); bool IsMagicValid();
} }
} }

View file

@ -382,7 +382,7 @@ namespace Ryujinx.Audio.Renderer.Server
/// <param name="bufferCount">The buffer count.</param> /// <param name="bufferCount">The buffer count.</param>
/// <param name="nodeId">The node id associated to this command.</param> /// <param name="nodeId">The node id associated to this command.</param>
/// <param name="sampleRate">The target sample rate in use.</param> /// <param name="sampleRate">The target sample rate in use.</param>
public void GenerateDepopForMixBuffersCommand(Memory<float> depopBuffer, uint bufferOffset, uint bufferCount, int nodeId, uint sampleRate) public void GenerateDepopForMixBuffers(Memory<float> depopBuffer, uint bufferOffset, uint bufferCount, int nodeId, uint sampleRate)
{ {
DepopForMixBuffersCommand command = new(depopBuffer, bufferOffset, bufferCount, nodeId, sampleRate); DepopForMixBuffersCommand command = new(depopBuffer, bufferOffset, bufferCount, nodeId, sampleRate);

View file

@ -47,12 +47,13 @@ namespace Ryujinx.Audio.Renderer.Server
{ {
ref MixState mix = ref _mixContext.GetState(voiceState.MixId); ref MixState mix = ref _mixContext.GetState(voiceState.MixId);
_commandBuffer.GenerateDepopPrepare(dspState, _commandBuffer.GenerateDepopPrepare(
_rendererContext.DepopBuffer, dspState,
mix.BufferCount, _rendererContext.DepopBuffer,
mix.BufferOffset, mix.BufferCount,
voiceState.NodeId, mix.BufferOffset,
voiceState.WasPlaying); voiceState.NodeId,
voiceState.WasPlaying);
} }
else if (voiceState.SplitterId != Constants.UnusedSplitterId) else if (voiceState.SplitterId != Constants.UnusedSplitterId)
{ {
@ -75,12 +76,13 @@ namespace Ryujinx.Audio.Renderer.Server
{ {
ref MixState mix = ref _mixContext.GetState(mixId); ref MixState mix = ref _mixContext.GetState(mixId);
_commandBuffer.GenerateDepopPrepare(dspState, _commandBuffer.GenerateDepopPrepare(
_rendererContext.DepopBuffer, dspState,
mix.BufferCount, _rendererContext.DepopBuffer,
mix.BufferOffset, mix.BufferCount,
voiceState.NodeId, mix.BufferOffset,
voiceState.WasPlaying); voiceState.NodeId,
voiceState.WasPlaying);
destination.MarkAsNeedToUpdateInternalState(); destination.MarkAsNeedToUpdateInternalState();
} }
@ -94,35 +96,39 @@ namespace Ryujinx.Audio.Renderer.Server
if (_rendererContext.BehaviourContext.IsWaveBufferVersion2Supported()) if (_rendererContext.BehaviourContext.IsWaveBufferVersion2Supported())
{ {
_commandBuffer.GenerateDataSourceVersion2(ref voiceState, _commandBuffer.GenerateDataSourceVersion2(
dspState, ref voiceState,
(ushort)_rendererContext.MixBufferCount, dspState,
(ushort)channelIndex, (ushort)_rendererContext.MixBufferCount,
voiceState.NodeId); (ushort)channelIndex,
voiceState.NodeId);
} }
else else
{ {
switch (voiceState.SampleFormat) switch (voiceState.SampleFormat)
{ {
case SampleFormat.PcmInt16: case SampleFormat.PcmInt16:
_commandBuffer.GeneratePcmInt16DataSourceVersion1(ref voiceState, _commandBuffer.GeneratePcmInt16DataSourceVersion1(
dspState, ref voiceState,
(ushort)_rendererContext.MixBufferCount, dspState,
(ushort)channelIndex, (ushort)_rendererContext.MixBufferCount,
voiceState.NodeId); (ushort)channelIndex,
voiceState.NodeId);
break; break;
case SampleFormat.PcmFloat: case SampleFormat.PcmFloat:
_commandBuffer.GeneratePcmFloatDataSourceVersion1(ref voiceState, _commandBuffer.GeneratePcmFloatDataSourceVersion1(
dspState, ref voiceState,
(ushort)_rendererContext.MixBufferCount, dspState,
(ushort)channelIndex, (ushort)_rendererContext.MixBufferCount,
voiceState.NodeId); (ushort)channelIndex,
voiceState.NodeId);
break; break;
case SampleFormat.Adpcm: case SampleFormat.Adpcm:
_commandBuffer.GenerateAdpcmDataSourceVersion1(ref voiceState, _commandBuffer.GenerateAdpcmDataSourceVersion1(
dspState, ref voiceState,
(ushort)_rendererContext.MixBufferCount, dspState,
voiceState.NodeId); (ushort)_rendererContext.MixBufferCount,
voiceState.NodeId);
break; break;
default: default:
throw new NotImplementedException($"Unsupported data source {voiceState.SampleFormat}"); throw new NotImplementedException($"Unsupported data source {voiceState.SampleFormat}");
@ -154,13 +160,14 @@ namespace Ryujinx.Audio.Renderer.Server
Memory<BiquadFilterState> stateMemory = SpanMemoryManager<BiquadFilterState>.Cast(biquadStateRawMemory); Memory<BiquadFilterState> stateMemory = SpanMemoryManager<BiquadFilterState>.Cast(biquadStateRawMemory);
_commandBuffer.GenerateBiquadFilter(baseIndex, _commandBuffer.GenerateBiquadFilter(
ref filter, baseIndex,
stateMemory.Slice(i, 1), ref filter,
bufferOffset, stateMemory.Slice(i, 1),
bufferOffset, bufferOffset,
!voiceState.BiquadFilterNeedInitialization[i], bufferOffset,
nodeId); !voiceState.BiquadFilterNeedInitialization[i],
nodeId);
} }
} }
} }
@ -524,10 +531,11 @@ namespace Ryujinx.Audio.Renderer.Server
{ {
if (effect.Parameter.Volumes[i] != 0.0f) if (effect.Parameter.Volumes[i] != 0.0f)
{ {
_commandBuffer.GenerateMix((uint)bufferOffset + effect.Parameter.Input[i], _commandBuffer.GenerateMix(
(uint)bufferOffset + effect.Parameter.Output[i], (uint)bufferOffset + effect.Parameter.Input[i],
nodeId, (uint)bufferOffset + effect.Parameter.Output[i],
effect.Parameter.Volumes[i]); nodeId,
effect.Parameter.Volumes[i]);
} }
} }
} }
@ -562,17 +570,18 @@ namespace Ryujinx.Audio.Renderer.Server
updateCount = newUpdateCount; updateCount = newUpdateCount;
} }
_commandBuffer.GenerateAuxEffect(bufferOffset, _commandBuffer.GenerateAuxEffect(
effect.Parameter.Input[i], bufferOffset,
effect.Parameter.Output[i], effect.Parameter.Input[i],
ref effect.State, effect.Parameter.Output[i],
effect.IsEnabled, ref effect.State,
effect.Parameter.BufferStorageSize, effect.IsEnabled,
effect.State.SendBufferInfoBase, effect.Parameter.BufferStorageSize,
effect.State.ReturnBufferInfoBase, effect.State.SendBufferInfoBase,
updateCount, effect.State.ReturnBufferInfoBase,
writeOffset, updateCount,
nodeId); writeOffset,
nodeId);
writeOffset = newUpdateCount; writeOffset = newUpdateCount;
@ -615,7 +624,7 @@ namespace Ryujinx.Audio.Renderer.Server
if (effect.IsEnabled) if (effect.IsEnabled)
{ {
bool needInitialization = effect.Parameter.Status == UsageState.Invalid || bool needInitialization = effect.Parameter.Status == UsageState.Invalid ||
(effect.Parameter.Status == UsageState.New && !_rendererContext.BehaviourContext.IsBiquadFilterEffectStateClearBugFixed()); (effect.Parameter.Status == UsageState.New && !_rendererContext.BehaviourContext.IsBiquadFilterEffectStateClearBugFixed());
BiquadFilterParameter parameter = new() BiquadFilterParameter parameter = new()
{ {
@ -627,11 +636,14 @@ namespace Ryujinx.Audio.Renderer.Server
for (int i = 0; i < effect.Parameter.ChannelCount; i++) for (int i = 0; i < effect.Parameter.ChannelCount; i++)
{ {
_commandBuffer.GenerateBiquadFilter((int)bufferOffset, ref parameter, effect.State.Slice(i, 1), _commandBuffer.GenerateBiquadFilter(
effect.Parameter.Input[i], (int)bufferOffset,
effect.Parameter.Output[i], ref parameter,
needInitialization, effect.State.Slice(i, 1),
nodeId); effect.Parameter.Input[i],
effect.Parameter.Output[i],
needInitialization,
nodeId);
} }
} }
else else
@ -706,15 +718,16 @@ namespace Ryujinx.Audio.Renderer.Server
updateCount = newUpdateCount; updateCount = newUpdateCount;
} }
_commandBuffer.GenerateCaptureEffect(bufferOffset, _commandBuffer.GenerateCaptureEffect(
effect.Parameter.Input[i], bufferOffset,
effect.State.SendBufferInfo, effect.Parameter.Input[i],
effect.IsEnabled, effect.State.SendBufferInfo,
effect.Parameter.BufferStorageSize, effect.IsEnabled,
effect.State.SendBufferInfoBase, effect.Parameter.BufferStorageSize,
updateCount, effect.State.SendBufferInfoBase,
writeOffset, updateCount,
nodeId); writeOffset,
nodeId);
writeOffset = newUpdateCount; writeOffset = newUpdateCount;
@ -727,11 +740,12 @@ namespace Ryujinx.Audio.Renderer.Server
{ {
Debug.Assert(effect.Type == EffectType.Compressor); Debug.Assert(effect.Type == EffectType.Compressor);
_commandBuffer.GenerateCompressorEffect(bufferOffset, _commandBuffer.GenerateCompressorEffect(
effect.Parameter, bufferOffset,
effect.State, effect.Parameter,
effect.IsEnabled, effect.State,
nodeId); effect.IsEnabled,
nodeId);
} }
private void GenerateEffect(ref MixState mix, int effectId, BaseEffect effect) private void GenerateEffect(ref MixState mix, int effectId, BaseEffect effect)
@ -744,8 +758,11 @@ namespace Ryujinx.Audio.Renderer.Server
bool performanceInitialized = false; bool performanceInitialized = false;
if (_performanceManager != null && _performanceManager.GetNextEntry(out performanceEntry, effect.GetPerformanceDetailType(), if (_performanceManager != null && _performanceManager.GetNextEntry(
isFinalMix ? PerformanceEntryType.FinalMix : PerformanceEntryType.SubMix, nodeId)) out performanceEntry,
effect.GetPerformanceDetailType(),
isFinalMix ? PerformanceEntryType.FinalMix : PerformanceEntryType.SubMix,
nodeId))
{ {
performanceInitialized = true; performanceInitialized = true;
@ -978,10 +995,11 @@ namespace Ryujinx.Audio.Renderer.Server
if (volume != 0.0f) if (volume != 0.0f)
{ {
_commandBuffer.GenerateMix(mix.BufferOffset + bufferIndex, _commandBuffer.GenerateMix(
destinationMix.BufferOffset + bufferDestinationIndex, mix.BufferOffset + bufferIndex,
mix.NodeId, destinationMix.BufferOffset + bufferDestinationIndex,
volume); mix.NodeId,
volume);
} }
} }
} }
@ -991,11 +1009,12 @@ namespace Ryujinx.Audio.Renderer.Server
private void GenerateSubMix(ref MixState subMix) private void GenerateSubMix(ref MixState subMix)
{ {
_commandBuffer.GenerateDepopForMixBuffersCommand(_rendererContext.DepopBuffer, _commandBuffer.GenerateDepopForMixBuffers(
subMix.BufferOffset, _rendererContext.DepopBuffer,
subMix.BufferCount, subMix.BufferOffset,
subMix.NodeId, subMix.BufferCount,
subMix.SampleRate); subMix.NodeId,
subMix.SampleRate);
GenerateEffects(ref subMix); GenerateEffects(ref subMix);
@ -1055,11 +1074,12 @@ namespace Ryujinx.Audio.Renderer.Server
{ {
ref MixState finalMix = ref _mixContext.GetFinalState(); ref MixState finalMix = ref _mixContext.GetFinalState();
_commandBuffer.GenerateDepopForMixBuffersCommand(_rendererContext.DepopBuffer, _commandBuffer.GenerateDepopForMixBuffers(
finalMix.BufferOffset, _rendererContext.DepopBuffer,
finalMix.BufferCount, finalMix.BufferOffset,
finalMix.NodeId, finalMix.BufferCount,
finalMix.SampleRate); finalMix.NodeId,
finalMix.SampleRate);
GenerateEffects(ref finalMix); GenerateEffects(ref finalMix);
@ -1090,9 +1110,10 @@ namespace Ryujinx.Audio.Renderer.Server
GeneratePerformance(ref performanceEntry, PerformanceCommand.Type.Start, nodeId); GeneratePerformance(ref performanceEntry, PerformanceCommand.Type.Start, nodeId);
} }
_commandBuffer.GenerateVolume(finalMix.Volume, _commandBuffer.GenerateVolume(
finalMix.BufferOffset + bufferIndex, finalMix.Volume,
nodeId); finalMix.BufferOffset + bufferIndex,
nodeId);
if (performanceSubInitialized) if (performanceSubInitialized)
{ {
@ -1146,41 +1167,45 @@ namespace Ryujinx.Audio.Renderer.Server
if (useCustomDownMixingCommand) if (useCustomDownMixingCommand)
{ {
_commandBuffer.GenerateDownMixSurroundToStereo(finalMix.BufferOffset, _commandBuffer.GenerateDownMixSurroundToStereo(
sink.Parameter.Input.AsSpan(), finalMix.BufferOffset,
sink.Parameter.Input.AsSpan(), sink.Parameter.Input.AsSpan(),
sink.DownMixCoefficients, sink.Parameter.Input.AsSpan(),
Constants.InvalidNodeId); sink.DownMixCoefficients,
Constants.InvalidNodeId);
} }
// NOTE: We do the downmixing at the DSP level as it's easier that way. // NOTE: We do the downmixing at the DSP level as it's easier that way.
else if (_rendererContext.ChannelCount == 2 && sink.Parameter.InputCount == 6) else if (_rendererContext.ChannelCount == 2 && sink.Parameter.InputCount == 6)
{ {
_commandBuffer.GenerateDownMixSurroundToStereo(finalMix.BufferOffset, _commandBuffer.GenerateDownMixSurroundToStereo(
sink.Parameter.Input.AsSpan(), finalMix.BufferOffset,
sink.Parameter.Input.AsSpan(), sink.Parameter.Input.AsSpan(),
Constants.DefaultSurroundToStereoCoefficients, sink.Parameter.Input.AsSpan(),
Constants.InvalidNodeId); Constants.DefaultSurroundToStereoCoefficients,
Constants.InvalidNodeId);
} }
CommandList commandList = _commandBuffer.CommandList; CommandList commandList = _commandBuffer.CommandList;
if (sink.UpsamplerState != null) if (sink.UpsamplerState != null)
{ {
_commandBuffer.GenerateUpsample(finalMix.BufferOffset, _commandBuffer.GenerateUpsample(
sink.UpsamplerState, finalMix.BufferOffset,
sink.Parameter.InputCount, sink.UpsamplerState,
sink.Parameter.Input.AsSpan(), sink.Parameter.InputCount,
commandList.BufferCount, sink.Parameter.Input.AsSpan(),
commandList.SampleCount, commandList.BufferCount,
commandList.SampleRate, commandList.SampleCount,
Constants.InvalidNodeId); commandList.SampleRate,
Constants.InvalidNodeId);
} }
_commandBuffer.GenerateDeviceSink(finalMix.BufferOffset, _commandBuffer.GenerateDeviceSink(
sink, finalMix.BufferOffset,
_rendererContext.SessionId, sink,
commandList.Buffers, _rendererContext.SessionId,
Constants.InvalidNodeId); commandList.Buffers,
Constants.InvalidNodeId);
} }
private void GenerateSink(BaseSink sink, ref MixState finalMix) private void GenerateSink(BaseSink sink, ref MixState finalMix)