diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c index bf4cce1a4c2..e498bc46c23 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c @@ -2178,7 +2178,8 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, decode->sw_ctxt_size = RDECODE_SESSION_CONTEXT_SIZE; decode->db_pitch = align(dec->base.width, dec->db_alignment); - if (((struct si_screen*)dec->screen)->info.family >= CHIP_NAVI21 && + if ((((struct si_screen*)dec->screen)->info.family >= CHIP_NAVI21 || + ((struct si_screen*)dec->screen)->info.family == CHIP_GFX940) && (dec->stream_type == RDECODE_CODEC_VP9 || dec->stream_type == RDECODE_CODEC_AV1 || dec->base.profile == PIPE_VIDEO_PROFILE_HEVC_MAIN_10)) decode->db_aligned_height = align(dec->base.height, 64); @@ -3069,7 +3070,7 @@ struct pipe_video_codec *radeon_create_decoder(struct pipe_context *context, dec->ws = ws; if (u_reduce_video_profile(templ->profile) != PIPE_VIDEO_FORMAT_JPEG && - sctx->gfx_level >= GFX11) { + (sctx->gfx_level >= GFX11 || sctx->family == CHIP_GFX940)) { dec->vcn_dec_sw_ring = true; ring = AMD_IP_VCN_UNIFIED; } @@ -3111,7 +3112,8 @@ struct pipe_video_codec *radeon_create_decoder(struct pipe_context *context, for (i = 0; i < ARRAY_SIZE(dec->render_pic_list); i++) dec->render_pic_list[i] = NULL; - if (sctx->family >= CHIP_NAVI21 && (stream_type == RDECODE_CODEC_H264_PERF)) { + if ((sctx->family >= CHIP_NAVI21 || sctx->family == CHIP_GFX940) && + (stream_type == RDECODE_CODEC_H264_PERF)) { for (i = 0; i < ARRAY_SIZE(dec->h264_valid_ref_num); i++) dec->h264_valid_ref_num[i] = (unsigned) -1; for (i = 0; i < ARRAY_SIZE(dec->h264_valid_poc_num); i++) @@ -3157,7 +3159,7 @@ struct pipe_video_codec *radeon_create_decoder(struct pipe_context *context, } } - if (sctx->family >= CHIP_NAVI21 && + if ((sctx->family >= CHIP_NAVI21 || sctx->family == CHIP_GFX940) && (stream_type == RDECODE_CODEC_VP9 || stream_type == RDECODE_CODEC_AV1 || ((stream_type == RDECODE_CODEC_H265) && templ->expect_chunked_decode) || @@ -3221,6 +3223,8 @@ struct pipe_video_codec *radeon_create_decoder(struct pipe_context *context, break; case CHIP_GFX940: dec->jpg_reg.version = RDECODE_JPEG_REG_VER_V3; + dec->addr_gfx_mode = RDECODE_ARRAY_MODE_ADDRLIB_SEL_GFX9; + dec->av1_version = RDECODE_AV1_VER_1; break; case CHIP_GFX1100: case CHIP_GFX1101: