mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 21:50:11 +01:00
radeonsi/vcn: Fix compatibility with old FW for encode
The interface version can't be higher than the FW version, otherwise FW will reject all encode jobs. Cc: mesa-stable Reviewed-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36845>
This commit is contained in:
parent
51d5c0d537
commit
e945bb3649
5 changed files with 35 additions and 5 deletions
|
|
@ -1260,6 +1260,9 @@ static void destroy(struct radeon_encoder *enc)
|
|||
|
||||
void radeon_enc_1_2_init(struct radeon_encoder *enc)
|
||||
{
|
||||
struct si_screen *sscreen = (struct si_screen *)enc->screen;
|
||||
uint32_t minor_version;
|
||||
|
||||
enc->before_encode = radeon_enc_dummy;
|
||||
enc->begin = begin;
|
||||
enc->encode = encode;
|
||||
|
|
@ -1307,7 +1310,10 @@ void radeon_enc_1_2_init(struct radeon_encoder *enc)
|
|||
enc->encode_params_codec_spec = radeon_enc_dummy;
|
||||
}
|
||||
|
||||
minor_version =
|
||||
MIN2(sscreen->info.vcn_enc_minor_version, RENCODE_FW_INTERFACE_MINOR_VERSION);
|
||||
|
||||
enc->enc_pic.session_info.interface_version =
|
||||
((RENCODE_FW_INTERFACE_MAJOR_VERSION << RENCODE_IF_MAJOR_VERSION_SHIFT) |
|
||||
(RENCODE_FW_INTERFACE_MINOR_VERSION << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
(minor_version << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,6 +190,9 @@ static void encode(struct radeon_encoder *enc)
|
|||
|
||||
void radeon_enc_2_0_init(struct radeon_encoder *enc)
|
||||
{
|
||||
struct si_screen *sscreen = (struct si_screen *)enc->screen;
|
||||
uint32_t minor_version;
|
||||
|
||||
radeon_enc_1_2_init(enc);
|
||||
enc->encode = encode;
|
||||
enc->input_format = radeon_enc_input_format;
|
||||
|
|
@ -205,7 +208,10 @@ void radeon_enc_2_0_init(struct radeon_encoder *enc)
|
|||
enc->spec_misc = radeon_enc_spec_misc_hevc;
|
||||
}
|
||||
|
||||
minor_version =
|
||||
MIN2(sscreen->info.vcn_enc_minor_version, RENCODE_FW_INTERFACE_MINOR_VERSION);
|
||||
|
||||
enc->enc_pic.session_info.interface_version =
|
||||
((RENCODE_FW_INTERFACE_MAJOR_VERSION << RENCODE_IF_MAJOR_VERSION_SHIFT) |
|
||||
(RENCODE_FW_INTERFACE_MINOR_VERSION << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
(minor_version << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,6 +182,9 @@ static void radeon_enc_session_init(struct radeon_encoder *enc)
|
|||
|
||||
void radeon_enc_3_0_init(struct radeon_encoder *enc)
|
||||
{
|
||||
struct si_screen *sscreen = (struct si_screen *)enc->screen;
|
||||
uint32_t minor_version;
|
||||
|
||||
radeon_enc_2_0_init(enc);
|
||||
|
||||
enc->session_info = radeon_enc_session_info;
|
||||
|
|
@ -200,7 +203,10 @@ void radeon_enc_3_0_init(struct radeon_encoder *enc)
|
|||
enc->spec_misc = radeon_enc_spec_misc_hevc;
|
||||
}
|
||||
|
||||
minor_version =
|
||||
MIN2(sscreen->info.vcn_enc_minor_version, RENCODE_FW_INTERFACE_MINOR_VERSION);
|
||||
|
||||
enc->enc_pic.session_info.interface_version =
|
||||
((RENCODE_FW_INTERFACE_MAJOR_VERSION << RENCODE_IF_MAJOR_VERSION_SHIFT) |
|
||||
(RENCODE_FW_INTERFACE_MINOR_VERSION << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
(minor_version << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -718,6 +718,9 @@ static void radeon_enc_header_av1(struct radeon_encoder *enc)
|
|||
|
||||
void radeon_enc_4_0_init(struct radeon_encoder *enc)
|
||||
{
|
||||
struct si_screen *sscreen = (struct si_screen *)enc->screen;
|
||||
uint32_t minor_version;
|
||||
|
||||
radeon_enc_3_0_init(enc);
|
||||
|
||||
enc->session_init = radeon_enc_session_init;
|
||||
|
|
@ -743,7 +746,10 @@ void radeon_enc_4_0_init(struct radeon_encoder *enc)
|
|||
enc->encode_params = radeon_enc_av1_encode_params;
|
||||
}
|
||||
|
||||
minor_version =
|
||||
MIN2(sscreen->info.vcn_enc_minor_version, RENCODE_FW_INTERFACE_MINOR_VERSION);
|
||||
|
||||
enc->enc_pic.session_info.interface_version =
|
||||
((RENCODE_FW_INTERFACE_MAJOR_VERSION << RENCODE_IF_MAJOR_VERSION_SHIFT) |
|
||||
(RENCODE_FW_INTERFACE_MINOR_VERSION << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
(minor_version << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -947,6 +947,9 @@ static void radeon_enc_session_init(struct radeon_encoder *enc)
|
|||
|
||||
void radeon_enc_5_0_init(struct radeon_encoder *enc)
|
||||
{
|
||||
struct si_screen *sscreen = (struct si_screen *)enc->screen;
|
||||
uint32_t minor_version;
|
||||
|
||||
radeon_enc_4_0_init(enc);
|
||||
|
||||
enc->session_init = radeon_enc_session_init;
|
||||
|
|
@ -977,7 +980,10 @@ void radeon_enc_5_0_init(struct radeon_encoder *enc)
|
|||
enc->encode_params_codec_spec = radeon_enc_encode_params_av1;
|
||||
}
|
||||
|
||||
minor_version =
|
||||
MIN2(sscreen->info.vcn_enc_minor_version, RENCODE_FW_INTERFACE_MINOR_VERSION);
|
||||
|
||||
enc->enc_pic.session_info.interface_version =
|
||||
((RENCODE_FW_INTERFACE_MAJOR_VERSION << RENCODE_IF_MAJOR_VERSION_SHIFT) |
|
||||
(RENCODE_FW_INTERFACE_MINOR_VERSION << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
(minor_version << RENCODE_IF_MINOR_VERSION_SHIFT));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue