Fixed broken CPU EFB access on DX plugin, helps Wind Waker and ZTP not to hang
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4116 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
0dcf03b898
commit
94bc6d7f36
|
@ -97,8 +97,8 @@ union ZeldaVoicePB
|
||||||
// Read-only part
|
// Read-only part
|
||||||
u16 Format; // 0x80 | audio format
|
u16 Format; // 0x80 | audio format
|
||||||
u16 RepeatMode; // 0x81 | 0 = one-shot, non zero = loop
|
u16 RepeatMode; // 0x81 | 0 = one-shot, non zero = loop
|
||||||
u16 LoopYN1; // 0x82 | YN1 reload (when AFC loops)
|
u16 LoopYN2; // 0x82 | YN2 reload (when AFC loops)
|
||||||
u16 LoopYN2; // 0x83 | YN2 reload (when AFC loops)
|
u16 LoopYN1; // 0x83 | YN1 reload (when AFC loops)
|
||||||
u16 Unk84; // 0x84 | IIR Filter # coefs?
|
u16 Unk84; // 0x84 | IIR Filter # coefs?
|
||||||
u16 StopOnSilence; // 0x85 | Stop on silence? (Flag for something volume related. Decides the weird stuff at 035a/ZWW, alco 0cd3)
|
u16 StopOnSilence; // 0x85 | Stop on silence? (Flag for something volume related. Decides the weird stuff at 035a/ZWW, alco 0cd3)
|
||||||
u16 Unk86; // 0x86 | unknown
|
u16 Unk86; // 0x86 | unknown
|
||||||
|
|
|
@ -291,8 +291,8 @@ restart:
|
||||||
PB.CurAddr = PB.StartAddr; //+ (PB.LoopStartPos >> 4) * PB.Format + ;
|
PB.CurAddr = PB.StartAddr; //+ (PB.LoopStartPos >> 4) * PB.Format + ;
|
||||||
PB.ReachedEnd = 0;
|
PB.ReachedEnd = 0;
|
||||||
// Hmm, this shouldn't be reversed .. or should it? Is it different between versions of the ucode?
|
// Hmm, this shouldn't be reversed .. or should it? Is it different between versions of the ucode?
|
||||||
PB.YN1 = PB.LoopYN2;
|
PB.YN1 = PB.LoopYN1;
|
||||||
PB.YN2 = PB.LoopYN1;
|
PB.YN2 = PB.LoopYN2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -268,14 +268,12 @@ void Video_SendFifoData(u8* _uData, u32 len)
|
||||||
|
|
||||||
void VideoFifo_CheckSwapRequest()
|
void VideoFifo_CheckSwapRequest()
|
||||||
{
|
{
|
||||||
|
// CPU swap unimplemented
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoFifo_CheckSwapRequestAt(u32 xfbAddr, u32 fbWidth, u32 fbHeight)
|
void VideoFifo_CheckSwapRequestAt(u32 xfbAddr, u32 fbWidth, u32 fbHeight)
|
||||||
{
|
{
|
||||||
}
|
// CPU swap unimplemented
|
||||||
|
|
||||||
void VideoFifo_CheckEFBAccess()
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight)
|
void Video_BeginField(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight)
|
||||||
|
@ -346,7 +344,7 @@ void Video_Screenshot(const char *_szFilename)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Video_OnThreadAccessEFB()
|
void VideoFifo_CheckEFBAccess()
|
||||||
{
|
{
|
||||||
s_criticalEFB.Enter();
|
s_criticalEFB.Enter();
|
||||||
s_AccessEFBResult = 0;
|
s_AccessEFBResult = 0;
|
||||||
|
@ -371,7 +369,8 @@ void Video_OnThreadAccessEFB()
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
s_AccessEFBDone.Set();
|
if (g_VideoInitialize.bUseDualCore)
|
||||||
|
s_AccessEFBDone.Set();
|
||||||
|
|
||||||
s_criticalEFB.Leave();
|
s_criticalEFB.Leave();
|
||||||
}
|
}
|
||||||
|
@ -380,30 +379,30 @@ u32 Video_AccessEFB(EFBAccessType type, u32 x, u32 y)
|
||||||
{
|
{
|
||||||
u32 result;
|
u32 result;
|
||||||
|
|
||||||
s_criticalEFB.Enter();
|
s_criticalEFB.Enter();
|
||||||
|
|
||||||
s_AccessEFBType = type;
|
s_AccessEFBType = type;
|
||||||
s_EFBx = x;
|
s_EFBx = x;
|
||||||
s_EFBy = y;
|
s_EFBy = y;
|
||||||
|
|
||||||
if (g_VideoInitialize.bUseDualCore)
|
if (g_VideoInitialize.bUseDualCore)
|
||||||
{
|
|
||||||
s_AccessEFBDone.Init();
|
s_AccessEFBDone.Init();
|
||||||
}
|
|
||||||
|
|
||||||
s_criticalEFB.Leave();
|
s_criticalEFB.Leave();
|
||||||
|
|
||||||
if (g_VideoInitialize.bUseDualCore)
|
if (g_VideoInitialize.bUseDualCore)
|
||||||
s_AccessEFBDone.Wait();
|
s_AccessEFBDone.Wait();
|
||||||
else
|
else
|
||||||
Video_OnThreadAccessEFB();
|
VideoFifo_CheckEFBAccess();
|
||||||
|
|
||||||
|
s_criticalEFB.Enter();
|
||||||
|
|
||||||
s_criticalEFB.Enter();
|
|
||||||
if (g_VideoInitialize.bUseDualCore)
|
if (g_VideoInitialize.bUseDualCore)
|
||||||
s_AccessEFBDone.Shutdown();
|
s_AccessEFBDone.Shutdown();
|
||||||
|
|
||||||
result = s_AccessEFBResult;
|
result = s_AccessEFBResult;
|
||||||
s_criticalEFB.Leave();
|
|
||||||
|
s_criticalEFB.Leave();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue