From 743b0e71d943449991aa27ca02604ca6519070df Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 27 Nov 2016 12:16:10 -0500 Subject: [PATCH 1/2] Rasterizer/Memfill: Set the correct stencil write mask when clearing the stencil buffer. --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 7cc3b407a..062f8a67b 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -909,7 +909,7 @@ bool RasterizerOpenGL::AccelerateFill(const GPU::Regs::MemoryFillConfig& config) GLint value_int = (config.value_32bit >> 24); cur_state.depth.write_mask = true; - cur_state.stencil.write_mask = true; + cur_state.stencil.write_mask = 0xFF; cur_state.Apply(); glClearBufferfi(GL_DEPTH_STENCIL, 0, value_float, value_int); } From 46234150263c105bb6d1fbcbd45b8c324d108a99 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 27 Nov 2016 12:30:03 -0500 Subject: [PATCH 2/2] RasterizerGL: Use GL_TRUE and 0xFF in the stencil and depth masks instead of simply true and -1 --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 4 ++-- src/video_core/renderer_opengl/gl_state.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 062f8a67b..d4d5903ce 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -893,7 +893,7 @@ bool RasterizerOpenGL::AccelerateFill(const GPU::Regs::MemoryFillConfig& config) value_float = config.value_32bit / 16777215.0f; // 2^24 - 1 } - cur_state.depth.write_mask = true; + cur_state.depth.write_mask = GL_TRUE; cur_state.Apply(); glClearBufferfv(GL_DEPTH, 0, &value_float); } else if (dst_type == SurfaceType::DepthStencil) { @@ -908,7 +908,7 @@ bool RasterizerOpenGL::AccelerateFill(const GPU::Regs::MemoryFillConfig& config) GLfloat value_float = (config.value_32bit & 0xFFFFFF) / 16777215.0f; // 2^24 - 1 GLint value_int = (config.value_32bit >> 24); - cur_state.depth.write_mask = true; + cur_state.depth.write_mask = GL_TRUE; cur_state.stencil.write_mask = 0xFF; cur_state.Apply(); glClearBufferfi(GL_DEPTH_STENCIL, 0, value_float, value_int); diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index ed84cadea..2a731f483 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp @@ -27,8 +27,8 @@ OpenGLState::OpenGLState() { stencil.test_enabled = false; stencil.test_func = GL_ALWAYS; stencil.test_ref = 0; - stencil.test_mask = -1; - stencil.write_mask = -1; + stencil.test_mask = 0xFF; + stencil.write_mask = 0xFF; stencil.action_depth_fail = GL_KEEP; stencil.action_depth_pass = GL_KEEP; stencil.action_stencil_fail = GL_KEEP;