RSX/GL/Null: Move semaphore handling to backend

This commit is contained in:
vlj 2015-05-26 18:35:56 +02:00
parent 01bb63b1a6
commit 288581cb43
5 changed files with 74 additions and 22 deletions

View file

@ -201,43 +201,40 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
}
case NV4097_SET_SEMAPHORE_OFFSET:
{
m_PGRAPH_semaphore_offset = ARGS(0);
break;
}
case NV406E_SEMAPHORE_OFFSET:
{
m_set_semaphore_offset = true;
m_semaphore_offset = ARGS(0);
m_PFIFO_semaphore_offset = ARGS(0);
break;
}
case NV406E_SEMAPHORE_ACQUIRE:
{
if (ARGS(0))
{
LOG_WARNING(RSX, "TODO: NV406E_SEMAPHORE_ACQUIRE: 0x%x", ARGS(0));
}
semaphorePFIFOAcquire(m_PFIFO_semaphore_offset, ARGS(0));
break;
}
case NV406E_SEMAPHORE_RELEASE:
{
m_PFIFO_semaphore_release_value = ARGS(0);
break;
}
case NV4097_TEXTURE_READ_SEMAPHORE_RELEASE:
{
if (m_set_semaphore_offset)
{
m_set_semaphore_offset = false;
vm::write32(m_label_addr + m_semaphore_offset, ARGS(0));
}
semaphorePGRAPHTextureReadRelease(m_PGRAPH_semaphore_offset, ARGS(0));
break;
}
case NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE:
{
if (m_set_semaphore_offset)
{
m_set_semaphore_offset = false;
u32 value = ARGS(0);
value = (value & 0xff00ff00) | ((value & 0xff) << 16) | ((value >> 16) & 0xff);
vm::write32(m_label_addr + m_semaphore_offset, value);
}
u32 value = ARGS(0);
value = (value & 0xff00ff00) | ((value & 0xff) << 16) | ((value >> 16) & 0xff);
semaphorePGRAPHBackendRelease(m_PGRAPH_semaphore_offset, value);
break;
}