Module: Mesa Branch: main Commit: 29fbc88d6b37ebfa20ae78a6ccfb964b0e0c472c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=29fbc88d6b37ebfa20ae78a6ccfb964b0e0c472c
Author: Georg Lehmann <[email protected]> Date: Fri May 6 14:48:38 2022 +0200 radv: Don't retile read-only images. Avoid unnessecary work on FOREIGN queue release barriers. If we can't modify the image there can't be a situation where we need to update the presentable dcc data. Signed-off-by: Georg Lehmann <[email protected]> Reviewed-by: Samuel Pitoiset <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16371> --- src/amd/vulkan/radv_cmd_buffer.c | 4 ++++ src/amd/vulkan/radv_image.c | 4 ---- src/amd/vulkan/radv_private.h | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 8c1b541c1ad..64a68dcd83f 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -8263,6 +8263,10 @@ static void radv_retile_transition(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, VkImageLayout src_layout, VkImageLayout dst_layout, unsigned dst_queue_mask) { + /* If the image is read-only, we don't have to retile DCC because it can't change. */ + if (!(image->usage & RADV_IMAGE_USAGE_WRITE_BITS)) + return; + if (src_layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR && (dst_layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR || (dst_queue_mask & (1u << RADV_QUEUE_FOREIGN)))) diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index a8cac871be2..8aa7f4933dd 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -38,10 +38,6 @@ #include "gfx10_format_table.h" -static const VkImageUsageFlagBits RADV_IMAGE_USAGE_WRITE_BITS = - VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | - VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_STORAGE_BIT; - static unsigned radv_choose_tiling(struct radv_device *device, const VkImageCreateInfo *pCreateInfo, VkFormat format) diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index d8eeb2de853..05240d07a2c 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2093,6 +2093,10 @@ bool radv_dcc_formats_compatible(VkFormat format1, VkFormat format2, bool *sign_ bool radv_is_atomic_format_supported(VkFormat format); bool radv_device_supports_etc(struct radv_physical_device *physical_device); +static const VkImageUsageFlags RADV_IMAGE_USAGE_WRITE_BITS = + VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_STORAGE_BIT; + struct radv_image_plane { VkFormat format; struct radeon_surf surface;
