diff --git a/docs/envvars.rst b/docs/envvars.rst index 29471405e5c..39e3c1be2aa 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -1743,6 +1743,8 @@ RadeonSI driver environment variables Disable DPBB. Overrules the dpbb enable option. ``noefc`` Disable hardware based encoder color format conversion + ``lowlatencydec`` + Enable low latency decoding ``lowlatencyenc`` Enable low latency encoding ``notiling`` diff --git a/src/amd/common/ac_vcn_dec.h b/src/amd/common/ac_vcn_dec.h index b6f5285517a..f8f92b74843 100644 --- a/src/amd/common/ac_vcn_dec.h +++ b/src/amd/common/ac_vcn_dec.h @@ -163,6 +163,7 @@ /* *** decode flags *** */ #define RDECODE_FLAGS_USE_DYNAMIC_DPB_MASK 0x00000001 #define RDECODE_FLAGS_USE_PAL_MASK 0x00000008 +#define RDECODE_FLAGS_LOW_LATENCY_MASK 0x00000080 #define RDECODE_FLAGS_DPB_RESIZE_MASK 0x00000100 #define RDECODE_FLAGS_UNIFIED_DT_MASK 0x00000200 diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c index 598ff27b8f6..634242f5cfd 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c @@ -1437,7 +1437,7 @@ static struct pb_buffer_lean *rvcn_dec_message_decode(struct radeon_decoder *dec struct si_texture *luma; struct si_texture *chroma; struct pipe_video_buffer *out_surf = target; - ASSERTED struct si_screen *sscreen = (struct si_screen *)dec->screen; + struct si_screen *sscreen = (struct si_screen *)dec->screen; rvcn_dec_message_header_t *header; rvcn_dec_message_index_t *index_codec; rvcn_dec_message_index_t *index_drm = NULL; @@ -1567,6 +1567,9 @@ static struct pb_buffer_lean *rvcn_dec_message_decode(struct radeon_decoder *dec if (dec->dpb_type == DPB_DYNAMIC_TIER_3) decode->decode_flags |= RDECODE_FLAGS_UNIFIED_DT_MASK; + if (sscreen->multimedia_debug_flags & DBG(LOW_LATENCY_DECODE)) + decode->decode_flags |= RDECODE_FLAGS_LOW_LATENCY_MASK; + decode->bsd_size = align(dec->bs_size, 128); if (dec->dpb_type < DPB_DYNAMIC_TIER_2) { diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 65feb68c8a0..5fee1ace078 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -129,6 +129,7 @@ static const struct debug_named_value radeonsi_shader_debug_options[] = { static const struct debug_named_value radeonsi_multimedia_debug_options[] = { /* Multimedia options: */ {"noefc", DBG(NO_EFC), "Disable hardware based encoder colour format conversion."}, + {"lowlatencydec", DBG(LOW_LATENCY_DECODE), "Enable low latency decoding."}, {"lowlatencyenc", DBG(LOW_LATENCY_ENCODE), "Enable low latency encoding."}, {"novideotiling", DBG(NO_VIDEO_TILING), "Disable tiling for video."}, {"nodectier1", DBG(NO_DECODE_TIER1), "Disable tier1 for video decode."}, diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index cbb4a0d275a..901ebcca9b9 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -264,6 +264,7 @@ enum enum { DBG_NO_EFC, + DBG_LOW_LATENCY_DECODE, DBG_LOW_LATENCY_ENCODE, DBG_NO_VIDEO_TILING, DBG_NO_DECODE_TIER1,