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

Author: Chia-I Wu <[email protected]>
Date:   Tue Mar  7 14:07:35 2023 -0800

radv: add RADV_FMASK_COMPRESSION_PARTIAL

RADV_FMASK_COMPRESSION_PARTIAL means the fmask is decompressed but not
expanded.  It is desired for sampling when the cmask is not
TC-compatible.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21615>

---

 src/amd/vulkan/radv_image.c   | 6 ++++++
 src/amd/vulkan/radv_private.h | 1 +
 2 files changed, 7 insertions(+)

diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index 4de96af2ad8..7a6bcbe297e 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -2465,6 +2465,12 @@ radv_layout_fmask_compression(const struct radv_device 
*device, const struct rad
    if (layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL && (queue_mask & (1u << 
RADV_QUEUE_COMPUTE)))
       return RADV_FMASK_COMPRESSION_NONE;
 
+   if (layout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ||
+       layout == VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL) {
+      return radv_image_is_tc_compat_cmask(image) ? 
RADV_FMASK_COMPRESSION_FULL :
+         RADV_FMASK_COMPRESSION_PARTIAL;
+   }
+
    /* Only compress concurrent images if TC-compat CMASK is enabled (no FMASK 
decompression). */
    return (queue_mask == (1u << RADV_QUEUE_GENERAL) || 
radv_image_is_tc_compat_cmask(image)) ?
       RADV_FMASK_COMPRESSION_FULL : RADV_FMASK_COMPRESSION_NONE;
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index cc1fb635c55..d3d68a6ec43 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -2549,6 +2549,7 @@ bool radv_layout_dcc_compressed(const struct radv_device 
*device, const struct r
 
 enum radv_fmask_compression {
    RADV_FMASK_COMPRESSION_NONE,
+   RADV_FMASK_COMPRESSION_PARTIAL,
    RADV_FMASK_COMPRESSION_FULL,
 };
 

Reply via email to