diff options
| author | Anthony <Helios747@users.noreply.github.com> | 2017-09-03 19:26:50 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-09-03 19:26:50 -0700 |
| commit | ee6930a231a7ff1b25750deb84f613bddee90379 (patch) | |
| tree | 5cfee129760ba3d4747f029cd47872c0b92a7aa6 /Source/Core/VideoBackends/D3D/Render.cpp | |
| parent | 26e777d80bb125e12a4a93e0e727c804a0facd34 (diff) | |
| parent | 90051536bf53f66ca0e4c46105e481e08f1642f3 (diff) | |
Merge pull request #6013 from stenzek/d3d-logic-op
D3D: Implement logic op support
Diffstat (limited to 'Source/Core/VideoBackends/D3D/Render.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/Render.cpp | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp index 1bf929caa5..ae50045c26 100644 --- a/Source/Core/VideoBackends/D3D/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Render.cpp @@ -266,8 +266,7 @@ Renderer::Renderer() : ::Renderer(D3D::GetBackBufferWidth(), D3D::GetBackBufferH D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)m_target_width, (float)m_target_height); D3D::context->RSSetViewports(1, &vp); - D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), - FramebufferManager::GetEFBDepthTexture()->GetDSV()); + FramebufferManager::BindEFBRenderTarget(); D3D::BeginFrame(); } @@ -402,8 +401,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) VertexShaderCache::GetSimpleInputLayout()); // Restore expected game state. - D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), - FramebufferManager::GetEFBDepthTexture()->GetDSV()); + FramebufferManager::BindEFBRenderTarget(); RestoreAPIState(); // Copy the pixel from the renderable to cpu-readable buffer. @@ -478,8 +476,7 @@ void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.0f, 0.0f, (float)GetTargetWidth(), (float)GetTargetHeight()); D3D::context->RSSetViewports(1, &vp); - D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), - nullptr); + FramebufferManager::BindEFBRenderTarget(false); } else // if (type == EFBAccessType::PokeZ) { @@ -490,9 +487,7 @@ void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num CD3D11_VIEWPORT(0.0f, 0.0f, (float)GetTargetWidth(), (float)GetTargetHeight()); D3D::context->RSSetViewports(1, &vp); - - D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), - FramebufferManager::GetEFBDepthTexture()->GetDSV()); + FramebufferManager::BindEFBRenderTarget(); } D3D::DrawEFBPokeQuads(type, points, num_points); @@ -590,6 +585,7 @@ void Renderer::ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaE CD3D11_VIEWPORT((float)targetRc.left, (float)targetRc.top, (float)targetRc.GetWidth(), (float)targetRc.GetHeight(), 0.f, 1.f); D3D::context->RSSetViewports(1, &vp); + FramebufferManager::SetIntegerEFBRenderTarget(false); // Color is passed in bgra mode so we need to convert it to rgba u32 rgbaColor = (color & 0xFF00FF00) | ((color >> 16) & 0xFF) | ((color << 16) & 0xFF0000); @@ -636,8 +632,7 @@ void Renderer::ReinterpretPixelData(unsigned int convtype) RestoreAPIState(); FramebufferManager::SwapReinterpretTexture(); - D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), - FramebufferManager::GetEFBDepthTexture()->GetDSV()); + FramebufferManager::BindEFBRenderTarget(); } void Renderer::SetBlendingState(const BlendingState& state) @@ -845,8 +840,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, // begin next frame RestoreAPIState(); D3D::BeginFrame(); - D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), - FramebufferManager::GetEFBDepthTexture()->GetDSV()); + FramebufferManager::BindEFBRenderTarget(); SetViewport(); } @@ -873,6 +867,7 @@ void Renderer::ApplyState() D3D::stateman->PushBlendState(s_gx_state_cache.Get(s_gx_state.blend)); D3D::stateman->PushDepthState(s_gx_state_cache.Get(s_gx_state.zmode)); D3D::stateman->PushRasterizerState(s_gx_state_cache.Get(s_gx_state.raster)); + FramebufferManager::SetIntegerEFBRenderTarget(s_gx_state.blend.logicopenable); for (size_t stage = 0; stage < s_gx_state.samplers.size(); stage++) { |
