From ec3828add38a83b8c09fd5896265abc9d766162e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 4 Dec 2020 17:41:37 +0100 Subject: [PATCH] radv: fix clearing FMASK for layered MSAA images on GFX9+ If we always clear the whole FMASK buffer, layers can be corrupted. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3710 Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/vulkan/radv_meta_clear.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c index e839de5..143c36e 100644 --- a/src/amd/vulkan/radv_meta_clear.c +++ b/src/amd/vulkan/radv_meta_clear.c @@ -1438,22 +1438,15 @@ radv_clear_fmask(struct radv_cmd_buffer *cmd_buffer, const VkImageSubresourceRange *range, uint32_t value) { uint64_t offset = image->offset + image->planes[0].surface.fmask_offset; + unsigned slice_size = image->planes[0].surface.fmask_slice_size; uint64_t size; /* MSAA images do not support mipmap levels. */ assert(range->baseMipLevel == 0 && radv_get_levelCount(image, range) == 1); - if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX9) { - /* TODO: clear layers. */ - size = image->planes[0].surface.fmask_size; - } else { - unsigned fmask_slice_size = - image->planes[0].surface.fmask_slice_size; - - offset += fmask_slice_size * range->baseArrayLayer; - size = fmask_slice_size * radv_get_layerCount(image, range); - } + offset += slice_size * range->baseArrayLayer; + size = slice_size * radv_get_layerCount(image, range); return radv_fill_buffer(cmd_buffer, image->bo, offset, size, value); } -- 2.7.4