From 524e9730e2d8b6888a66f4f6d8f63d46e922043e Mon Sep 17 00:00:00 2001 From: DH Date: Tue, 15 Oct 2024 19:02:37 +0300 Subject: [PATCH] gpu: compute: stub acquire mem bugfixes --- rpcsx/gpu/Pipe.cpp | 19 ++++++++++++------- rpcsx/gpu/Pipe.hpp | 1 + 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/rpcsx/gpu/Pipe.cpp b/rpcsx/gpu/Pipe.cpp index 5ffd790fa..4d63495b7 100644 --- a/rpcsx/gpu/Pipe.cpp +++ b/rpcsx/gpu/Pipe.cpp @@ -96,6 +96,7 @@ ComputePipe::ComputePipe(int index) commandHandlers[gnm::IT_WAIT_REG_MEM] = &ComputePipe::waitRegMem; commandHandlers[gnm::IT_WRITE_DATA] = &ComputePipe::writeData; commandHandlers[gnm::IT_INDIRECT_BUFFER] = &ComputePipe::indirectBuffer; + commandHandlers[gnm::IT_ACQUIRE_MEM] = &ComputePipe::acquireMem; } bool ComputePipe::processAllRings() { @@ -169,6 +170,8 @@ bool ComputePipe::processRing(Ring &ring) { if (ring.rptrReportLocation != nullptr) { *ring.rptrReportLocation = ring.rptr - ring.base; } + + break; } return true; @@ -197,8 +200,8 @@ void ComputePipe::mapQueue(int queueId, Ring ring, waitForIdle(queueId, lock); } - std::println("mapQueue: {}, {}, {}", (void *)ring.base, (void *)ring.wptr, - ring.size); + std::println("mapQueue: {}, {}, {}, {}", (void *)ring.base, (void *)ring.wptr, + ring.size, (void *)ring.doorbell); queues[1 - ring.indirectLevel][queueId] = ring; } @@ -414,15 +417,17 @@ bool ComputePipe::indirectBuffer(Ring &ring) { auto ibSize = ring.rptr[3] & ((1 << 20) - 1); auto address = addressLo | (static_cast(addressHi) << 32); - if (ring.indirectLevel != 0) { - vmId = ring.vmId; - } + vmId = ring.vmId; + auto rptr = RemoteMemory{vmId}.getPointer(address); - setIndirectRing(currentQueueId, ring.indirectLevel + 1, - Ring::createFromRange(vmId, rptr, ibSize)); + auto indirectRing = Ring::createFromRange(vmId, rptr, ibSize); + indirectRing.doorbell = ring.doorbell; + setIndirectRing(currentQueueId, ring.indirectLevel + 1, indirectRing); return true; } +bool ComputePipe::acquireMem(Ring &ring) { return true; } + bool ComputePipe::unknownPacket(Ring &ring) { auto op = rx::getBits(ring.rptr[0], 15, 8); diff --git a/rpcsx/gpu/Pipe.hpp b/rpcsx/gpu/Pipe.hpp index c4b07bc6c..d4a17ce87 100644 --- a/rpcsx/gpu/Pipe.hpp +++ b/rpcsx/gpu/Pipe.hpp @@ -66,6 +66,7 @@ struct ComputePipe { bool waitRegMem(Ring &ring); bool writeData(Ring &ring); bool indirectBuffer(Ring &ring); + bool acquireMem(Ring &ring); bool unknownPacket(Ring &ring); bool handleNop(Ring &ring);