From d1c1a33b35a0ae14bff0ecd03255a7dab3399f1c Mon Sep 17 00:00:00 2001 From: David Rosca Date: Tue, 22 Oct 2024 13:45:24 +0200 Subject: [PATCH] radv/video: Avoid selecting rc layer over maximum Vulkan spec doesn't say if this is allowed or not, but trying to do this will hang. Fixes: 4a19047d329 ("radv/video: Select temporal layer when encoding each frame") Reviewed-by: Dave Airlie Part-of: --- src/amd/vulkan/radv_video_enc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_video_enc.c b/src/amd/vulkan/radv_video_enc.c index a0f8703deed..83fa1474284 100644 --- a/src/amd/vulkan/radv_video_enc.c +++ b/src/amd/vulkan/radv_video_enc.c @@ -1362,6 +1362,7 @@ radv_enc_params(struct radv_cmd_buffer *cmd_buffer, const VkVideoEncodeInfoKHR * uint64_t chroma_va = va + src_img->planes[1].surface.u.gfx9.surf_offset; uint32_t pic_type; unsigned int slot_idx = 0xffffffff; + unsigned int max_layers = cmd_buffer->video.vid->rc_layer_control.max_num_temporal_layers; radv_cs_add_buffer(device->ws, cs, src_img->bindings[0].bo); if (h264_pic) { @@ -1380,7 +1381,7 @@ radv_enc_params(struct radv_cmd_buffer *cmd_buffer, const VkVideoEncodeInfoKHR * pic_type = RENCODE_PICTURE_TYPE_I; break; } - radv_enc_layer_select(cmd_buffer, h264_pic->temporal_id); + radv_enc_layer_select(cmd_buffer, MIN2(h264_pic->temporal_id, max_layers)); } else if (h265_pic) { switch (h265_pic->pic_type) { case STD_VIDEO_H265_PICTURE_TYPE_P: @@ -1397,7 +1398,7 @@ radv_enc_params(struct radv_cmd_buffer *cmd_buffer, const VkVideoEncodeInfoKHR * pic_type = RENCODE_PICTURE_TYPE_I; break; } - radv_enc_layer_select(cmd_buffer, h265_pic->TemporalId); + radv_enc_layer_select(cmd_buffer, MIN2(h265_pic->TemporalId, max_layers)); } else { assert(0); return;