summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/engines/maxwell_3d.cpp17
-rw-r--r--src/video_core/engines/puller.cpp5
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 84c1abf3d..fdf470913 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
570void Maxwell3D::ProcessSyncPoint() { 567void 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
579void Maxwell3D::DrawArrays() { 576void 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())};