diff options
author | Subv <subv2112@gmail.com> | 2015-08-20 17:11:09 +0200 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2015-08-20 17:11:09 +0200 |
commit | 46f660a789ff02f9cd86600ed82e0936b049b176 (patch) | |
tree | ddb2c54c86025ac338549922c7c548844e38a68e /src/video_core/renderer_opengl/gl_rasterizer.cpp | |
parent | GPU/Rasterizer: Corrected the stencil implementation. (diff) | |
download | yuzu-46f660a789ff02f9cd86600ed82e0936b049b176.tar yuzu-46f660a789ff02f9cd86600ed82e0936b049b176.tar.gz yuzu-46f660a789ff02f9cd86600ed82e0936b049b176.tar.bz2 yuzu-46f660a789ff02f9cd86600ed82e0936b049b176.tar.lz yuzu-46f660a789ff02f9cd86600ed82e0936b049b176.tar.xz yuzu-46f660a789ff02f9cd86600ed82e0936b049b176.tar.zst yuzu-46f660a789ff02f9cd86600ed82e0936b049b176.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 9f1552adf..962c659e0 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -268,7 +268,8 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) { break; // Stencil test - case PICA_REG_INDEX(output_merger.stencil_test): + case PICA_REG_INDEX(output_merger.stencil_test.raw_func): + case PICA_REG_INDEX(output_merger.stencil_test.raw_op): SyncStencilTest(); break; @@ -675,7 +676,15 @@ void RasterizerOpenGL::SyncLogicOp() { } void RasterizerOpenGL::SyncStencilTest() { - // TODO: Implement stencil test, mask, and op + const auto& regs = Pica::g_state.regs; + state.stencil.test_enabled = regs.output_merger.stencil_test.enable && regs.framebuffer.depth_format == Pica::Regs::DepthFormat::D24S8; + state.stencil.test_func = PicaToGL::CompareFunc(regs.output_merger.stencil_test.func); + state.stencil.test_ref = regs.output_merger.stencil_test.reference_value; + state.stencil.test_mask = regs.output_merger.stencil_test.input_mask; + state.stencil.write_mask = regs.output_merger.stencil_test.write_mask; + state.stencil.action_stencil_fail = PicaToGL::StencilOp(regs.output_merger.stencil_test.action_stencil_fail); + state.stencil.action_depth_fail = PicaToGL::StencilOp(regs.output_merger.stencil_test.action_depth_fail); + state.stencil.action_depth_pass = PicaToGL::StencilOp(regs.output_merger.stencil_test.action_depth_pass); } void RasterizerOpenGL::SyncDepthTest() { |