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, };
