From 974db9712b5f66a247bcb0af62eaeb0db1b1a0fa Mon Sep 17 00:00:00 2001
From: Philip Rebohle <philip.rebohle@tu-dortmund.de>
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 ed3159af..3d728c73 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 62d03312..f7971051 100644
--- a/src/dxvk/dxvk_context.cpp
+++ b/src/dxvk/dxvk_context.cpp
@@ -414,7 +414,6 @@ namespace dxvk {
   
   void DxvkContext::clearRenderTarget(
     const Rc<DxvkImageView>&    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 4fd8d431..46860b1c 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<DxvkImageView>&    imageView,
-      const VkClearRect&          clearRect,
             VkImageAspectFlags    clearAspects,
       const VkClearValue&         clearValue);