Mesa (master): radv: fix clearing FMASK for layered MSAA images on GFX9+

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Dec 7 16:36:39 UTC 2020


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri Dec  4 17:41:37 2020 +0100

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 <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7924>

---

 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 e839de5a381..143c36e1e63 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);
 }



More information about the mesa-commit mailing list