From 884849587569919b7ef40021da70e6858d93cbe9 Mon Sep 17 00:00:00 2001 From: Benjamin Cheng Date: Wed, 12 Nov 2025 13:49:57 -0500 Subject: [PATCH] radv/video: Align each layer of encode DPB to 256 VCN requires the luma/chroma VAs to be 256 aligned. On VCN5, the collocated buffer was not 256 aligned which can cause these VAs to be unaligned. This fixes VVL PositiveVideoEncodeH264.Basic on VCN5. Fixes: 37e71a5cb24 ("radv/video: add support for AV1 encoding") Reviewed-by: David Rosca Part-of: --- src/amd/vulkan/radv_video_enc.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/amd/vulkan/radv_video_enc.c b/src/amd/vulkan/radv_video_enc.c index 6189177a1dc..bb8b5a8f4ab 100644 --- a/src/amd/vulkan/radv_video_enc.c +++ b/src/amd/vulkan/radv_video_enc.c @@ -1550,6 +1550,7 @@ radv_enc_ctx2(struct radv_cmd_buffer *cmd_buffer, const VkVideoEncodeInfoKHR *in metadata_size += RENCODE_AV1_FRAME_CONTEXT_CDF_TABLE_SIZE; metadata_size += RENCODE_AV1_CDEF_ALGORITHM_FRAME_CONTEXT_SIZE; } + metadata_size = align(metadata_size, ENC_ALIGNMENT); uint32_t dpb_array_idx = !intra_only_dpb ? res->baseArrayLayer + dpb_iv->vk.base_array_layer : 0; uint64_t luma_va = dpb_img->bindings[0].addr + dpb_array_idx * (luma_size + chroma_size + metadata_size); @@ -3500,17 +3501,20 @@ radv_video_get_enc_dpb_image(struct radv_device *device, const struct VkVideoPro } for (unsigned i = 0; i < num_reconstructed_pictures; i++) { - image->size += luma_size; - image->size += chroma_size; + unsigned metadata_size = 0; if (is_av1) { - image->size += RENCODE_AV1_FRAME_CONTEXT_CDF_TABLE_SIZE; - image->size += RENCODE_AV1_CDEF_ALGORITHM_FRAME_CONTEXT_SIZE; + metadata_size += RENCODE_AV1_FRAME_CONTEXT_CDF_TABLE_SIZE; + metadata_size += RENCODE_AV1_CDEF_ALGORITHM_FRAME_CONTEXT_SIZE; } if (pdev->enc_hw_ver >= RADV_VIDEO_ENC_HW_5) { - image->size += RENCODE_MAX_METADATA_BUFFER_SIZE_PER_FRAME; + metadata_size += RENCODE_MAX_METADATA_BUFFER_SIZE_PER_FRAME; if (has_h264_b_support) - image->size += colloc_bytes; + metadata_size += colloc_bytes; } + + image->size += luma_size; + image->size += chroma_size; + image->size += align(metadata_size, ENC_ALIGNMENT); } image->alignment = ENC_ALIGNMENT; }