From 487379c593bcaf3787ede187c5d44f7923b54dc9 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Mon, 17 Feb 2020 18:10:23 -0400 Subject: OpenGL: Implement Fencing backend. --- src/video_core/engines/maxwell_3d.cpp | 16 +++++----------- src/video_core/engines/maxwell_3d.h | 4 ---- 2 files changed, 5 insertions(+), 15 deletions(-) (limited to 'src/video_core/engines') diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 2605c3b42..c297bc31b 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -397,14 +397,6 @@ void Maxwell3D::StampQueryResult(u64 payload, bool long_query) { } } -void Maxwell3D::ReleaseFences() { - for (const auto pair : delay_fences) { - const auto [addr, payload] = pair; - memory_manager.Write(addr, static_cast(payload)); - } - delay_fences.clear(); -} - void Maxwell3D::ProcessQueryGet() { // TODO(Subv): Support the other query units. ASSERT_MSG(regs.query.query_get.unit == Regs::QueryUnit::Crop, @@ -412,10 +404,12 @@ void Maxwell3D::ProcessQueryGet() { switch (regs.query.query_get.operation) { case Regs::QueryOperation::Release: { - rasterizer.FlushCommands(); - rasterizer.SyncGuestHost(); const u64 result = regs.query.query_sequence; - delay_fences.emplace_back(regs.query.QueryAddress(), result); + if (regs.query.query_get.fence == 1) { + rasterizer.SignalFence(regs.query.QueryAddress(), static_cast(result)); + } else { + StampQueryResult(result, regs.query.query_get.short_query == 0); + } break; } case Regs::QueryOperation::Acquire: diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 0a93827ec..59d5752d2 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -1427,8 +1427,6 @@ public: Tables tables{}; } dirty; - void ReleaseFences(); - private: void InitializeRegisterDefaults(); @@ -1469,8 +1467,6 @@ private: std::array dirty_pointers{}; - std::vector> delay_fences; - /// Retrieves information about a specific TIC entry from the TIC buffer. Texture::TICEntry GetTICEntry(u32 tic_index) const; -- cgit v1.2.3