diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index c1647081443..988de5d4d44 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -692,6 +692,26 @@ add_compression_control_buffer(struct anv_device *device, &image->planes[plane].compr_ctrl_memory_range); } +static bool +want_hiz_wt_for_image(const struct intel_device_info *devinfo, + const struct anv_image *image) +{ + if (image->vk.samples > 1) + return false; + + if ((image->vk.usage & (VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) == 0) + return false; + + /* If this image is single-sampled and will be used as a texture, + * put the HiZ surface in write-through mode so that we can sample + * from it. + * + * TODO: This is a heuristic trade-off; we haven't tuned it at all. + */ + return true; +} + /** * The return code indicates whether creation of the VkImage should continue * or fail, not whether the creation of the aux surface succeeded. If the aux @@ -746,17 +766,7 @@ add_aux_surface_if_supported(struct anv_device *device, &image->planes[plane].primary_surface.isl, &image->planes[plane].aux_surface.isl)) { image->planes[plane].aux_usage = ISL_AUX_USAGE_HIZ; - } else if (image->vk.usage & (VK_IMAGE_USAGE_SAMPLED_BIT | - VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) && - image->vk.samples == 1) { - /* If it's used as an input attachment or a texture and it's - * single-sampled (this is a requirement for HiZ+CCS write-through - * mode), use write-through mode so that we don't need to resolve - * before texturing. This will make depth testing a bit slower but - * texturing faster. - * - * TODO: This is a heuristic trade-off; we haven't tuned it at all. - */ + } else if (want_hiz_wt_for_image(device->info, image)) { assert(device->info->ver >= 12); image->planes[plane].aux_usage = ISL_AUX_USAGE_HIZ_CCS_WT; } else {