From 874e02003a0b6c946e2a26fae14b294918e5ac8d Mon Sep 17 00:00:00 2001 From: David Rosca Date: Fri, 31 Oct 2025 15:13:12 +0100 Subject: [PATCH] radv/video: Only use write_memory for encode feedback with full support write_memory is used after encoding every frame to mark the feedback buffer as ready. Only use it when write_memory can work without PCIe atomics support. Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_query.c | 3 ++- src/amd/vulkan/radv_video_enc.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c index 7d1413db7d9..7ecbf653806 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -2379,8 +2379,9 @@ radv_GetQueryPoolResults(VkDevice _device, VkQueryPool queryPool, uint32_t first break; } case VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR: { + const bool write_memory = radv_video_write_memory_supported(pdev) == RADV_VIDEO_WRITE_MEMORY_SUPPORT_FULL; uint32_t *src32 = (uint32_t *)src; - uint32_t ready_idx = radv_video_write_memory_supported(pdev) ? RADV_ENC_FEEDBACK_STATUS_IDX : 1; + uint32_t ready_idx = write_memory ? RADV_ENC_FEEDBACK_STATUS_IDX : 1; uint32_t value; do { value = p_atomic_read(&src32[ready_idx]); diff --git a/src/amd/vulkan/radv_video_enc.c b/src/amd/vulkan/radv_video_enc.c index 8bdbd7a77ba..54b74beaf24 100644 --- a/src/amd/vulkan/radv_video_enc.c +++ b/src/amd/vulkan/radv_video_enc.c @@ -2858,7 +2858,8 @@ radv_vcn_encode_video(struct radv_cmd_buffer *cmd_buffer, const VkVideoEncodeInf if (pdev->enc_hw_ver >= RADV_VIDEO_ENC_HW_2) { radv_vcn_sq_tail(cs, &cmd_buffer->video.sq); - radv_vcn_write_memory(cmd_buffer, feedback_query_va + RADV_ENC_FEEDBACK_STATUS_IDX * sizeof(uint32_t), 1); + if (radv_video_write_memory_supported(pdev) == RADV_VIDEO_WRITE_MEMORY_SUPPORT_FULL) + radv_vcn_write_memory(cmd_buffer, feedback_query_va + RADV_ENC_FEEDBACK_STATUS_IDX * sizeof(uint32_t), 1); } }