From 64ea7e5e338750c8e7c33ddcd969b60af1645ada Mon Sep 17 00:00:00 2001 From: Sagar Ghuge Date: Tue, 28 Jan 2020 14:19:08 -0800 Subject: [PATCH] anv: Pass correct aux usage while filling out surface state While filling out surface state, pass correct aux usage for storage images as we support compression on XeHPG. v2: (Jason Ekstrand) - Move assertion down a bit - Use general layout aux usage Signed-off-by: Sagar Ghuge Reviewed-by: Jason Ekstrand Reviewed-by: Nanley Chery Part-of: --- src/intel/vulkan/anv_image.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index 179f1559a2f..cb4ef3b9b38 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -2412,9 +2412,16 @@ anv_image_fill_surface_state(struct anv_device *device, * image formats. Translate it into the closest format the hardware * supports. */ - assert(aux_usage == ISL_AUX_USAGE_NONE); - view.format = isl_lower_storage_image_format(&device->info, - view.format); + enum isl_format lower_format = + isl_lower_storage_image_format(&device->info, view.format); + if (aux_usage != ISL_AUX_USAGE_NONE) { + assert(device->info.verx10 >= 125); + assert(aux_usage == ISL_AUX_USAGE_CCS_E); + assert(isl_formats_are_ccs_e_compatible(&device->info, + view.format, + lower_format)); + } + view.format = lower_format; } const struct isl_surf *isl_surf = &surface->isl; @@ -2628,11 +2635,15 @@ anv_CreateImageView(VkDevice _device, /* NOTE: This one needs to go last since it may stomp isl_view.format */ if (iview->vk.usage & VK_IMAGE_USAGE_STORAGE_BIT) { + enum isl_aux_usage general_aux_usage = + anv_layout_to_aux_usage(&device->info, image, 1UL << iaspect_bit, + VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_LAYOUT_GENERAL); iview->planes[vplane].storage_surface_state.state = alloc_surface_state(device); anv_image_fill_surface_state(device, image, 1ULL << iaspect_bit, &iview->planes[vplane].isl, ISL_SURF_USAGE_STORAGE_BIT, - ISL_AUX_USAGE_NONE, NULL, + general_aux_usage, NULL, 0, &iview->planes[vplane].storage_surface_state, NULL); @@ -2644,7 +2655,7 @@ anv_CreateImageView(VkDevice _device, anv_image_fill_surface_state(device, image, 1ULL << iaspect_bit, &iview->planes[vplane].isl, ISL_SURF_USAGE_STORAGE_BIT, - ISL_AUX_USAGE_NONE, NULL, + general_aux_usage, NULL, ANV_IMAGE_VIEW_STATE_STORAGE_LOWERED, &iview->planes[vplane].lowered_storage_surface_state, &iview->planes[vplane].lowered_storage_image_param);