Mesa (main): radv: Don't retile read-only images.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed May 11 19:06:08 UTC 2022


Module: Mesa
Branch: main
Commit: 29fbc88d6b37ebfa20ae78a6ccfb964b0e0c472c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=29fbc88d6b37ebfa20ae78a6ccfb964b0e0c472c

Author: Georg Lehmann <dadschoorse at gmail.com>
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 <dadschoorse at gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
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;



More information about the mesa-commit mailing list