From 80f9b61f0225e23705cf0d2b243f9eb27a9cfa9e Mon Sep 17 00:00:00 2001 From: Rohan Garg Date: Tue, 4 Feb 2025 17:31:23 +0100 Subject: [PATCH] anv: CPB surfaces that are used as color attachments or for stores cannot be compressed This particular scenario indicates that the CPB will be written to using a fragment shader, disable compression to ensure the correct data is read back from the surface later. Signed-off-by: Rohan Garg Reviewed-by: Nanley Chery Part-of: --- src/intel/vulkan/anv_image.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index d8ca3cca0af..34e3d5d62ee 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -235,9 +235,17 @@ anv_image_choose_isl_surf_usage(struct anv_physical_device *device, if (vk_usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) isl_usage |= ISL_SURF_USAGE_RENDER_TARGET_BIT; - if (vk_usage & VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR) + if (vk_usage & VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR) { isl_usage |= ISL_SURF_USAGE_CPB_BIT; + /* The CPS compression scheme matches STC_CCS. So, we can allow + * compression for BLORP writes, but not for general rendering + * nor image stores. + */ + if (vk_usage & (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_STORAGE_BIT)) + isl_usage |= ISL_SURF_USAGE_DISABLE_AUX_BIT; + } + /* TODO: consider whether compression with sparse is workable. */ if (vk_create_flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) isl_usage |= ISL_SURF_USAGE_SPARSE_BIT |