Mesa (main): anv: Add clear_supported to anv_layout_to_aux_state

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 14 18:14:36 UTC 2021


Module: Mesa
Branch: main
Commit: 608c1316389ac3a7a2e118983fb7e434470e4ada
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=608c1316389ac3a7a2e118983fb7e434470e4ada

Author: Nanley Chery <nanley.g.chery at intel.com>
Date:   Tue Jan 26 15:42:28 2021 -0800

anv: Add clear_supported to anv_layout_to_aux_state

This will be used for an MCS workaround.

Cc: mesa-stable
Reviewed-by: Sagar Ghuge <sagar.ghuge at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8755>

---

 src/intel/vulkan/anv_image.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index b6d34ea66b4..b725fbdae2f 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -2167,6 +2167,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
       vk_image_layout_to_usage_flags(layout, aspect) & image_aspect_usage;
 
    bool aux_supported = true;
+   bool clear_supported = isl_aux_usage_has_fast_clears(aux_usage);
 
    if ((usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) && !read_only) {
       /* This image could be used as both an input attachment and a render
@@ -2178,24 +2179,31 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
        *
        * TODO: Should we be disabling this in more cases?
        */
-      if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT)
+      if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT) {
          aux_supported = false;
+         clear_supported = false;
+      }
    }
 
-   if (usage & VK_IMAGE_USAGE_STORAGE_BIT)
+   if (usage & VK_IMAGE_USAGE_STORAGE_BIT) {
       aux_supported = false;
+      clear_supported = false;
+   }
 
    if (usage & (VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
                 VK_IMAGE_USAGE_SAMPLED_BIT |
                 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) {
       switch (aux_usage) {
       case ISL_AUX_USAGE_HIZ:
-         if (!anv_can_sample_with_hiz(devinfo, image))
+         if (!anv_can_sample_with_hiz(devinfo, image)) {
             aux_supported = false;
+            clear_supported = false;
+         }
          break;
 
       case ISL_AUX_USAGE_HIZ_CCS:
          aux_supported = false;
+         clear_supported = false;
          break;
 
       case ISL_AUX_USAGE_HIZ_CCS_WT:
@@ -2203,6 +2211,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
 
       case ISL_AUX_USAGE_CCS_D:
          aux_supported = false;
+         clear_supported = false;
          break;
 
       case ISL_AUX_USAGE_CCS_E:
@@ -2220,6 +2229,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
    case ISL_AUX_USAGE_HIZ_CCS:
    case ISL_AUX_USAGE_HIZ_CCS_WT:
       if (aux_supported) {
+         assert(clear_supported);
          return ISL_AUX_STATE_COMPRESSED_CLEAR;
       } else if (read_only) {
          return ISL_AUX_STATE_RESOLVED;
@@ -2231,6 +2241,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
       /* We only support clear in exactly one state */
       if (layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) {
          assert(aux_supported);
+         assert(clear_supported);
          return ISL_AUX_STATE_PARTIAL_CLEAR;
       } else {
          return ISL_AUX_STATE_PASS_THROUGH;
@@ -2239,6 +2250,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
    case ISL_AUX_USAGE_CCS_E:
    case ISL_AUX_USAGE_MCS:
       if (aux_supported) {
+         assert(clear_supported);
          return ISL_AUX_STATE_COMPRESSED_CLEAR;
       } else {
          return ISL_AUX_STATE_PASS_THROUGH;
@@ -2246,6 +2258,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
 
    case ISL_AUX_USAGE_STC_CCS:
       assert(aux_supported);
+      assert(!clear_supported);
       return ISL_AUX_STATE_COMPRESSED_NO_CLEAR;
 
    default:



More information about the mesa-commit mailing list