SPU: work with scalars instead of arrays

This commit is contained in:
RSDuck
2020-10-31 13:43:33 +01:00
parent e46a408972
commit 9ac60a840a
2 changed files with 84 additions and 135 deletions

View File

@ -33,7 +33,7 @@ void DoSavestate(Savestate* file);
void SetBias(u16 bias);
void Mix(u32 samples);
void Mix(u32 dummy);
void TrimOutput();
void DrainOutput();
@ -123,26 +123,24 @@ public:
void NextSample_PSG();
void NextSample_Noise();
template<u32 type> void Run(s32* buf, u32 samples);
template<u32 type> s32 Run();
void DoRun(s32* buf, u32 samples)
s32 DoRun()
{
for (u32 s = 0; s < samples; s++)
buf[s] = 0;
switch ((Cnt >> 29) & 0x3)
{
case 0: Run<0>(buf, samples); break;
case 1: Run<1>(buf, samples); break;
case 2: Run<2>(buf, samples); break;
case 0: return Run<0>(); break;
case 1: return Run<1>(); break;
case 2: return Run<2>(); break;
case 3:
if (Num >= 14) Run<4>(buf, samples);
else if (Num >= 8) Run<3>(buf, samples);
break;
if (Num >= 14) return Run<4>();
else if (Num >= 8) return Run<3>();
default:
return 0;
}
}
void PanOutput(s32* inbuf, u32 samples, s32* leftbuf, s32* rightbuf);
void PanOutput(s32 in, s32& left, s32& right);
private:
u32 (*BusRead32)(u32 addr);