summaryrefslogtreecommitdiff
path: root/src/video_core/macro
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2023-08-04 03:32:30 +0200
committerGravatar Fernando Sahmkow2023-09-23 23:05:29 +0200
commitf1a2e367113518b277f34ffbb04499882c3b6051 (patch)
tree0920a98bd359b9207130d01f6df4ae5135ec805c /src/video_core/macro
parentQuery Cache: Setup Base rework (diff)
downloadyuzu-f1a2e367113518b277f34ffbb04499882c3b6051.tar.gz
yuzu-f1a2e367113518b277f34ffbb04499882c3b6051.tar.xz
yuzu-f1a2e367113518b277f34ffbb04499882c3b6051.zip
Query Cachge: Fully rework Vulkan's query cache
Diffstat (limited to 'src/video_core/macro')
-rw-r--r--src/video_core/macro/macro_hle.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/video_core/macro/macro_hle.cpp b/src/video_core/macro/macro_hle.cpp
index 6272a4652..e980af171 100644
--- a/src/video_core/macro/macro_hle.cpp
+++ b/src/video_core/macro/macro_hle.cpp
@@ -319,6 +319,25 @@ private:
319 } 319 }
320}; 320};
321 321
322class HLE_DrawIndirectByteCount final : public HLEMacroImpl {
323public:
324 explicit HLE_DrawIndirectByteCount(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {}
325
326 void Execute(const std::vector<u32>& parameters, [[maybe_unused]] u32 method) override {
327 maxwell3d.RefreshParameters();
328
329 maxwell3d.regs.draw.begin = parameters[0];
330 maxwell3d.regs.draw_auto_stride = parameters[1];
331 maxwell3d.regs.draw_auto_byte_count = parameters[2];
332
333 if (maxwell3d.ShouldExecute()) {
334 maxwell3d.draw_manager->DrawArray(
335 maxwell3d.regs.draw.topology, 0,
336 maxwell3d.regs.draw_auto_byte_count / maxwell3d.regs.draw_auto_stride, 0, 1);
337 }
338 }
339};
340
322class HLE_C713C83D8F63CCF3 final : public HLEMacroImpl { 341class HLE_C713C83D8F63CCF3 final : public HLEMacroImpl {
323public: 342public:
324 explicit HLE_C713C83D8F63CCF3(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {} 343 explicit HLE_C713C83D8F63CCF3(Maxwell3D& maxwell3d_) : HLEMacroImpl(maxwell3d_) {}
@@ -536,6 +555,11 @@ HLEMacro::HLEMacro(Maxwell3D& maxwell3d_) : maxwell3d{maxwell3d_} {
536 [](Maxwell3D& maxwell3d__) -> std::unique_ptr<CachedMacro> { 555 [](Maxwell3D& maxwell3d__) -> std::unique_ptr<CachedMacro> {
537 return std::make_unique<HLE_TransformFeedbackSetup>(maxwell3d__); 556 return std::make_unique<HLE_TransformFeedbackSetup>(maxwell3d__);
538 })); 557 }));
558 builders.emplace(0xB5F74EDB717278ECULL,
559 std::function<std::unique_ptr<CachedMacro>(Maxwell3D&)>(
560 [](Maxwell3D& maxwell3d__) -> std::unique_ptr<CachedMacro> {
561 return std::make_unique<HLE_DrawIndirectByteCount>(maxwell3d__);
562 }));
539} 563}
540 564
541HLEMacro::~HLEMacro() = default; 565HLEMacro::~HLEMacro() = default;