Module: Mesa Branch: main Commit: 3debf2af0c2c4b2d7739f102bc5cbf08386695c5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3debf2af0c2c4b2d7739f102bc5cbf08386695c5
Author: Rohan Garg <[email protected]> Date: Wed Apr 19 11:05:28 2023 +0200 anv: set aux usage to GFX12_CCS_E if a platform needs WA 14010672564 Account for the aux usage in various places now that we set the aux usage correctly. Signed-off-by: Rohan Garg <[email protected]> Reviewed-by: Nanley Chery <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22076> --- src/intel/vulkan/anv_formats.c | 2 +- src/intel/vulkan/anv_image.c | 13 ++++++++++--- src/intel/vulkan/anv_private.h | 2 +- src/intel/vulkan/genX_cmd_buffer.c | 8 ++++---- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c index 2902a23d478..e5834540876 100644 --- a/src/intel/vulkan/anv_formats.c +++ b/src/intel/vulkan/anv_formats.c @@ -773,7 +773,7 @@ anv_get_image_format_features2(const struct intel_device_info *devinfo, } } - if (isl_mod_info->aux_usage == ISL_AUX_USAGE_CCS_E && + if (isl_aux_usage_has_ccs_e(isl_mod_info->aux_usage) && !isl_format_supports_ccs_e(devinfo, plane_format.isl_format)) { return 0; } diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index 377c7dd656b..0d2a099f00b 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -593,7 +593,7 @@ add_aux_state_tracking_buffer(struct anv_device *device, unsigned state_size = clear_color_state_size + 4; /* We only need to track compression on CCS_E surfaces. */ - if (image->planes[plane].aux_usage == ISL_AUX_USAGE_CCS_E) { + if (isl_aux_usage_has_ccs_e(image->planes[plane].aux_usage)) { if (image->vk.image_type == VK_IMAGE_TYPE_3D) { for (uint32_t l = 0; l < image->vk.mip_levels; l++) state_size += u_minify(image->vk.extent.depth, l) * 4; @@ -757,7 +757,10 @@ add_aux_surface_if_supported(struct anv_device *device, if (anv_formats_ccs_e_compatible(device->info, image->vk.create_flags, image->vk.format, image->vk.tiling, image->vk.usage, fmt_list)) { - image->planes[plane].aux_usage = ISL_AUX_USAGE_CCS_E; + image->planes[plane].aux_usage = + intel_needs_workaround(device->info, 14010672564) ? + ISL_AUX_USAGE_GFX12_CCS_E : + ISL_AUX_USAGE_CCS_E; } else if (device->info->ver >= 12) { anv_perf_warn(VK_LOG_OBJS(&image->vk.base), "The CCS_D aux mode is not yet handled on " @@ -1923,6 +1926,7 @@ VkResult anv_BindImageMemory2( image->planes[p].aux_usage = ISL_AUX_USAGE_HIZ; } else { assert(image->planes[p].aux_usage == ISL_AUX_USAGE_CCS_E || + image->planes[p].aux_usage == ISL_AUX_USAGE_GFX12_CCS_E || image->planes[p].aux_usage == ISL_AUX_USAGE_STC_CCS); image->planes[p].aux_usage = ISL_AUX_USAGE_NONE; } @@ -2164,6 +2168,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo, break; case ISL_AUX_USAGE_CCS_E: + case ISL_AUX_USAGE_GFX12_CCS_E: case ISL_AUX_USAGE_STC_CCS: break; @@ -2197,6 +2202,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo, } case ISL_AUX_USAGE_CCS_E: + case ISL_AUX_USAGE_GFX12_CCS_E: if (aux_supported) { assert(clear_supported); return ISL_AUX_STATE_COMPRESSED_CLEAR; @@ -2350,7 +2356,8 @@ anv_layout_to_fast_clear_type(const struct intel_device_info * const devinfo, */ return ANV_FAST_CLEAR_DEFAULT_VALUE; } else if (image->planes[plane].aux_usage == ISL_AUX_USAGE_MCS || - image->planes[plane].aux_usage == ISL_AUX_USAGE_CCS_E) { + image->planes[plane].aux_usage == ISL_AUX_USAGE_CCS_E || + image->planes[plane].aux_usage == ISL_AUX_USAGE_GFX12_CCS_E) { if (devinfo->ver >= 11) { /* The image might not support non zero fast clears when mutable. */ if (!image->planes[plane].can_non_zero_fast_clear) diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 2dfadf38afe..d17522f072b 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -3893,7 +3893,7 @@ anv_image_get_compression_state_addr(const struct anv_device *device, assert(level < anv_image_aux_levels(image, aspect)); assert(array_layer < anv_image_aux_layers(image, aspect, level)); UNUSED uint32_t plane = anv_image_aspect_to_plane(image, aspect); - assert(image->planes[plane].aux_usage == ISL_AUX_USAGE_CCS_E); + assert(isl_aux_usage_has_ccs_e(image->planes[plane].aux_usage)); /* Relative to start of the plane's fast clear memory range */ uint32_t offset; diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 6586da6ced7..78087c3eb57 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -562,7 +562,7 @@ set_image_compressed_bit(struct anv_cmd_buffer *cmd_buffer, const uint32_t plane = anv_image_aspect_to_plane(image, aspect); /* We only have compression tracking for CCS_E */ - if (image->planes[plane].aux_usage != ISL_AUX_USAGE_CCS_E) + if (!isl_aux_usage_has_ccs_e(image->planes[plane].aux_usage)) return; for (uint32_t a = 0; a < layer_count; a++) { @@ -968,7 +968,7 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer, must_init_aux_surface = true; } else { - assert(image->planes[plane].aux_usage == ISL_AUX_USAGE_CCS_E); + assert(isl_aux_usage_has_ccs_e(image->planes[plane].aux_usage)); /* We can start using the CCS immediately without ambiguating. The * two conditions that enable this are: @@ -1160,8 +1160,8 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer, if (final_fast_clear < initial_fast_clear) resolve_op = ISL_AUX_OP_PARTIAL_RESOLVE; - if (initial_aux_usage == ISL_AUX_USAGE_CCS_E && - final_aux_usage != ISL_AUX_USAGE_CCS_E) + if (isl_aux_usage_has_ccs_e(initial_aux_usage) && + !isl_aux_usage_has_ccs_e(final_aux_usage)) resolve_op = ISL_AUX_OP_FULL_RESOLVE; if (resolve_op == ISL_AUX_OP_NONE)
