When multiview is active a subpass clear may only clear a subset of the
attachment layers. Other subpasses in the same render pass may also
clear too and we want to honor those clears. This means that when multiview
is active we cannot mark an attachment as already cleared after a subpass
clear operation, unless we know that all subpasses share the same view mask,
in which case only one clear is really required.

Fixes work-in-progress CTS tests:
dEQP-VK.multiview.readback_implicit_clear.*
---
 src/intel/vulkan/anv_blorp.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index 18fa4a4ae5..4575476240 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -1249,7 +1249,20 @@ anv_cmd_buffer_clear_subpass(struct anv_cmd_buffer 
*cmd_buffer)
          }
       }
 
-      att_state->pending_clear_aspects = 0;
+      if (!cmd_state->subpass->view_mask) {
+         att_state->pending_clear_aspects = 0;
+      } else {
+         bool all_subpasses_use_same_view_mask = true;
+         for (uint32_t i = 0; i < cmd_state->pass->subpass_count; i++) {
+            if (cmd_state->pass->subpasses[i].view_mask !=
+                cmd_state->subpass->view_mask) {
+               all_subpasses_use_same_view_mask = false;
+               break;
+            }
+         }
+         if (all_subpasses_use_same_view_mask)
+            att_state->pending_clear_aspects = 0;
+      }
    }
 
    const uint32_t ds = cmd_state->subpass->depth_stencil_attachment.attachment;
-- 
2.11.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to