From a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628 Mon Sep 17 00:00:00 2001
From: Kelebek1 <eeeedddccc@hotmail.co.uk>
Date: Wed, 30 Nov 2022 01:43:36 +0000
Subject: [PATCH] Respect render mode override

---
 src/video_core/engines/maxwell_3d.cpp | 68 +++++++++++++++------------
 1 file changed, 39 insertions(+), 29 deletions(-)

diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index 55462752c..0a601deb5 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -486,41 +486,51 @@ void Maxwell3D::ProcessQueryGet() {
 
 void Maxwell3D::ProcessQueryCondition() {
     const GPUVAddr condition_address{regs.render_enable.Address()};
-    switch (regs.render_enable.mode) {
-    case Regs::RenderEnable::Mode::True: {
+    switch (regs.render_enable_override) {
+    case Regs::RenderEnable::Override::AlwaysRender:
         execute_on = true;
         break;
-    }
-    case Regs::RenderEnable::Mode::False: {
+    case Regs::RenderEnable::Override::NeverRender:
         execute_on = false;
         break;
-    }
-    case Regs::RenderEnable::Mode::Conditional: {
-        Regs::ReportSemaphore::Compare cmp;
-        memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
-        execute_on = cmp.initial_sequence != 0U && cmp.initial_mode != 0U;
+    case Regs::RenderEnable::Override::UseRenderEnable:
+        switch (regs.render_enable.mode) {
+        case Regs::RenderEnable::Mode::True: {
+            execute_on = true;
+            break;
+        }
+        case Regs::RenderEnable::Mode::False: {
+            execute_on = false;
+            break;
+        }
+        case Regs::RenderEnable::Mode::Conditional: {
+            Regs::ReportSemaphore::Compare cmp;
+            memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
+            execute_on = cmp.initial_sequence != 0U && cmp.initial_mode != 0U;
+            break;
+        }
+        case Regs::RenderEnable::Mode::IfEqual: {
+            Regs::ReportSemaphore::Compare cmp;
+            memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
+            execute_on = cmp.initial_sequence == cmp.current_sequence &&
+                         cmp.initial_mode == cmp.current_mode;
+            break;
+        }
+        case Regs::RenderEnable::Mode::IfNotEqual: {
+            Regs::ReportSemaphore::Compare cmp;
+            memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
+            execute_on = cmp.initial_sequence != cmp.current_sequence ||
+                         cmp.initial_mode != cmp.current_mode;
+            break;
+        }
+        default: {
+            UNIMPLEMENTED_MSG("Uninplemented Condition Mode!");
+            execute_on = true;
+            break;
+        }
+        }
         break;
     }
-    case Regs::RenderEnable::Mode::IfEqual: {
-        Regs::ReportSemaphore::Compare cmp;
-        memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
-        execute_on =
-            cmp.initial_sequence == cmp.current_sequence && cmp.initial_mode == cmp.current_mode;
-        break;
-    }
-    case Regs::RenderEnable::Mode::IfNotEqual: {
-        Regs::ReportSemaphore::Compare cmp;
-        memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
-        execute_on =
-            cmp.initial_sequence != cmp.current_sequence || cmp.initial_mode != cmp.current_mode;
-        break;
-    }
-    default: {
-        UNIMPLEMENTED_MSG("Uninplemented Condition Mode!");
-        execute_on = true;
-        break;
-    }
-    }
 }
 
 void Maxwell3D::ProcessCounterReset() {