mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-05-25 21:03:18 +00:00
liverpool: Implement PM4 MEM_SEMAPHORE. (#2235)
This commit is contained in:
parent
564dbc7b94
commit
a5a1253185
2 changed files with 85 additions and 0 deletions
|
@ -636,6 +636,18 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
|||
}
|
||||
break;
|
||||
}
|
||||
case PM4ItOpcode::MemSemaphore: {
|
||||
const auto* mem_semaphore = reinterpret_cast<const PM4CmdMemSemaphore*>(header);
|
||||
if (mem_semaphore->IsSignaling()) {
|
||||
mem_semaphore->Signal();
|
||||
} else {
|
||||
while (!mem_semaphore->Signaled()) {
|
||||
YIELD_GFX();
|
||||
}
|
||||
mem_semaphore->Decrement();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PM4ItOpcode::AcquireMem: {
|
||||
// const auto* acquire_mem = reinterpret_cast<PM4CmdAcquireMem*>(header);
|
||||
break;
|
||||
|
@ -848,6 +860,18 @@ Liverpool::Task Liverpool::ProcessCompute(std::span<const u32> acb, u32 vqid) {
|
|||
}
|
||||
break;
|
||||
}
|
||||
case PM4ItOpcode::MemSemaphore: {
|
||||
const auto* mem_semaphore = reinterpret_cast<const PM4CmdMemSemaphore*>(header);
|
||||
if (mem_semaphore->IsSignaling()) {
|
||||
mem_semaphore->Signal();
|
||||
} else {
|
||||
while (!mem_semaphore->Signaled()) {
|
||||
YIELD_ASC(vqid);
|
||||
}
|
||||
mem_semaphore->Decrement();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PM4ItOpcode::WaitRegMem: {
|
||||
const auto* wait_reg_mem = reinterpret_cast<const PM4CmdWaitRegMem*>(header);
|
||||
ASSERT(wait_reg_mem->engine.Value() == PM4CmdWaitRegMem::Engine::Me);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue