From 2ef614a2d814a6f42c0f78d0e56af28373184998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Pi=C3=B1eiro?= Date: Thu, 12 Jan 2023 11:14:46 +0100 Subject: [PATCH] v3dv/image: use 64-byte alingment for linear images if needed When used for transfer, the image could be used eventually as a Texture Base Address, that needs to be 64-byte aligned. Part-of: --- src/broadcom/vulkan/v3dv_image.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/broadcom/vulkan/v3dv_image.c b/src/broadcom/vulkan/v3dv_image.c index b1d63ef5f83..5bceee8bb83 100644 --- a/src/broadcom/vulkan/v3dv_image.c +++ b/src/broadcom/vulkan/v3dv_image.c @@ -208,8 +208,18 @@ v3d_setup_slices(struct v3dv_image *image) * slices. * * We additionally align to 4k, which improves UIF XOR performance. + * + * Finally, because the Texture Base Address field must be 64-byte aligned, + * we also need to align linear images to 64 if the image is going to be + * used for transfer. */ - image->alignment = image->tiled ? 4096 : image->cpp; + if (image->tiled) { + image->alignment = 4096; + } else { + image->alignment = + (image->vk.usage & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) ? 64 : image->cpp; + } + uint32_t align_offset = align(image->slices[0].offset, image->alignment) - image->slices[0].offset; if (align_offset) {