From 608c1316389ac3a7a2e118983fb7e434470e4ada 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: --- 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: