From 34e090ae118c19f60d342ab6f4c155b2934ec5bb Mon Sep 17 00:00:00 2001 From: Benjamin Cheng Date: Thu, 19 Mar 2026 16:41:58 -0400 Subject: [PATCH] radv/video: Add low-latency flags radv equivalent of 62f07b8c. Reviewed-by: David Rosca Part-of: --- docs/envvars.rst | 4 ++++ src/amd/vulkan/radv_debug.h | 2 ++ src/amd/vulkan/radv_instance.c | 2 ++ src/amd/vulkan/radv_video.c | 1 + src/amd/vulkan/radv_video_enc.c | 3 ++- 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/envvars.rst b/docs/envvars.rst index 9264f95e28e..234c44ef5e2 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -1574,6 +1574,10 @@ RADV driver environment variables enable experimental implementation of VK_EXT_host_image_copy (GFX10+) ``localbos`` enable local BOs + ``lowlatencydec`` + Enable low latency decoding + ``lowlatencyenc`` + Enable low latency encoding ``nggc`` enable NGG culling for GFX11+ ``nircache`` diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h index 91b059d8062..17df5b6dc81 100644 --- a/src/amd/vulkan/radv_debug.h +++ b/src/amd/vulkan/radv_debug.h @@ -99,6 +99,8 @@ enum { RADV_PERFTEST_SPARSE = 1u << 17, RADV_PERFTEST_RT_CPS = 1u << 18, RADV_PERFTEST_BFLOAT16 = 1u << 19, + RADV_PERFTEST_LOWLATENCYDEC = 1u << 20, + RADV_PERFTEST_LOWLATENCYENC = 1u << 21, }; enum { diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c index 963109c5083..fc64d5fc429 100644 --- a/src/amd/vulkan/radv_instance.c +++ b/src/amd/vulkan/radv_instance.c @@ -124,6 +124,8 @@ static const struct debug_control radv_perftest_options[] = { {"sparse", RADV_PERFTEST_SPARSE}, {"rtcps", RADV_PERFTEST_RT_CPS}, {"bfloat16", RADV_PERFTEST_BFLOAT16}, + {"lowlatencydec", RADV_PERFTEST_LOWLATENCYDEC}, + {"lowlatencyenc", RADV_PERFTEST_LOWLATENCYENC}, {NULL, 0}, }; diff --git a/src/amd/vulkan/radv_video.c b/src/amd/vulkan/radv_video.c index 7f9df736f4b..fd4a1848177 100644 --- a/src/amd/vulkan/radv_video.c +++ b/src/amd/vulkan/radv_video.c @@ -2113,6 +2113,7 @@ radv_CmdDecodeVideoKHR(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR .width = frame_info->dstPictureResource.codedExtent.width, .height = frame_info->dstPictureResource.codedExtent.height, .tier = select_tier(device, vid, frame_info), + .low_latency = radv_physical_device_instance(pdev)->perftest_flags & RADV_PERFTEST_LOWLATENCYDEC, }; if (vid->sessionctx.mem) { diff --git a/src/amd/vulkan/radv_video_enc.c b/src/amd/vulkan/radv_video_enc.c index 9e434e1983a..2b2093d2552 100644 --- a/src/amd/vulkan/radv_video_enc.c +++ b/src/amd/vulkan/radv_video_enc.c @@ -1078,7 +1078,8 @@ radv_enc_latency(struct radv_cmd_buffer *cmd_buffer, VkVideoEncodeTuningModeKHR struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); const struct radv_physical_device *pdev = radv_device_physical(device); const bool low_latency = tuning_mode == VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR || - tuning_mode == VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR; + tuning_mode == VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR || + radv_physical_device_instance(pdev)->perftest_flags & RADV_PERFTEST_LOWLATENCYENC; RADEON_ENC_BEGIN(pdev->vcn_enc_cmds.enc_latency); RADEON_ENC_CS(low_latency ? 1000 : 0);