diff --git a/docs/envvars.rst b/docs/envvars.rst index 258a9d46d51..678895c8d89 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -1755,6 +1755,14 @@ RadeonSI driver environment variables Disable register shadowing in userqueue. This will also disable userqueue mcbp. ``novideotiling`` Disable tiling for video. + ``nodectier1`` + Disable tier1 for video decode. + ``nodectier2`` + Disable tier2 for video decode. + ``nodectier3`` + Disable tier3 for video decode. + ``noenctier2`` + Disable tier2 for video encode. r600 driver environment variables --------------------------------- diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c index 5c007f46b74..46e11207e0d 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c @@ -2760,6 +2760,9 @@ static void radeon_dec_destroy_fence(struct pipe_video_codec *decoder, static bool radeon_dec_enable_tier3(struct si_context *sctx, uint32_t codec) { + if (sctx->screen->multimedia_debug_flags & DBG(NO_DECODE_TIER3)) + return false; + if (sctx->vcn_ip_ver < VCN_5_0_0) return false; @@ -2768,6 +2771,9 @@ static bool radeon_dec_enable_tier3(struct si_context *sctx, uint32_t codec) static bool radeon_dec_enable_tier2(struct si_context *sctx, uint32_t codec) { + if (sctx->screen->multimedia_debug_flags & DBG(NO_DECODE_TIER2)) + return false; + if (sctx->vcn_ip_ver < VCN_3_0_0) return false; @@ -2777,6 +2783,9 @@ static bool radeon_dec_enable_tier2(struct si_context *sctx, uint32_t codec) static bool radeon_dec_enable_tier1(struct si_context *sctx, uint32_t codec) { + if (sctx->screen->multimedia_debug_flags & DBG(NO_DECODE_TIER1)) + return false; + if (sctx->vcn_ip_ver > VCN_2_6_0) return false; diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index 5dec72870b6..79a4536f625 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -2019,7 +2019,8 @@ struct pipe_video_codec *radeon_create_encoder(struct pipe_context *context, ac_vcn_enc_init_cmds(&enc->cmd, sscreen->info.vcn_ip_version); - if (sscreen->info.vcn_ip_version >= VCN_5_0_0) + if (sscreen->info.vcn_ip_version >= VCN_5_0_0 && + !(sscreen->multimedia_debug_flags & DBG(NO_ENCODE_TIER2))) enc->dpb_type = DPB_TIER_2; if (enc->dpb_type == DPB_TIER_2) diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 1c368cf6f38..e00875c7e15 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -129,6 +129,10 @@ static const struct debug_named_value radeonsi_multimedia_debug_options[] = { {"noefc", DBG(NO_EFC), "Disable hardware based encoder colour format conversion."}, {"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."}, + {"nodectier2", DBG(NO_DECODE_TIER2), "Disable tier2 for video decode."}, + {"nodectier3", DBG(NO_DECODE_TIER3), "Disable tier3 for video decode."}, + {"noenctier2", DBG(NO_ENCODE_TIER2), "Disable tier2 for video encode."}, DEBUG_NAMED_VALUE_END /* must be last */ }; diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index 4923f6ec869..83fbc7aeb8e 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -257,6 +257,10 @@ enum DBG_NO_EFC, DBG_LOW_LATENCY_ENCODE, DBG_NO_VIDEO_TILING, + DBG_NO_DECODE_TIER1, + DBG_NO_DECODE_TIER2, + DBG_NO_DECODE_TIER3, + DBG_NO_ENCODE_TIER2, }; enum