anv: Enable "permanent" compression for immutable format images
This commit extends our support of color compression to surfaces without the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT set. These images will never have an image view created with a different format then the one set at image creation time so it's safe to always use compression. We still bail if the image is used as a storage image because that sometimes ends up using a different format. Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
parent
2b5644e94d
commit
4e91f158e6
|
@ -1253,6 +1253,9 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer,
|
||||||
const struct anv_image *image = iview->image;
|
const struct anv_image *image = iview->image;
|
||||||
assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
|
assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
|
||||||
|
|
||||||
|
if (image->aux_usage == ISL_AUX_USAGE_CCS_E)
|
||||||
|
return;
|
||||||
|
|
||||||
struct blorp_surf surf;
|
struct blorp_surf surf;
|
||||||
get_blorp_surf_for_anv_image(image, VK_IMAGE_ASPECT_COLOR_BIT,
|
get_blorp_surf_for_anv_image(image, VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
att_state->aux_usage, &surf);
|
att_state->aux_usage, &surf);
|
||||||
|
|
|
@ -199,8 +199,30 @@ make_surface(const struct anv_device *dev,
|
||||||
assert(image->aux_surface.isl.size == 0);
|
assert(image->aux_surface.isl.size == 0);
|
||||||
ok = isl_surf_get_ccs_surf(&dev->isl_dev, &anv_surf->isl,
|
ok = isl_surf_get_ccs_surf(&dev->isl_dev, &anv_surf->isl,
|
||||||
&image->aux_surface.isl);
|
&image->aux_surface.isl);
|
||||||
if (ok)
|
if (ok) {
|
||||||
add_surface(image, &image->aux_surface);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue