|
|
|
@ -537,8 +537,7 @@ std::pair<bool, bool> RasterizerOpenGL::ConfigureFramebuffers( |
|
|
|
texture_cache.MarkDepthBufferInUse(); |
|
|
|
|
|
|
|
fbkey.zeta = depth_surface; |
|
|
|
fbkey.stencil_enable = regs.stencil_enable && |
|
|
|
depth_surface->GetSurfaceParams().type == SurfaceType::DepthStencil; |
|
|
|
fbkey.stencil_enable = depth_surface->GetSurfaceParams().type == SurfaceType::DepthStencil; |
|
|
|
} |
|
|
|
|
|
|
|
texture_cache.GuardRenderTargets(false); |
|
|
|
@ -577,16 +576,15 @@ void RasterizerOpenGL::ConfigureClearFramebuffer(OpenGLState& current_state, boo |
|
|
|
if (depth_surface) { |
|
|
|
const auto& params = depth_surface->GetSurfaceParams(); |
|
|
|
switch (params.type) { |
|
|
|
case VideoCore::Surface::SurfaceType::Depth: { |
|
|
|
case VideoCore::Surface::SurfaceType::Depth: |
|
|
|
depth_surface->Attach(GL_DEPTH_ATTACHMENT, GL_DRAW_FRAMEBUFFER); |
|
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); |
|
|
|
break; |
|
|
|
} |
|
|
|
case VideoCore::Surface::SurfaceType::DepthStencil: { |
|
|
|
depth_surface->Attach(GL_DEPTH_ATTACHMENT, GL_DRAW_FRAMEBUFFER); |
|
|
|
case VideoCore::Surface::SurfaceType::DepthStencil: |
|
|
|
depth_surface->Attach(GL_DEPTH_STENCIL_ATTACHMENT, GL_DRAW_FRAMEBUFFER); |
|
|
|
break; |
|
|
|
} |
|
|
|
default: { UNIMPLEMENTED(); } |
|
|
|
default: |
|
|
|
UNIMPLEMENTED(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, |
|
|
|
@ -639,6 +637,7 @@ void RasterizerOpenGL::Clear() { |
|
|
|
ASSERT_MSG(regs.zeta_enable != 0, "Tried to clear stencil but buffer is not enabled!"); |
|
|
|
use_stencil = true; |
|
|
|
clear_state.stencil.test_enabled = true; |
|
|
|
|
|
|
|
if (regs.clear_flags.stencil) { |
|
|
|
// Stencil affects the clear so fill it with the used masks
|
|
|
|
clear_state.stencil.front.test_func = GL_ALWAYS; |
|
|
|
@ -1119,9 +1118,12 @@ void RasterizerOpenGL::SyncStencilTestState() { |
|
|
|
if (!maxwell3d.dirty.stencil_test) { |
|
|
|
return; |
|
|
|
} |
|
|
|
const auto& regs = maxwell3d.regs; |
|
|
|
maxwell3d.dirty.stencil_test = false; |
|
|
|
|
|
|
|
const auto& regs = maxwell3d.regs; |
|
|
|
state.stencil.test_enabled = regs.stencil_enable != 0; |
|
|
|
state.MarkDirtyStencilState(); |
|
|
|
|
|
|
|
if (!regs.stencil_enable) { |
|
|
|
return; |
|
|
|
} |
|
|
|
@ -1150,8 +1152,6 @@ void RasterizerOpenGL::SyncStencilTestState() { |
|
|
|
state.stencil.back.action_depth_fail = GL_KEEP; |
|
|
|
state.stencil.back.action_depth_pass = GL_KEEP; |
|
|
|
} |
|
|
|
state.MarkDirtyStencilState(); |
|
|
|
maxwell3d.dirty.stencil_test = false; |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerOpenGL::SyncColorMask() { |
|
|
|
|