From 204cf5714ab4acb6d800a137f8489624a7909526 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 19 Jun 2018 15:56:19 +0200 Subject: [PATCH] radv: always initialize the clear color values to 0 Having random data in there is probably not the best. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- src/amd/vulkan/radv_cmd_buffer.c | 22 ++++++++++++++++++++-- src/amd/vulkan/radv_meta_clear.c | 4 ++-- src/amd/vulkan/radv_private.h | 8 ++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index e13f7a94e1d..fb775c1cc48 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -1354,10 +1354,9 @@ radv_update_bound_fast_clear_color(struct radv_cmd_buffer *cmd_buffer, /** * Set the clear color values to the image's metadata. */ -void +static void radv_set_color_clear_metadata(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, - int cb_idx, uint32_t color_values[2]) { struct radeon_cmdbuf *cs = cmd_buffer->cs; @@ -1375,6 +1374,20 @@ radv_set_color_clear_metadata(struct radv_cmd_buffer *cmd_buffer, radeon_emit(cs, va >> 32); radeon_emit(cs, color_values[0]); radeon_emit(cs, color_values[1]); +} + +/** + * Update the clear color values for this image. + */ +void +radv_update_color_clear_metadata(struct radv_cmd_buffer *cmd_buffer, + struct radv_image *image, + int cb_idx, + uint32_t color_values[2]) +{ + assert(radv_image_has_cmask(image) || radv_image_has_dcc(image)); + + radv_set_color_clear_metadata(cmd_buffer, image, color_values); radv_update_bound_fast_clear_color(cmd_buffer, image, cb_idx, color_values); @@ -4061,6 +4074,11 @@ static void radv_init_color_image_metadata(struct radv_cmd_buffer *cmd_buffer, radv_set_dcc_need_cmask_elim_pred(cmd_buffer, image, false); } + + if (radv_image_has_cmask(image) || radv_image_has_dcc(image)) { + uint32_t color_values[2] = {}; + radv_set_color_clear_metadata(cmd_buffer, image, color_values); + } } /** diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c index e9af0532859..01d75c23d6a 100644 --- a/src/amd/vulkan/radv_meta_clear.c +++ b/src/amd/vulkan/radv_meta_clear.c @@ -1104,8 +1104,8 @@ emit_fast_color_clear(struct radv_cmd_buffer *cmd_buffer, cmd_buffer->state.flush_bits |= flush_bits; } - radv_set_color_clear_metadata(cmd_buffer, iview->image, subpass_att, - clear_color); + radv_update_color_clear_metadata(cmd_buffer, iview->image, subpass_att, + clear_color); return true; fail: diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 27440da595e..e6aaf164479 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -1117,10 +1117,10 @@ void radv_set_ds_clear_metadata(struct radv_cmd_buffer *cmd_buffer, VkClearDepthStencilValue ds_clear_value, VkImageAspectFlags aspects); -void radv_set_color_clear_metadata(struct radv_cmd_buffer *cmd_buffer, - struct radv_image *image, - int cb_idx, - uint32_t color_values[2]); +void radv_update_color_clear_metadata(struct radv_cmd_buffer *cmd_buffer, + struct radv_image *image, + int cb_idx, + uint32_t color_values[2]); void radv_set_dcc_need_cmask_elim_pred(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, -- 2.30.2