Merge pull request #660 from Subv/depth_write

GPU: Always enable the depth write when clearing the depth buffer.
This commit is contained in:
bunnei 2018-07-14 00:38:12 -07:00 committed by GitHub
commit 81739a5448
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -322,9 +322,6 @@ std::pair<Surface, Surface> RasterizerOpenGL::ConfigureFramebuffers(bool using_c
bool using_depth_fb) { bool using_depth_fb) {
const auto& regs = Core::System().GetInstance().GPU().Maxwell3D().regs; const auto& regs = Core::System().GetInstance().GPU().Maxwell3D().regs;
// Sync the depth test state before configuring the framebuffer surfaces.
SyncDepthTestState();
// TODO(bunnei): Implement this // TODO(bunnei): Implement this
const bool has_stencil = false; const bool has_stencil = false;
@ -389,6 +386,13 @@ void RasterizerOpenGL::Clear() {
if (regs.clear_buffers.Z) { if (regs.clear_buffers.Z) {
clear_mask |= GL_DEPTH_BUFFER_BIT; clear_mask |= GL_DEPTH_BUFFER_BIT;
use_depth_fb = true; use_depth_fb = true;
// Always enable the depth write when clearing the depth buffer. The depth write mask is
// ignored when clearing the buffer in the Switch, but OpenGL obeys it so we set it to true.
state.depth.test_enabled = true;
state.depth.write_mask = GL_TRUE;
state.depth.test_func = GL_ALWAYS;
state.Apply();
} }
if (clear_mask == 0) if (clear_mask == 0)
@ -423,6 +427,7 @@ void RasterizerOpenGL::DrawArrays() {
auto [dirty_color_surface, dirty_depth_surface] = auto [dirty_color_surface, dirty_depth_surface] =
ConfigureFramebuffers(true, regs.zeta.Address() != 0); ConfigureFramebuffers(true, regs.zeta.Address() != 0);
SyncDepthTestState();
SyncBlendState(); SyncBlendState();
SyncCullMode(); SyncCullMode();