summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D12/Render.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2016-03-05 22:38:14 +1000
committerStenzek <stenzek@gmail.com>2016-05-08 12:08:25 +1000
commitacfa93372ec58faac05f9ed7c8ac0d6ed5ad403e (patch)
tree6a0ad014012e1de0ac6e6704934bbf53887c6248 /Source/Core/VideoBackends/D3D12/Render.cpp
parent7ec1fce74111be9a926124a9d5e895a380696cd8 (diff)
D3D12: Refactoring and cleanups
Moves render target restoring to RestoreAPIState, this also means no need to manually restore after allocating in a buffer that caused execution, because the manager restores it for us. Remove a method that wasn't used from D3DUtil.cpp, and fixes a few errors in EFB poke drawing.
Diffstat (limited to 'Source/Core/VideoBackends/D3D12/Render.cpp')
-rw-r--r--Source/Core/VideoBackends/D3D12/Render.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/Source/Core/VideoBackends/D3D12/Render.cpp b/Source/Core/VideoBackends/D3D12/Render.cpp
index c0fad9208a..2b98788a04 100644
--- a/Source/Core/VideoBackends/D3D12/Render.cpp
+++ b/Source/Core/VideoBackends/D3D12/Render.cpp
@@ -534,7 +534,8 @@ void Renderer::ClearScreen(const EFBRectangle& rc, bool color_enable, bool alpha
D3D::DrawClearQuad(rgba_color, 1.0f - (z & 0xFFFFFF) / 16777216.0f, blend_desc, depth_stencil_desc, FramebufferManager::GetEFBColorTexture()->GetMultisampled());
// Restores proper viewport/scissor settings.
- g_renderer->RestoreAPIState();
+ g_renderer->SetViewport();
+ BPFunctions::SetScissor();
FramebufferManager::InvalidateEFBAccessCopies();
}
@@ -582,14 +583,13 @@ void Renderer::ReinterpretPixelData(unsigned int convtype)
FramebufferManager::GetEFBColorTempTexture()->GetMultisampled()
);
- // Restores proper viewport/scissor settings.
- g_renderer->RestoreAPIState();
-
FramebufferManager::SwapReinterpretTexture();
FramebufferManager::GetEFBColorTexture()->TransitionToResourceState(D3D::current_command_list, D3D12_RESOURCE_STATE_RENDER_TARGET);
- FramebufferManager::GetEFBDepthTexture()->TransitionToResourceState(D3D::current_command_list, D3D12_RESOURCE_STATE_DEPTH_WRITE );
- FramebufferManager::RestoreEFBRenderTargets();
+ FramebufferManager::GetEFBDepthTexture()->TransitionToResourceState(D3D::current_command_list, D3D12_RESOURCE_STATE_DEPTH_WRITE);
+
+ // Restores proper viewport/scissor settings.
+ RestoreAPIState();
}
void Renderer::SetBlendMode(bool force_update)
@@ -996,14 +996,12 @@ void Renderer::SwapImpl(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height
}
// begin next frame
- RestoreAPIState();
D3D::BeginFrame();
FramebufferManager::GetEFBColorTexture()->TransitionToResourceState(D3D::current_command_list, D3D12_RESOURCE_STATE_RENDER_TARGET);
FramebufferManager::GetEFBDepthTexture()->TransitionToResourceState(D3D::current_command_list, D3D12_RESOURCE_STATE_DEPTH_WRITE );
- FramebufferManager::RestoreEFBRenderTargets();
- SetViewport();
+ RestoreAPIState();
}
void Renderer::ResetAPIState()
@@ -1017,6 +1015,9 @@ void Renderer::RestoreAPIState()
// overwritten elsewhere (particularly the viewport).
SetViewport();
BPFunctions::SetScissor();
+
+ FramebufferManager::RestoreEFBRenderTargets();
+ BBox::Bind();
}
static bool s_previous_use_dst_alpha = false;