Mesa (master): anv/blorp: sample input attachments with resolves on BDW

Samuel Iglesias Gonsálvez samuelig at kemper.freedesktop.org
Fri Apr 7 05:59:51 UTC 2017


Module: Mesa
Branch: master
Commit: 1c934bc71b36ec33e59f4b7dc1c7d194585a5bd6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c934bc71b36ec33e59f4b7dc1c7d194585a5bd6

Author: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
Date:   Tue Mar 21 07:16:27 2017 +0100

anv/blorp: sample input attachments with resolves on BDW

On Broadwell we still need to do a resolve between the subpass
that writes and the subpass that reads when there is a
self-dependency because HW could not see fast-clears and works
on the render cache as if there was regular non-fast-clear surface.

Fixes 16 tests on BDW:

dEQP-VK.renderpass.formats.*.input.clear.store.self_dep*

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/intel/vulkan/anv_blorp.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index 72a468a744..d0e859f09d 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -1457,6 +1457,7 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer,
     * still hot in the cache.
     */
    bool found_draw = false;
+   bool self_dep = false;
    enum anv_subpass_usage usage = 0;
    for (uint32_t s = subpass_idx + 1; s < pass->subpass_count; s++) {
       usage |= pass->attachments[att].subpass_usage[s];
@@ -1466,6 +1467,8 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer,
           * wait to resolve until then.
           */
          found_draw = true;
+         if (pass->attachments[att].subpass_usage[s] & ANV_SUBPASS_USAGE_INPUT)
+            self_dep = true;
          break;
       }
    }
@@ -1524,6 +1527,14 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer,
           *    binding this surface to Sampler."
           */
          resolve_op = BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL;
+      } else if (cmd_buffer->device->info.gen == 8 && self_dep &&
+                 att_state->input_aux_usage == ISL_AUX_USAGE_CCS_D) {
+         /* On Broadwell we still need to do resolves when there is a
+          * self-dependency because HW could not see fast-clears and works
+          * on the render cache as if there was regular non-fast-clear surface.
+          * To avoid any inconsistency, we force the resolve.
+          */
+         resolve_op = BLORP_FAST_CLEAR_OP_RESOLVE_FULL;
       }
    }
 




More information about the mesa-commit mailing list