mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-05 00:42:48 +00:00
Implement MEM_SEMAPHORE as a global pipeline barrier
This commit is contained in:
parent
2c1aa0fb56
commit
715d73b08f
@ -293,15 +293,15 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
|||||||
const auto* mem_semaphore = reinterpret_cast<const PM4CmdMemSemaphore*>(header);
|
const auto* mem_semaphore = reinterpret_cast<const PM4CmdMemSemaphore*>(header);
|
||||||
const auto addr = mem_semaphore->Address<VAddr>();
|
const auto addr = mem_semaphore->Address<VAddr>();
|
||||||
const auto select = mem_semaphore->semSel;
|
const auto select = mem_semaphore->semSel;
|
||||||
const auto client = mem_semaphore->clientCode;
|
|
||||||
const auto signal_type = mem_semaphore->signalType;
|
const auto signal_type = mem_semaphore->signalType;
|
||||||
LOG_WARNING(Lib_GnmDriver, "MemSemaphore ignored: addr {:#X}, select {}, client {}, signal {}, wait {}, mailbox {}",
|
using enum PM4CmdMemSemaphore::MemSemaphoreSelect;
|
||||||
|
using enum PM4CmdMemSemaphore::MemSemaphoreSignalType;
|
||||||
|
LOG_DEBUG(Lib_GnmDriver,
|
||||||
|
"MemSemaphore GFX addr = {:#X}: {}, {}",
|
||||||
addr,
|
addr,
|
||||||
select.Value() == PM4CmdMemSemaphore::MemSemaphoreSelect::SignalSemaphore ? "signal" : "wait",
|
select.Value() == SignalSemaphore ? "signal" : "wait",
|
||||||
client.Value() == PM4CmdMemSemaphore::MemSemaphoreClientCode::CP ? "CP" : std::to_string(std::to_underlying(client.Value())),
|
signal_type.Value() == SignalIncrementOrDecrement
|
||||||
std::to_underlying(signal_type.Value()) == 1 ? "increment/decrement" : "set 1/do nothing",
|
? "increment/decrement" : "set 1/do nothing"
|
||||||
mem_semaphore->waitOnSignal.Value(),
|
|
||||||
std::to_underlying(mem_semaphore->useMailbox.Value())
|
|
||||||
);
|
);
|
||||||
if (rasterizer) {
|
if (rasterizer) {
|
||||||
rasterizer->GlobalBarrier();
|
rasterizer->GlobalBarrier();
|
||||||
@ -868,15 +868,14 @@ Liverpool::Task Liverpool::ProcessCompute(std::span<const u32> acb, u32 vqid) {
|
|||||||
const auto* mem_semaphore = reinterpret_cast<const PM4CmdMemSemaphore*>(header);
|
const auto* mem_semaphore = reinterpret_cast<const PM4CmdMemSemaphore*>(header);
|
||||||
const auto addr = mem_semaphore->Address<VAddr>();
|
const auto addr = mem_semaphore->Address<VAddr>();
|
||||||
const auto select = mem_semaphore->semSel;
|
const auto select = mem_semaphore->semSel;
|
||||||
const auto client = mem_semaphore->clientCode;
|
|
||||||
const auto signal_type = mem_semaphore->signalType;
|
const auto signal_type = mem_semaphore->signalType;
|
||||||
LOG_WARNING(Lib_GnmDriver, "MemSemaphore ignored: addr {:#X}, select {}, client {}, signal {}, wait {}, mailbox {}",
|
using enum PM4CmdMemSemaphore::MemSemaphoreSelect;
|
||||||
|
using enum PM4CmdMemSemaphore::MemSemaphoreSignalType;
|
||||||
|
LOG_DEBUG(Lib_GnmDriver, "MemSemaphore CE addr = {:#X}: {}, {}",
|
||||||
addr,
|
addr,
|
||||||
select.Value() == PM4CmdMemSemaphore::MemSemaphoreSelect::SignalSemaphore ? "signal" : "wait",
|
select.Value() == SignalSemaphore ? "signal" : "wait",
|
||||||
client.Value() == PM4CmdMemSemaphore::MemSemaphoreClientCode::CP ? "CP" : std::to_string(std::to_underlying(client.Value())),
|
signal_type.Value() == SignalIncrementOrDecrement
|
||||||
std::to_underlying(signal_type.Value()) == 1 ? "increment/decrement" : "set 1/do nothing",
|
? "increment/decrement" : "set 1/do nothing"
|
||||||
mem_semaphore->waitOnSignal.Value(),
|
|
||||||
std::to_underlying(mem_semaphore->useMailbox.Value())
|
|
||||||
);
|
);
|
||||||
if (rasterizer) {
|
if (rasterizer) {
|
||||||
rasterizer->GlobalBarrier();
|
rasterizer->GlobalBarrier();
|
||||||
|
Loading…
Reference in New Issue
Block a user