From e266136b3833e67ef5ff89d3b6c4f9490911ffa8 Mon Sep 17 00:00:00 2001 From: Nanley Chery Date: Tue, 26 Jan 2021 15:42:28 -0800 Subject: [PATCH] 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 Part-of: (cherry picked from commit 608c1316389ac3a7a2e118983fb7e434470e4ada) --- .pick_status.json | 2 +- src/intel/vulkan/anv_image.c | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index b70b7cb6e20..3cb6681a448 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -103,7 +103,7 @@ "description": "anv: Add clear_supported to anv_layout_to_aux_state", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index 2cc7d5b6fa7..7de148b43de 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -2161,6 +2161,7 @@ anv_layout_to_aux_state(const struct gen_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 @@ -2172,24 +2173,31 @@ anv_layout_to_aux_state(const struct gen_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: @@ -2197,6 +2205,7 @@ anv_layout_to_aux_state(const struct gen_device_info * const devinfo, case ISL_AUX_USAGE_CCS_D: aux_supported = false; + clear_supported = false; break; case ISL_AUX_USAGE_CCS_E: @@ -2214,6 +2223,7 @@ anv_layout_to_aux_state(const struct gen_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; @@ -2225,6 +2235,7 @@ anv_layout_to_aux_state(const struct gen_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; @@ -2233,6 +2244,7 @@ anv_layout_to_aux_state(const struct gen_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; @@ -2240,6 +2252,7 @@ anv_layout_to_aux_state(const struct gen_device_info * const devinfo, case ISL_AUX_USAGE_STC_CCS: assert(aux_supported); + assert(!clear_supported); return ISL_AUX_STATE_COMPRESSED_NO_CLEAR; default: