aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/engines/engine_interface.h
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-01-04 21:20:00 -0500
committerGitHub <noreply@github.com>2023-01-04 21:20:00 -0500
commitb78328f19a54964ef6874281d1a4d6b6ad1c34d9 (patch)
tree239947ad53a4a06c3641d58c5d6b8daf5b3dc16a /src/video_core/engines/engine_interface.h
parentbbeb6e460cf1fd8f796978980e745410bc77ce08 (diff)
parent3ecc03ec1b5f8c48aee4f2e1f1428908647a1cfc (diff)
Merge pull request #9501 from FernandoS27/yfc-rel-2
Yuzu Fried Chicken Part 1.5: MacroHLE Rework and Dynamic State
Diffstat (limited to 'src/video_core/engines/engine_interface.h')
-rw-r--r--src/video_core/engines/engine_interface.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/video_core/engines/engine_interface.h b/src/video_core/engines/engine_interface.h
index 26cde8584..392322358 100644
--- a/src/video_core/engines/engine_interface.h
+++ b/src/video_core/engines/engine_interface.h
@@ -3,6 +3,10 @@
#pragma once
+#include <bitset>
+#include <limits>
+#include <vector>
+
#include "common/common_types.h"
namespace Tegra::Engines {
@@ -17,6 +21,26 @@ public:
/// Write multiple values to the register identified by method.
virtual void CallMultiMethod(u32 method, const u32* base_start, u32 amount,
u32 methods_pending) = 0;
+
+ void ConsumeSink() {
+ if (method_sink.empty()) {
+ return;
+ }
+ ConsumeSinkImpl();
+ }
+
+ std::bitset<std::numeric_limits<u16>::max()> execution_mask{};
+ std::vector<std::pair<u32, u32>> method_sink{};
+ bool current_dirty{};
+ GPUVAddr current_dma_segment;
+
+protected:
+ virtual void ConsumeSinkImpl() {
+ for (auto [method, value] : method_sink) {
+ CallMethod(method, value, true);
+ }
+ method_sink.clear();
+ }
};
} // namespace Tegra::Engines