Module: Mesa
Branch: master
Commit: b5ecf0748a5cb82df4c1a03ef41dc5f67f7a77c4
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5ecf0748a5cb82df4c1a03ef41dc5f67f7a77c4

Author: Bas Nieuwenhuizen <[email protected]>
Date:   Tue Feb  2 04:08:56 2021 +0100

radv: Ensure we never decompress or FCE read-only textures.

Reviewed-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8817>

---

 src/amd/vulkan/radv_image.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index 13d6898adda..a7ada09b529 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -38,6 +38,13 @@
 
 #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,
@@ -2018,6 +2025,9 @@ bool radv_layout_can_fast_clear(const struct radv_device 
*device,
            !radv_layout_dcc_compressed(device, image, layout, in_render_loop, 
queue_mask))
                return false;
 
+       if (!(image->usage & RADV_IMAGE_USAGE_WRITE_BITS))
+               return false;
+
        return layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL &&
               queue_mask == (1u << RADV_QUEUE_GENERAL);
 }
@@ -2028,6 +2038,11 @@ bool radv_layout_dcc_compressed(const struct radv_device 
*device,
                                bool in_render_loop,
                                unsigned queue_mask)
 {
+       /* If the image is read-only, we can always just keep it compressed */
+       if (!(image->usage & RADV_IMAGE_USAGE_WRITE_BITS) &&
+           radv_image_has_dcc(image))
+               return false;
+
        /* Don't compress compute transfer dst, as image stores are not 
supported. */
        if ((layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL ||
             layout == VK_IMAGE_LAYOUT_GENERAL) &&

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to