From 433e764bb0e8e7478f0cca675960c994fadae3ea Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Fri, 20 Sep 2019 15:44:28 -0400 Subject: [PATCH] Rasterizer: Correct introduced bug where a conditional render wouldn't stop a draw call from executing --- .../renderer_opengl/gl_rasterizer.cpp | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index b5c55482fa..a6fe7dd71e 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -626,16 +626,8 @@ void RasterizerOpenGL::Clear() { } void RasterizerOpenGL::DrawPrelude() { - if (accelerate_draw == AccelDraw::Disabled) - return; - - MICROPROFILE_SCOPE(OpenGL_Drawing); auto& gpu = system.GPU().Maxwell3D(); - if (!gpu.ShouldExecute()) { - return; - } - SyncColorMask(); SyncFragmentColorClampState(); SyncMultiSampleState(); @@ -754,9 +746,16 @@ struct DrawParams { bool RasterizerOpenGL::DrawBatch(bool is_indexed) { accelerate_draw = is_indexed ? AccelDraw::Indexed : AccelDraw::Arrays; - DrawPrelude(); + + MICROPROFILE_SCOPE(OpenGL_Drawing); auto& maxwell3d = system.GPU().Maxwell3D(); + if (!maxwell3d.ShouldExecute()) { + return false; + } + + DrawPrelude(); + const auto& regs = maxwell3d.regs; const auto current_instance = maxwell3d.state.current_instance; DrawParams draw_call{}; @@ -783,9 +782,16 @@ bool RasterizerOpenGL::DrawBatch(bool is_indexed) { bool RasterizerOpenGL::DrawMultiBatch(bool is_indexed) { accelerate_draw = is_indexed ? AccelDraw::Indexed : AccelDraw::Arrays; - DrawPrelude(); + + MICROPROFILE_SCOPE(OpenGL_Drawing); auto& maxwell3d = system.GPU().Maxwell3D(); + if (!maxwell3d.ShouldExecute()) { + return false; + } + + DrawPrelude(); + const auto& regs = maxwell3d.regs; const auto& draw_setup = maxwell3d.mme_draw; DrawParams draw_call{};