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