From 1e64b5e2ec798f7d71fec73fc4e8642441e04bb9 Mon Sep 17 00:00:00 2001
From: FengChen <vonchenplus@gmail.com>
Date: Thu, 8 Dec 2022 22:51:18 +0800
Subject: [PATCH] video_core: The draw manager manages whether Clear is
 required.

---
 src/video_core/engines/draw_manager.cpp          | 13 +++++++++----
 src/video_core/renderer_opengl/gl_rasterizer.cpp |  3 ---
 src/video_core/renderer_vulkan/vk_rasterizer.cpp |  3 ---
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/src/video_core/engines/draw_manager.cpp b/src/video_core/engines/draw_manager.cpp
index 36e4ec89db..49a16266ea 100644
--- a/src/video_core/engines/draw_manager.cpp
+++ b/src/video_core/engines/draw_manager.cpp
@@ -52,12 +52,15 @@ void DrawManager::ProcessMethodCall(u32 method, u32 argument) {
 }
 
 void DrawManager::Clear(u32 layer_count) {
-    maxwell3d->rasterizer->Clear(layer_count);
+    if (maxwell3d->ShouldExecute()) {
+        maxwell3d->rasterizer->Clear(layer_count);
+    }
 }
 
 void DrawManager::DrawDeferred() {
-    if (draw_state.draw_mode != DrawMode::Instance || draw_state.instance_count == 0)
+    if (draw_state.draw_mode != DrawMode::Instance || draw_state.instance_count == 0) {
         return;
+    }
     DrawEnd(draw_state.instance_count + 1, true);
     draw_state.instance_count = 0;
 }
@@ -112,8 +115,9 @@ void DrawManager::DrawEnd(u32 instance_count, bool force_draw) {
     const auto& regs{maxwell3d->regs};
     switch (draw_state.draw_mode) {
     case DrawMode::Instance:
-        if (!force_draw)
+        if (!force_draw) {
             break;
+        }
         [[fallthrough]];
     case DrawMode::General:
         draw_state.base_instance = regs.global_base_instance_index;
@@ -185,7 +189,8 @@ void DrawManager::ProcessDraw(bool draw_indexed, u32 instance_count) {
 
     UpdateTopology();
 
-    if (maxwell3d->ShouldExecute())
+    if (maxwell3d->ShouldExecute()) {
         maxwell3d->rasterizer->Draw(draw_indexed, instance_count);
+    }
 }
 } // namespace Tegra::Engines
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 64ed6f628c..a44b8c454b 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -138,9 +138,6 @@ void RasterizerOpenGL::LoadDiskResources(u64 title_id, std::stop_token stop_load
 
 void RasterizerOpenGL::Clear(u32 layer_count) {
     MICROPROFILE_SCOPE(OpenGL_Clears);
-    if (!maxwell3d->ShouldExecute()) {
-        return;
-    }
 
     const auto& regs = maxwell3d->regs;
     bool use_color{};
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 8d7a5e4006..c9ace956c6 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -216,9 +216,6 @@ void RasterizerVulkan::Draw(bool is_indexed, u32 instance_count) {
 void RasterizerVulkan::Clear(u32 layer_count) {
     MICROPROFILE_SCOPE(Vulkan_Clearing);
 
-    if (!maxwell3d->ShouldExecute()) {
-        return;
-    }
     FlushWork();
 
     query_cache.UpdateCounters();