diff --git a/core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp b/core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp index a2a891d0c..b3a823fa8 100644 --- a/core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp +++ b/core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp @@ -2172,7 +2172,7 @@ VulkanDevice::CopyOutcome VulkanDevice::CopyBuffer(std::uint64_t destination, st // a completion-deferred label): it lands only when that batch is reaped, whatever its fence. const auto completionStoreOverlaps = [&](std::uint64_t address) { if (alwaysSync || state->CopiedWriterOverlaps(address, bytes)) return true; - return Graphics::Recorder::PendingCompletionLabels() != 0 && recorder.PendingLabelIn(address, bytes); + return Graphics::Recorder::PendingCompletionLabels() != 0 && recorder.CompletionLabelIn(address, bytes); }; // The CPU decision (see the header): pure queries, in the order that makes the first failing // test the reason; a signaled writer of the source is fine (its in-place stores are final in diff --git a/core/libs/prx/libSceAgcDriver/tests/execution/CopiedWriterCopy.cpp b/core/libs/prx/libSceAgcDriver/tests/execution/CopiedWriterCopy.cpp index c4b7506b9..f58726236 100644 --- a/core/libs/prx/libSceAgcDriver/tests/execution/CopiedWriterCopy.cpp +++ b/core/libs/prx/libSceAgcDriver/tests/execution/CopiedWriterCopy.cpp @@ -1,6 +1,7 @@ #include "prx/libSceAgcDriver/Execution/include/GuestMemory.hpp" #include "prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp" #include "prx/libSceAgcDriver/Graphics/include/Draw.hpp" +#include "prx/libSceAgcDriver/Graphics/include/Recorder.hpp" #include "prx/libc/include/GuestAllocations.hpp" #include "Recompiler.hpp" #include "VulkanTestDevice.hpp" @@ -109,6 +110,11 @@ int main() { const GuestBlock output; const GuestBlock destination; RecordDispatch(*device, input, output); + auto* recorder = AgcDriver::Graphics::Recorder::Active(); + Require(recorder != nullptr, "copied writer: no active recorder"); + constexpr std::array labelValue{std::byte{1}, std::byte{0}, std::byte{0}, std::byte{0}}; + recorder->NoteLabel(output.Address(), labelValue, 1, 0); + Require(recorder->AfterRecordedWork([] {}), "copied writer: completion action was not recorded"); AgcDriver::VulkanDevice::CopyOutcome outcome{}; { std::lock_guard gpu(AgcDriver::GuestMemory::GpuMutex());