From 7bb3a2363d3afedf3c0a3a082caa3a1565e8fa7f Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 20 Feb 2025 11:45:53 +0100 Subject: [PATCH] radv: add radv_fmask_color_expand() Similar to radv_fmask_decompress()/radv_fast_clear_eliminate() helpers. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/meta/radv_meta.h | 6 ++++-- src/amd/vulkan/meta/radv_meta_fmask_expand.c | 18 +++++++++++++++--- src/amd/vulkan/radv_cmd_buffer.c | 6 +----- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/amd/vulkan/meta/radv_meta.h b/src/amd/vulkan/meta/radv_meta.h index 3d59decf505..a1dae141bb4 100644 --- a/src/amd/vulkan/meta/radv_meta.h +++ b/src/amd/vulkan/meta/radv_meta.h @@ -219,8 +219,10 @@ void radv_fast_clear_flush_image_inplace(struct radv_cmd_buffer *cmd_buffer, str void radv_decompress_dcc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, const VkImageSubresourceRange *subresourceRange); void radv_retile_dcc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image); -void radv_expand_fmask_image_inplace(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, - const VkImageSubresourceRange *subresourceRange); + +void radv_fmask_color_expand(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, + const VkImageSubresourceRange *subresourceRange); + void radv_copy_vrs_htile(struct radv_cmd_buffer *cmd_buffer, struct radv_image_view *vrs_iview, const VkRect2D *rect, struct radv_image *dst_image, uint64_t htile_va, bool read_htile_value); diff --git a/src/amd/vulkan/meta/radv_meta_fmask_expand.c b/src/amd/vulkan/meta/radv_meta_fmask_expand.c index a6ae95608e6..46321e26645 100644 --- a/src/amd/vulkan/meta/radv_meta_fmask_expand.c +++ b/src/amd/vulkan/meta/radv_meta_fmask_expand.c @@ -91,9 +91,9 @@ get_pipeline(struct radv_device *device, uint32_t samples_log2, VkPipeline *pipe return result; } -void -radv_expand_fmask_image_inplace(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, - const VkImageSubresourceRange *subresourceRange) +static void +radv_process_color_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, + const VkImageSubresourceRange *subresourceRange) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); struct radv_meta_saved_state saved_state; @@ -167,3 +167,15 @@ radv_expand_fmask_image_inplace(struct radv_cmd_buffer *cmd_buffer, struct radv_ /* Re-initialize FMASK in fully expanded mode. */ cmd_buffer->state.flush_bits |= radv_init_fmask(cmd_buffer, image, subresourceRange); } + +void +radv_fmask_color_expand(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, + const VkImageSubresourceRange *subresourceRange) +{ + struct radv_barrier_data barrier = {0}; + + barrier.layout_transitions.fmask_color_expand = 1; + radv_describe_layout_transition(cmd_buffer, &barrier); + + radv_process_color_image(cmd_buffer, image, subresourceRange); +} diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 4a95f3d9c2c..545954c33b8 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -12705,11 +12705,7 @@ radv_handle_color_image_transition(struct radv_cmd_buffer *cmd_buffer, struct ra } if (dst_fmask_comp == RADV_FMASK_COMPRESSION_NONE) { - struct radv_barrier_data barrier = {0}; - barrier.layout_transitions.fmask_color_expand = 1; - radv_describe_layout_transition(cmd_buffer, &barrier); - - radv_expand_fmask_image_inplace(cmd_buffer, image, range); + radv_fmask_color_expand(cmd_buffer, image, range); } }