ac: Add VCN ac_video_dec implementation

Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39627>
This commit is contained in:
David Rosca 2026-01-22 16:28:02 +01:00 committed by Marge Bot
parent b5028e84c8
commit 79af03556c
3 changed files with 1768 additions and 1 deletions

File diff suppressed because it is too large Load diff

View file

@ -9,6 +9,8 @@
#ifndef _AC_VCN_DEC_H
#define _AC_VCN_DEC_H
#include "ac_video_dec.h"
/* VCN programming information shared between gallium/vulkan */
#define RDECODE_PKT_TYPE_S(x) (((unsigned)(x)&0x3) << 30)
#define RDECODE_PKT_TYPE_G(x) (((x) >> 30) & 0x3)
@ -1147,6 +1149,18 @@ typedef struct rvcn_dec_feedback_profiling_s {
unsigned int dmaHwCrc32Value2;
} rvcn_dec_feedback_profiling_t;
typedef struct rvcn_dec_avc_its_s {
unsigned char scaling_list_4x4[6][16];
unsigned char scaling_list_8x8[2][64];
} rvcn_dec_avc_its_t;
typedef struct rvcn_dec_hevc_its_s {
unsigned char scaling_list_4x4[6][16];
unsigned char scaling_list_8x8[6][64];
unsigned char scaling_list_16x16[6][64];
unsigned char scaling_list_32x32[2][64];
} rvcn_dec_hevc_its_t;
typedef struct rvcn_dec_vp9_nmv_ctx_mask_s {
unsigned short classes_mask[2];
unsigned short bits_mask[2];
@ -1272,4 +1286,8 @@ unsigned ac_vcn_dec_calc_ctx_size_av1(unsigned av1_version);
void ac_vcn_av1_init_probs(unsigned av1_version, uint8_t *prob);
void ac_vcn_av1_init_film_grain_buffer(unsigned av1_version, rvcn_dec_film_grain_params_t *fg_params, rvcn_dec_av1_fg_init_buf_t *fg_buf);
uint32_t ac_vcn_dec_dpb_size(const struct radeon_info *info, struct ac_video_dec_session_param *param);
uint32_t ac_vcn_dec_dpb_alignment(const struct radeon_info *info, struct ac_video_dec_session_param *param);
struct ac_video_dec *ac_vcn_create_video_decoder(const struct radeon_info *info, struct ac_video_dec_session_param *param);
#endif

View file

@ -5,21 +5,28 @@
*/
#include "ac_video_dec.h"
#include "ac_vcn_dec.h"
uint32_t
ac_video_dec_dpb_size(const struct radeon_info *info, struct ac_video_dec_session_param *param)
{
if (info->vcn_ip_version >= VCN_1_0_0)
return ac_vcn_dec_dpb_size(info, param);
return 0;
}
uint32_t
ac_video_dec_dpb_alignment(const struct radeon_info *info, struct ac_video_dec_session_param *param)
{
if (info->vcn_ip_version >= VCN_1_0_0)
return ac_vcn_dec_dpb_alignment(info, param);
return 0;
}
struct ac_video_dec *
ac_create_video_decoder(const struct radeon_info *info, struct ac_video_dec_session_param *param)
{
if (info->vcn_ip_version >= VCN_1_0_0)
return ac_vcn_create_video_decoder(info, param);
return NULL;
}