Просмотр исходного кода

Rasterizer: Correct introduced bug where a conditional render wouldn't stop a draw call from executing

Fernando Sahmkow 6 лет назад
Родитель
Сommit
433e764bb0
1 измененных файлов с 16 добавлено и 10 удалено
  1. 16 10
      src/video_core/renderer_opengl/gl_rasterizer.cpp

+ 16 - 10
src/video_core/renderer_opengl/gl_rasterizer.cpp

@@ -626,16 +626,8 @@ void RasterizerOpenGL::Clear() {
 }
 }
 
 
 void RasterizerOpenGL::DrawPrelude() {
 void RasterizerOpenGL::DrawPrelude() {
-    if (accelerate_draw == AccelDraw::Disabled)
-        return;
-
-    MICROPROFILE_SCOPE(OpenGL_Drawing);
     auto& gpu = system.GPU().Maxwell3D();
     auto& gpu = system.GPU().Maxwell3D();
 
 
-    if (!gpu.ShouldExecute()) {
-        return;
-    }
-
     SyncColorMask();
     SyncColorMask();
     SyncFragmentColorClampState();
     SyncFragmentColorClampState();
     SyncMultiSampleState();
     SyncMultiSampleState();
@@ -754,9 +746,16 @@ struct DrawParams {
 
 
 bool RasterizerOpenGL::DrawBatch(bool is_indexed) {
 bool RasterizerOpenGL::DrawBatch(bool is_indexed) {
     accelerate_draw = is_indexed ? AccelDraw::Indexed : AccelDraw::Arrays;
     accelerate_draw = is_indexed ? AccelDraw::Indexed : AccelDraw::Arrays;
-    DrawPrelude();
+
+    MICROPROFILE_SCOPE(OpenGL_Drawing);
 
 
     auto& maxwell3d = system.GPU().Maxwell3D();
     auto& maxwell3d = system.GPU().Maxwell3D();
+    if (!maxwell3d.ShouldExecute()) {
+        return false;
+    }
+
+    DrawPrelude();
+
     const auto& regs = maxwell3d.regs;
     const auto& regs = maxwell3d.regs;
     const auto current_instance = maxwell3d.state.current_instance;
     const auto current_instance = maxwell3d.state.current_instance;
     DrawParams draw_call{};
     DrawParams draw_call{};
@@ -783,9 +782,16 @@ bool RasterizerOpenGL::DrawBatch(bool is_indexed) {
 
 
 bool RasterizerOpenGL::DrawMultiBatch(bool is_indexed) {
 bool RasterizerOpenGL::DrawMultiBatch(bool is_indexed) {
     accelerate_draw = is_indexed ? AccelDraw::Indexed : AccelDraw::Arrays;
     accelerate_draw = is_indexed ? AccelDraw::Indexed : AccelDraw::Arrays;
-    DrawPrelude();
+
+    MICROPROFILE_SCOPE(OpenGL_Drawing);
 
 
     auto& maxwell3d = system.GPU().Maxwell3D();
     auto& maxwell3d = system.GPU().Maxwell3D();
+    if (!maxwell3d.ShouldExecute()) {
+        return false;
+    }
+
+    DrawPrelude();
+
     const auto& regs = maxwell3d.regs;
     const auto& regs = maxwell3d.regs;
     const auto& draw_setup = maxwell3d.mme_draw;
     const auto& draw_setup = maxwell3d.mme_draw;
     DrawParams draw_call{};
     DrawParams draw_call{};