diff options
Diffstat (limited to '')
| -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() { | |||
| 473 | 473 | ||
| 474 | switch (regs.report_semaphore.query.operation) { | 474 | switch (regs.report_semaphore.query.operation) { |
| 475 | case Regs::ReportSemaphore::Operation::Release: | 475 | case Regs::ReportSemaphore::Operation::Release: |
| 476 | if (regs.report_semaphore.query.release == | 476 | if (regs.report_semaphore.query.short_query != 0) { |
| 477 | Regs::ReportSemaphore::Release::AfterAllPreceedingWrites || | ||
| 478 | regs.report_semaphore.query.short_query != 0) { | ||
| 479 | const GPUVAddr sequence_address{regs.report_semaphore.Address()}; | 477 | const GPUVAddr sequence_address{regs.report_semaphore.Address()}; |
| 480 | const u32 payload = regs.report_semaphore.payload; | 478 | const u32 payload = regs.report_semaphore.payload; |
| 481 | std::function<void()> operation([this, sequence_address, payload] { | 479 | std::function<void()> operation([this, sequence_address, payload] { |
| @@ -489,11 +487,10 @@ void Maxwell3D::ProcessQueryGet() { | |||
| 489 | }; | 487 | }; |
| 490 | const GPUVAddr sequence_address{regs.report_semaphore.Address()}; | 488 | const GPUVAddr sequence_address{regs.report_semaphore.Address()}; |
| 491 | const u32 payload = regs.report_semaphore.payload; | 489 | const u32 payload = regs.report_semaphore.payload; |
| 492 | std::function<void()> operation([this, sequence_address, payload] { | 490 | [this, sequence_address, payload] { |
| 493 | memory_manager.Write<u64>(sequence_address + sizeof(u64), system.GPU().GetTicks()); | 491 | memory_manager.Write<u64>(sequence_address + sizeof(u64), system.GPU().GetTicks()); |
| 494 | memory_manager.Write<u64>(sequence_address, payload); | 492 | memory_manager.Write<u64>(sequence_address, payload); |
| 495 | }); | 493 | }(); |
| 496 | rasterizer->SyncOperation(std::move(operation)); | ||
| 497 | } | 494 | } |
| 498 | break; | 495 | break; |
| 499 | case Regs::ReportSemaphore::Operation::Acquire: | 496 | case Regs::ReportSemaphore::Operation::Acquire: |
| @@ -569,11 +566,11 @@ void Maxwell3D::ProcessCounterReset() { | |||
| 569 | 566 | ||
| 570 | void Maxwell3D::ProcessSyncPoint() { | 567 | void Maxwell3D::ProcessSyncPoint() { |
| 571 | const u32 sync_point = regs.sync_info.sync_point.Value(); | 568 | const u32 sync_point = regs.sync_info.sync_point.Value(); |
| 572 | const auto condition = regs.sync_info.condition.Value(); | 569 | const u32 cache_flush = regs.sync_info.clean_l2.Value(); |
| 573 | [[maybe_unused]] const u32 cache_flush = regs.sync_info.clean_l2.Value(); | 570 | if (cache_flush != 0) { |
| 574 | if (condition == Regs::SyncInfo::Condition::RopWritesDone) { | 571 | rasterizer->InvalidateGPUCache(); |
| 575 | rasterizer->SignalSyncPoint(sync_point); | ||
| 576 | } | 572 | } |
| 573 | rasterizer->SignalSyncPoint(sync_point); | ||
| 577 | } | 574 | } |
| 578 | 575 | ||
| 579 | void Maxwell3D::DrawArrays() { | 576 | 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() { | |||
| 75 | if (op == GpuSemaphoreOperation::WriteLong) { | 75 | if (op == GpuSemaphoreOperation::WriteLong) { |
| 76 | const GPUVAddr sequence_address{regs.semaphore_address.SemaphoreAddress()}; | 76 | const GPUVAddr sequence_address{regs.semaphore_address.SemaphoreAddress()}; |
| 77 | const u32 payload = regs.semaphore_sequence; | 77 | const u32 payload = regs.semaphore_sequence; |
| 78 | std::function<void()> operation([this, sequence_address, payload] { | 78 | [this, sequence_address, payload] { |
| 79 | memory_manager.Write<u64>(sequence_address + sizeof(u64), gpu.GetTicks()); | 79 | memory_manager.Write<u64>(sequence_address + sizeof(u64), gpu.GetTicks()); |
| 80 | memory_manager.Write<u64>(sequence_address, payload); | 80 | memory_manager.Write<u64>(sequence_address, payload); |
| 81 | }); | 81 | }(); |
| 82 | rasterizer->SignalFence(std::move(operation)); | ||
| 83 | } else { | 82 | } else { |
| 84 | do { | 83 | do { |
| 85 | const u32 word{memory_manager.Read<u32>(regs.semaphore_address.SemaphoreAddress())}; | 84 | const u32 word{memory_manager.Read<u32>(regs.semaphore_address.SemaphoreAddress())}; |