From 974db9712b5f66a247bcb0af62eaeb0db1b1a0fa Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 6 Jul 2018 15:01:37 +0200 Subject: [PATCH] [dxvk] Remove clear rect parameter from clearRenderTarget With deferred clears and render target-based clears, this was not properly supported anyway. --- src/d3d11/d3d11_context.cpp | 31 ++++--------------------------- src/dxvk/dxvk_context.cpp | 11 +++++++++-- src/dxvk/dxvk_context.h | 2 -- 3 files changed, 13 insertions(+), 31 deletions(-) diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index ed3159af5..3d728c730 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -598,24 +598,12 @@ namespace dxvk { clearValue.color.float32[2] = ColorRGBA[2]; clearValue.color.float32[3] = ColorRGBA[3]; - VkClearRect clearRect; - clearRect.rect.offset.x = 0; - clearRect.rect.offset.y = 0; - clearRect.rect.extent.width = view->mipLevelExtent(0).width; - clearRect.rect.extent.height = view->mipLevelExtent(0).height; - clearRect.baseArrayLayer = 0; - clearRect.layerCount = view->info().numLayers; - - if (m_parent->GetFeatureLevel() < D3D_FEATURE_LEVEL_10_0) - clearRect.layerCount = 1; - EmitCs([ cClearValue = clearValue, - cClearRect = clearRect, cImageView = view ] (DxvkContext* ctx) { ctx->clearRenderTarget( - cImageView, cClearRect, + cImageView, VK_IMAGE_ASPECT_COLOR_BIT, cClearValue); }); @@ -781,26 +769,15 @@ namespace dxvk { clearValue.depthStencil.depth = Depth; clearValue.depthStencil.stencil = Stencil; - VkClearRect clearRect; - clearRect.rect.offset.x = 0; - clearRect.rect.offset.y = 0; - clearRect.rect.extent.width = view->mipLevelExtent(0).width; - clearRect.rect.extent.height = view->mipLevelExtent(0).height; - clearRect.baseArrayLayer = 0; - clearRect.layerCount = view->info().numLayers; - - if (m_parent->GetFeatureLevel() < D3D_FEATURE_LEVEL_10_0) - clearRect.layerCount = 1; - EmitCs([ cClearValue = clearValue, - cClearRect = clearRect, cAspectMask = aspectMask, cImageView = view ] (DxvkContext* ctx) { ctx->clearRenderTarget( - cImageView, cClearRect, - cAspectMask, cClearValue); + cImageView, + cAspectMask, + cClearValue); }); } diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 62d03312f..f7971051b 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -414,7 +414,6 @@ namespace dxvk { void DxvkContext::clearRenderTarget( const Rc& imageView, - const VkClearRect& clearRect, VkImageAspectFlags clearAspects, const VkClearValue& clearValue) { this->updateFramebuffer(); @@ -486,6 +485,14 @@ namespace dxvk { clearInfo.colorAttachment = attachmentIndex; clearInfo.clearValue = clearValue; + VkClearRect clearRect; + clearRect.rect.offset.x = 0; + clearRect.rect.offset.y = 0; + clearRect.rect.extent.width = imageView->mipLevelExtent(0).width; + clearRect.rect.extent.height = imageView->mipLevelExtent(0).height; + clearRect.baseArrayLayer = 0; + clearRect.layerCount = imageView->info().numLayers; + m_cmd->cmdClearAttachments( 1, &clearInfo, 1, &clearRect); } else { @@ -1681,7 +1688,7 @@ namespace dxvk { m_flags.clr(DxvkContextFlag::GpClearRenderTargets); m_barriers.recordCommands(m_cmd); - + this->renderPassBindFramebuffer( m_state.om.framebuffer, m_state.om.renderPassOps, diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 4fd8d4314..46860b1c2 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -221,13 +221,11 @@ namespace dxvk { * \brief Clears an active render target * * \param [in] imageView Render target view to clear - * \param [in] clearArea Image area to clear * \param [in] clearAspects Image aspects to clear * \param [in] clearValue The clear value */ void clearRenderTarget( const Rc& imageView, - const VkClearRect& clearRect, VkImageAspectFlags clearAspects, const VkClearValue& clearValue);