Linux build fix.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5725 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
762ce28977
commit
221e722284
|
@ -254,6 +254,11 @@ namespace Common
|
||||||
Sleep(ms);
|
Sleep(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SwitchCurrentThread()
|
||||||
|
{
|
||||||
|
SwitchToThread();
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct tagTHREADNAME_INFO
|
typedef struct tagTHREADNAME_INFO
|
||||||
{
|
{
|
||||||
DWORD dwType; // must be 0x1000
|
DWORD dwType; // must be 0x1000
|
||||||
|
@ -423,6 +428,10 @@ namespace Common
|
||||||
usleep(1000 * ms);
|
usleep(1000 * ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SwitchCurrentThread()
|
||||||
|
{
|
||||||
|
usleep(1000 * 1);
|
||||||
|
}
|
||||||
|
|
||||||
void SetCurrentThreadName(const TCHAR* szThreadName)
|
void SetCurrentThreadName(const TCHAR* szThreadName)
|
||||||
{
|
{
|
||||||
|
|
|
@ -205,6 +205,7 @@ namespace Common
|
||||||
|
|
||||||
void InitThreading();
|
void InitThreading();
|
||||||
void SleepCurrentThread(int ms);
|
void SleepCurrentThread(int ms);
|
||||||
|
void SwitchCurrentThread(); // On Linux, this is equal to sleep 1ms
|
||||||
|
|
||||||
// YieldCPU: This function is only effective on HyperThreading CPU
|
// YieldCPU: This function is only effective on HyperThreading CPU
|
||||||
// Use this function during a spin-wait to make the current thread
|
// Use this function during a spin-wait to make the current thread
|
||||||
|
|
|
@ -596,28 +596,14 @@ void STACKALIGN GatherPipeBursted()
|
||||||
|
|
||||||
if (g_VideoInitialize.bOnThread)
|
if (g_VideoInitialize.bOnThread)
|
||||||
{
|
{
|
||||||
// The interrupt latency in Dolphin is much longer than Hardware, so we must be more vigilant on Watermark
|
// A little trick to prevent FIFO from overflown in dual core mode (n < 100 to avoid dead lock)
|
||||||
if (!m_CPStatusReg.OverflowHiWatermark && fifo.CPReadWriteDistance >= HiWatermark_Tighter)
|
for (int cnt = 0; fifo.CPReadWriteDistance > fifo.CPEnd - fifo.CPBase && cnt < 100; cnt++)
|
||||||
{
|
Common::SwitchCurrentThread();
|
||||||
m_CPStatusReg.OverflowHiWatermark = true;
|
|
||||||
if (m_CPCtrlReg.FifoOverflowIntEnable)
|
|
||||||
UpdateInterrupts();
|
|
||||||
}
|
|
||||||
// A little trick to prevent FIFO from overflown in dual core mode
|
|
||||||
// Unfortunately we cannot do the same for single core
|
|
||||||
int cnt = 0;
|
|
||||||
while (fifo.CPReadWriteDistance > fifo.CPEnd - fifo.CPBase)
|
|
||||||
{
|
|
||||||
// Avoid deadlock
|
|
||||||
if (cnt >= 100)
|
|
||||||
break;
|
|
||||||
cnt++;
|
|
||||||
SwitchToThread();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CatchUpGPU();
|
CatchUpGPU();
|
||||||
|
}
|
||||||
|
|
||||||
// The interrupt latency in Dolphin is much longer than Hardware, so we must be more vigilant on Watermark
|
// The interrupt latency in Dolphin is much longer than Hardware, so we must be more vigilant on Watermark
|
||||||
if (!m_CPStatusReg.OverflowHiWatermark && fifo.CPReadWriteDistance >= HiWatermark_Tighter)
|
if (!m_CPStatusReg.OverflowHiWatermark && fifo.CPReadWriteDistance >= HiWatermark_Tighter)
|
||||||
|
@ -626,7 +612,6 @@ void STACKALIGN GatherPipeBursted()
|
||||||
if (m_CPCtrlReg.FifoOverflowIntEnable)
|
if (m_CPCtrlReg.FifoOverflowIntEnable)
|
||||||
UpdateInterrupts();
|
UpdateInterrupts();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
_assert_msg_(COMMANDPROCESSOR, fifo.CPReadWriteDistance <= fifo.CPEnd - fifo.CPBase,
|
_assert_msg_(COMMANDPROCESSOR, fifo.CPReadWriteDistance <= fifo.CPEnd - fifo.CPBase,
|
||||||
"FIFO is overflown by GatherPipe !\nCPU thread is too fast, lower the HiWatermark may help.");
|
"FIFO is overflown by GatherPipe !\nCPU thread is too fast, lower the HiWatermark may help.");
|
||||||
|
|
Loading…
Reference in New Issue