mirror of https://github.com/PCSX2/pcsx2.git
IPU: Move decode delay to after the decode
This commit is contained in:
parent
6fe5d9a9e9
commit
c4ec841c0f
|
@ -1007,13 +1007,6 @@ __ri static bool mpeg2sliceIDEC()
|
||||||
ipu_cmd.pos[0] = 2;
|
ipu_cmd.pos[0] = 2;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (ready_to_decode == true)
|
|
||||||
{
|
|
||||||
ready_to_decode = false;
|
|
||||||
CPU_INT(IPU_PROCESS, 64); // Should probably be much higher, but myst 3 doesn't like it right now.
|
|
||||||
ipu_cmd.pos[0] = 2;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// IPU0 isn't ready for data, so let's wait for it to be
|
// IPU0 isn't ready for data, so let's wait for it to be
|
||||||
if ((!ipu0ch.chcr.STR || ipuRegs.ctrl.OFC || ipu0ch.qwc == 0) && ipu_cmd.pos[1] <= 2)
|
if ((!ipu0ch.chcr.STR || ipuRegs.ctrl.OFC || ipu0ch.qwc == 0) && ipu_cmd.pos[1] <= 2)
|
||||||
{
|
{
|
||||||
|
@ -1127,9 +1120,14 @@ __ri static bool mpeg2sliceIDEC()
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
|
if (ready_to_decode == true)
|
||||||
|
{
|
||||||
|
ready_to_decode = false;
|
||||||
|
CPU_INT(IPU_PROCESS, 64); // Should probably be much higher, but myst 3 doesn't like it right now.
|
||||||
|
ipu_cmd.pos[1] = 2;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
pxAssert(decoder.ipu0_data > 0);
|
pxAssert(decoder.ipu0_data > 0);
|
||||||
ready_to_decode = true;
|
|
||||||
uint read = ipu_fifo.out.write((u32*)decoder.GetIpuDataPtr(), decoder.ipu0_data);
|
uint read = ipu_fifo.out.write((u32*)decoder.GetIpuDataPtr(), decoder.ipu0_data);
|
||||||
decoder.AdvanceIpuDataBy(read);
|
decoder.AdvanceIpuDataBy(read);
|
||||||
|
|
||||||
|
@ -1150,6 +1148,7 @@ __ri static bool mpeg2sliceIDEC()
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
ready_to_decode = true;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (!GETWORD())
|
if (!GETWORD())
|
||||||
|
@ -1210,7 +1209,6 @@ __ri static bool mpeg2sliceIDEC()
|
||||||
|
|
||||||
ipu_cmd.pos[1] = 0;
|
ipu_cmd.pos[1] = 0;
|
||||||
ipu_cmd.pos[2] = 0;
|
ipu_cmd.pos[2] = 0;
|
||||||
ready_to_decode = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
finish_idec:
|
finish_idec:
|
||||||
|
@ -1306,12 +1304,7 @@ __fi static bool mpeg2_slice()
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
ipu_cmd.pos[0] = 2;
|
ipu_cmd.pos[0] = 2;
|
||||||
if (ready_to_decode == true)
|
|
||||||
{
|
|
||||||
ready_to_decode = false;
|
|
||||||
CPU_INT(IPU_PROCESS, 64); // Should probably be much higher, but myst 3 doesn't like it right now.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// IPU0 isn't ready for data, so let's wait for it to be
|
// IPU0 isn't ready for data, so let's wait for it to be
|
||||||
if ((!ipu0ch.chcr.STR || ipuRegs.ctrl.OFC || ipu0ch.qwc == 0) && ipu_cmd.pos[0] <= 3)
|
if ((!ipu0ch.chcr.STR || ipuRegs.ctrl.OFC || ipu0ch.qwc == 0) && ipu_cmd.pos[0] <= 3)
|
||||||
{
|
{
|
||||||
|
@ -1517,8 +1510,15 @@ __fi static bool mpeg2_slice()
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
|
if (ready_to_decode == true)
|
||||||
|
{
|
||||||
|
ipu_cmd.pos[0] = 3;
|
||||||
|
ready_to_decode = false;
|
||||||
|
CPU_INT(IPU_PROCESS, 64); // Should probably be much higher, but myst 3 doesn't like it right now.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
pxAssert(decoder.ipu0_data > 0);
|
pxAssert(decoder.ipu0_data > 0);
|
||||||
ready_to_decode = true;
|
|
||||||
uint read = ipu_fifo.out.write((u32*)decoder.GetIpuDataPtr(), decoder.ipu0_data);
|
uint read = ipu_fifo.out.write((u32*)decoder.GetIpuDataPtr(), decoder.ipu0_data);
|
||||||
decoder.AdvanceIpuDataBy(read);
|
decoder.AdvanceIpuDataBy(read);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue