summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/intel/vulkan/anv_blorp.c3
-rw-r--r--src/intel/vulkan/anv_image.c24
2 files changed, 26 insertions, 1 deletions
diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index 08e43cf1a54..90ee5ed43e2 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -1253,6 +1253,9 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer,
const struct anv_image *image = iview->image;
assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
+ if (image->aux_usage == ISL_AUX_USAGE_CCS_E)
+ return;
+
struct blorp_surf surf;
get_blorp_surf_for_anv_image(image, VK_IMAGE_ASPECT_COLOR_BIT,
att_state->aux_usage, &surf);
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index 1ba4c51f2f8..ed221a7730e 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -199,8 +199,30 @@ make_surface(const struct anv_device *dev,
assert(image->aux_surface.isl.size == 0);
ok = isl_surf_get_ccs_surf(&dev->isl_dev, &anv_surf->isl,
&image->aux_surface.isl);
- if (ok)
+ if (ok) {
add_surface(image, &image->aux_surface);
+
+ /* For images created without MUTABLE_FORMAT_BIT set, we know that
+ * they will always be used with the original format. In
+ * particular, they will always be used with a format that
+ * supports color compression. This means that it's safe to just
+ * leave compression on at all times for these formats.
+ */
+ if (!(vk_info->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) &&
+ isl_format_supports_lossless_compression(&dev->info, format)) {
+ if (vk_info->usage & VK_IMAGE_USAGE_STORAGE_BIT) {
+ /*
+ * For now, we leave compression off for anything that may
+ * be used as a storage image. This is because accessing
+ * storage images may involve ccs-incompatible views or even
+ * untyped messages which don't support compression at all.
+ */
+ anv_finishme("Enable CCS for storage images");
+ } else {
+ image->aux_usage = ISL_AUX_USAGE_CCS_E;
+ }
+ }
+ }
}
}