radv: only set BO metadata for the first plane
To properly support multi-planar images, we don't want to set metadata on anything other than the first plane. To achieve this radv currently checks for the image TILING and assumes LINEAR means it's not the first plane. However this doesn't account for images with a single LINEAR plane. We still want to set metadata on those, e.g. to properly set the scanout bit in the tiling flags. Instead of checking for LINEAR, check if the offset is zero. Only the first plane has a zero offset on AMD. This mirrors the radeonsi logic [1]. While at it, move the metadata declaration into the if block. [1]: https://gitlab.freedesktop.org/mesa/mesa/-/blob/6fecdc6dda6da15d616a31900508214c81cd256e/src/gallium/drivers/radeonsi/si_texture.c#L710 Signed-off-by: Simon Ser <contact@emersion.fr> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8086>
This commit is contained in:
@@ -5191,9 +5191,9 @@ bool radv_get_memory_fd(struct radv_device *device,
|
||||
struct radv_device_memory *memory,
|
||||
int *pFD)
|
||||
{
|
||||
struct radeon_bo_metadata metadata;
|
||||
|
||||
if (memory->image && memory->image->tiling != VK_IMAGE_TILING_LINEAR) {
|
||||
/* Only set BO metadata for the first plane */
|
||||
if (memory->image && memory->image->offset == 0) {
|
||||
struct radeon_bo_metadata metadata;
|
||||
radv_init_metadata(device, memory->image, &metadata);
|
||||
device->ws->buffer_set_metadata(memory->bo, &metadata);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user