diff options
author | Fernando S <fsahmkow27@gmail.com> | 2022-10-22 13:06:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-22 13:06:03 +0200 |
commit | 0860fffd78e5c0a833bd0285d651a4615d29c4f4 (patch) | |
tree | b9a87dee479da5e0bffbfd29f762c1bbde56c3af | |
parent | Merge pull request #9106 from lioncash/copy-err (diff) | |
parent | Maxwell3D/Puller: Fix regressions and syncing issues. (diff) | |
download | yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.gz yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.bz2 yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.lz yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.xz yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.zst yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.zip |
-rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 17 | ||||
-rw-r--r-- | src/video_core/engines/puller.cpp | 5 |
2 files changed, 9 insertions, 13 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 89a9d1f5a..b1a22b76c 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -473,9 +473,7 @@ void Maxwell3D::ProcessQueryGet() { switch (regs.report_semaphore.query.operation) { case Regs::ReportSemaphore::Operation::Release: - if (regs.report_semaphore.query.release == - Regs::ReportSemaphore::Release::AfterAllPreceedingWrites || - regs.report_semaphore.query.short_query != 0) { + if (regs.report_semaphore.query.short_query != 0) { const GPUVAddr sequence_address{regs.report_semaphore.Address()}; const u32 payload = regs.report_semaphore.payload; std::function<void()> operation([this, sequence_address, payload] { @@ -489,11 +487,10 @@ void Maxwell3D::ProcessQueryGet() { }; const GPUVAddr sequence_address{regs.report_semaphore.Address()}; const u32 payload = regs.report_semaphore.payload; - std::function<void()> operation([this, sequence_address, payload] { + [this, sequence_address, payload] { memory_manager.Write<u64>(sequence_address + sizeof(u64), system.GPU().GetTicks()); memory_manager.Write<u64>(sequence_address, payload); - }); - rasterizer->SyncOperation(std::move(operation)); + }(); } break; case Regs::ReportSemaphore::Operation::Acquire: @@ -569,11 +566,11 @@ void Maxwell3D::ProcessCounterReset() { void Maxwell3D::ProcessSyncPoint() { const u32 sync_point = regs.sync_info.sync_point.Value(); - const auto condition = regs.sync_info.condition.Value(); - [[maybe_unused]] const u32 cache_flush = regs.sync_info.clean_l2.Value(); - if (condition == Regs::SyncInfo::Condition::RopWritesDone) { - rasterizer->SignalSyncPoint(sync_point); + const u32 cache_flush = regs.sync_info.clean_l2.Value(); + if (cache_flush != 0) { + rasterizer->InvalidateGPUCache(); } + rasterizer->SignalSyncPoint(sync_point); } void Maxwell3D::DrawArrays() { diff --git a/src/video_core/engines/puller.cpp b/src/video_core/engines/puller.cpp index cca890792..3977bb0fb 100644 --- a/src/video_core/engines/puller.cpp +++ b/src/video_core/engines/puller.cpp @@ -75,11 +75,10 @@ void Puller::ProcessSemaphoreTriggerMethod() { if (op == GpuSemaphoreOperation::WriteLong) { const GPUVAddr sequence_address{regs.semaphore_address.SemaphoreAddress()}; const u32 payload = regs.semaphore_sequence; - std::function<void()> operation([this, sequence_address, payload] { + [this, sequence_address, payload] { memory_manager.Write<u64>(sequence_address + sizeof(u64), gpu.GetTicks()); memory_manager.Write<u64>(sequence_address, payload); - }); - rasterizer->SignalFence(std::move(operation)); + }(); } else { do { const u32 word{memory_manager.Read<u32>(regs.semaphore_address.SemaphoreAddress())}; |