From 87c876444800b94d6b1c1cae9d7defdfac97ff74 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 1 Apr 2021 17:29:22 +0200 Subject: [PATCH] radv: compress FMASK for all layouts except GENERAL The COMPRESSION bit is FMASK and this is much faster! Should speedup transfer dst operations with MSAA images considerably. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 8 ++++---- src/amd/vulkan/radv_image.c | 9 +++++++++ src/amd/vulkan/radv_private.h | 5 +++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 53d9f873404..cdd2c815f26 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -1636,10 +1636,10 @@ radv_emit_fb_color_state(struct radv_cmd_buffer *cmd_buffer, cb_color_info &= C_028C70_DCC_ENABLE; } - if (!radv_layout_can_fast_clear(cmd_buffer->device, image, layout, in_render_loop, - radv_image_queue_family_mask(image, - cmd_buffer->queue_family_index, - cmd_buffer->queue_family_index))) { + if (!radv_layout_fmask_compressed(cmd_buffer->device, image, layout, + radv_image_queue_family_mask(image, + cmd_buffer->queue_family_index, + cmd_buffer->queue_family_index))) { cb_color_info &= C_028C70_COMPRESSION; } diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index a78034abcd2..5077a3fb552 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -2131,6 +2131,15 @@ bool radv_layout_dcc_compressed(const struct radv_device *device, layout != VK_IMAGE_LAYOUT_GENERAL); } +bool radv_layout_fmask_compressed(const struct radv_device *device, + const struct radv_image *image, + VkImageLayout layout, + unsigned queue_mask) +{ + return radv_image_has_fmask(image) && + layout != VK_IMAGE_LAYOUT_GENERAL && + queue_mask == (1u << RADV_QUEUE_GENERAL); +} unsigned radv_image_queue_family_mask(const struct radv_image *image, uint32_t family, uint32_t queue_family) { diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index d1799876adb..0e65cf99922 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -1925,6 +1925,11 @@ bool radv_layout_dcc_compressed(const struct radv_device *device, bool in_render_loop, unsigned queue_mask); +bool radv_layout_fmask_compressed(const struct radv_device *device, + const struct radv_image *image, + VkImageLayout layout, + unsigned queue_mask); + /** * Return whether the image has CMASK metadata for color surfaces. */