From aed89d28d3eaa87b98c711f32b530c617f0d0f0b Mon Sep 17 00:00:00 2001 From: David Rosca Date: Thu, 19 Sep 2024 11:43:45 +0200 Subject: [PATCH] ac: Add ac_vcn_init_enc_cmds Reviewed-by: Boyuan Zhang Part-of: --- src/amd/common/ac_vcn_enc.c | 129 ++++++++++++++++++++++++++++++++++++ src/amd/common/ac_vcn_enc.h | 4 ++ src/amd/common/meson.build | 1 + 3 files changed, 134 insertions(+) create mode 100644 src/amd/common/ac_vcn_enc.c diff --git a/src/amd/common/ac_vcn_enc.c b/src/amd/common/ac_vcn_enc.c new file mode 100644 index 00000000000..b292eb640e0 --- /dev/null +++ b/src/amd/common/ac_vcn_enc.c @@ -0,0 +1,129 @@ +/************************************************************************** + * + * Copyright 2024 Advanced Micro Devices, Inc. + * + * SPDX-License-Identifier: MIT + * + **************************************************************************/ + +#include +#include + +#include "ac_vcn_enc.h" + +#define RENCODE_IB_PARAM_SESSION_INFO 0x00000001 +#define RENCODE_IB_PARAM_TASK_INFO 0x00000002 +#define RENCODE_IB_PARAM_SESSION_INIT 0x00000003 +#define RENCODE_IB_PARAM_LAYER_CONTROL 0x00000004 +#define RENCODE_IB_PARAM_LAYER_SELECT 0x00000005 +#define RENCODE_IB_PARAM_RATE_CONTROL_SESSION_INIT 0x00000006 +#define RENCODE_IB_PARAM_RATE_CONTROL_LAYER_INIT 0x00000007 +#define RENCODE_IB_PARAM_RATE_CONTROL_PER_PICTURE 0x00000008 +#define RENCODE_IB_PARAM_QUALITY_PARAMS 0x00000009 +#define RENCODE_IB_PARAM_SLICE_HEADER 0x0000000a +#define RENCODE_IB_PARAM_ENCODE_PARAMS 0x0000000b +#define RENCODE_IB_PARAM_INTRA_REFRESH 0x0000000c +#define RENCODE_IB_PARAM_ENCODE_CONTEXT_BUFFER 0x0000000d +#define RENCODE_IB_PARAM_VIDEO_BITSTREAM_BUFFER 0x0000000e +#define RENCODE_IB_PARAM_FEEDBACK_BUFFER 0x00000010 +#define RENCODE_IB_PARAM_RATE_CONTROL_PER_PICTURE_EX 0x0000001d +#define RENCODE_IB_PARAM_DIRECT_OUTPUT_NALU 0x00000020 +#define RENCODE_IB_PARAM_QP_MAP 0x00000021 +#define RENCODE_IB_PARAM_ENCODE_LATENCY 0x00000022 +#define RENCODE_IB_PARAM_ENCODE_STATISTICS 0x00000024 + +#define RENCODE_HEVC_IB_PARAM_SLICE_CONTROL 0x00100001 +#define RENCODE_HEVC_IB_PARAM_SPEC_MISC 0x00100002 +#define RENCODE_HEVC_IB_PARAM_DEBLOCKING_FILTER 0x00100003 + +#define RENCODE_H264_IB_PARAM_SLICE_CONTROL 0x00200001 +#define RENCODE_H264_IB_PARAM_SPEC_MISC 0x00200002 +#define RENCODE_H264_IB_PARAM_ENCODE_PARAMS 0x00200003 +#define RENCODE_H264_IB_PARAM_DEBLOCKING_FILTER 0x00200004 + +#define RENCODE_V2_IB_PARAM_DIRECT_OUTPUT_NALU 0x0000000a +#define RENCODE_V2_IB_PARAM_SLICE_HEADER 0x0000000b +#define RENCODE_V2_IB_PARAM_INPUT_FORMAT 0x0000000c +#define RENCODE_V2_IB_PARAM_OUTPUT_FORMAT 0x0000000d +#define RENCODE_V2_IB_PARAM_ENCODE_PARAMS 0x0000000f +#define RENCODE_V2_IB_PARAM_INTRA_REFRESH 0x00000010 +#define RENCODE_V2_IB_PARAM_ENCODE_CONTEXT_BUFFER 0x00000011 +#define RENCODE_V2_IB_PARAM_VIDEO_BITSTREAM_BUFFER 0x00000012 +#define RENCODE_V2_IB_PARAM_QP_MAP 0x00000014 +#define RENCODE_V2_IB_PARAM_FEEDBACK_BUFFER 0x00000015 +#define RENCODE_V2_IB_PARAM_ENCODE_LATENCY 0x00000018 +#define RENCODE_V2_IB_PARAM_ENCODE_STATISTICS 0x00000019 + +#define RENCODE_V4_IB_PARAM_CDF_DEFAULT_TABLE_BUFFER 0x00000019 +#define RENCODE_V4_IB_PARAM_ENCODE_STATISTICS 0x0000001a +#define RENCODE_V4_AV1_IB_PARAM_SPEC_MISC 0x00300001 +#define RENCODE_V4_AV1_IB_PARAM_BITSTREAM_INSTRUCTION 0x00300002 + +#define RENCODE_V5_IB_PARAM_METADATA_BUFFER 0x0000001c +#define RENCODE_V5_IB_PARAM_ENCODE_CONTEXT_BUFFER_OVERRIDE 0x0000001d +#define RENCODE_V5_IB_PARAM_HEVC_ENCODE_PARAMS 0x00100004 +#define RENCODE_V5_AV1_IB_PARAM_TILE_CONFIG 0x00300002 +#define RENCODE_V5_AV1_IB_PARAM_BITSTREAM_INSTRUCTION 0x00300003 +#define RENCODE_V5_AV1_IB_PARAM_ENCODE_PARAMS 0x00300004 + +void ac_vcn_enc_init_cmds(rvcn_enc_cmd_t *cmd, enum vcn_version version) +{ + cmd->session_info = RENCODE_IB_PARAM_SESSION_INFO; + cmd->task_info = RENCODE_IB_PARAM_TASK_INFO; + cmd->session_init = RENCODE_IB_PARAM_SESSION_INIT; + cmd->layer_control = RENCODE_IB_PARAM_LAYER_CONTROL; + cmd->layer_select = RENCODE_IB_PARAM_LAYER_SELECT; + cmd->rc_session_init = RENCODE_IB_PARAM_RATE_CONTROL_SESSION_INIT; + cmd->rc_layer_init = RENCODE_IB_PARAM_RATE_CONTROL_LAYER_INIT; + cmd->rc_per_pic = RENCODE_IB_PARAM_RATE_CONTROL_PER_PICTURE; + cmd->rc_per_pic_ex = RENCODE_IB_PARAM_RATE_CONTROL_PER_PICTURE_EX; + cmd->quality_params = RENCODE_IB_PARAM_QUALITY_PARAMS; + cmd->nalu = RENCODE_IB_PARAM_DIRECT_OUTPUT_NALU; + cmd->slice_header = RENCODE_IB_PARAM_SLICE_HEADER; + cmd->enc_params = RENCODE_IB_PARAM_ENCODE_PARAMS; + cmd->intra_refresh = RENCODE_IB_PARAM_INTRA_REFRESH; + cmd->ctx = RENCODE_IB_PARAM_ENCODE_CONTEXT_BUFFER; + cmd->bitstream = RENCODE_IB_PARAM_VIDEO_BITSTREAM_BUFFER; + cmd->feedback = RENCODE_IB_PARAM_FEEDBACK_BUFFER; + cmd->slice_control_hevc = RENCODE_HEVC_IB_PARAM_SLICE_CONTROL; + cmd->spec_misc_hevc = RENCODE_HEVC_IB_PARAM_SPEC_MISC; + cmd->deblocking_filter_hevc = RENCODE_HEVC_IB_PARAM_DEBLOCKING_FILTER; + cmd->slice_control_h264 = RENCODE_H264_IB_PARAM_SLICE_CONTROL; + cmd->spec_misc_h264 = RENCODE_H264_IB_PARAM_SPEC_MISC; + cmd->enc_params_h264 = RENCODE_H264_IB_PARAM_ENCODE_PARAMS; + cmd->deblocking_filter_h264 = RENCODE_H264_IB_PARAM_DEBLOCKING_FILTER; + cmd->enc_statistics = RENCODE_IB_PARAM_ENCODE_STATISTICS; + cmd->enc_qp_map = RENCODE_IB_PARAM_QP_MAP; + cmd->enc_latency = RENCODE_IB_PARAM_ENCODE_LATENCY; + + if (version >= VCN_2_0_0) { + cmd->nalu = RENCODE_V2_IB_PARAM_DIRECT_OUTPUT_NALU; + cmd->slice_header = RENCODE_V2_IB_PARAM_SLICE_HEADER; + cmd->input_format = RENCODE_V2_IB_PARAM_INPUT_FORMAT; + cmd->output_format = RENCODE_V2_IB_PARAM_OUTPUT_FORMAT; + cmd->enc_params = RENCODE_V2_IB_PARAM_ENCODE_PARAMS; + cmd->intra_refresh = RENCODE_V2_IB_PARAM_INTRA_REFRESH; + cmd->ctx = RENCODE_V2_IB_PARAM_ENCODE_CONTEXT_BUFFER; + cmd->bitstream = RENCODE_V2_IB_PARAM_VIDEO_BITSTREAM_BUFFER; + cmd->feedback = RENCODE_V2_IB_PARAM_FEEDBACK_BUFFER; + cmd->enc_statistics = RENCODE_V2_IB_PARAM_ENCODE_STATISTICS; + cmd->enc_qp_map = RENCODE_V2_IB_PARAM_QP_MAP; + cmd->enc_latency = RENCODE_V2_IB_PARAM_ENCODE_LATENCY; + } + + if (version >= VCN_4_0_0) { + cmd->cdf_default_table_av1 = RENCODE_V4_IB_PARAM_CDF_DEFAULT_TABLE_BUFFER; + cmd->enc_statistics = RENCODE_V4_IB_PARAM_ENCODE_STATISTICS; + cmd->spec_misc_av1 = RENCODE_V4_AV1_IB_PARAM_SPEC_MISC; + cmd->bitstream_instruction_av1 = RENCODE_V4_AV1_IB_PARAM_BITSTREAM_INSTRUCTION; + } + + if (version >= VCN_5_0_0) { + cmd->metadata = RENCODE_V5_IB_PARAM_METADATA_BUFFER; + cmd->ctx_override = RENCODE_V5_IB_PARAM_ENCODE_CONTEXT_BUFFER_OVERRIDE; + cmd->enc_params_hevc = RENCODE_V5_IB_PARAM_HEVC_ENCODE_PARAMS; + cmd->tile_config_av1 = RENCODE_V5_AV1_IB_PARAM_TILE_CONFIG; + cmd->bitstream_instruction_av1 = RENCODE_V5_AV1_IB_PARAM_BITSTREAM_INSTRUCTION; + cmd->enc_params_av1 = RENCODE_V5_AV1_IB_PARAM_ENCODE_PARAMS; + } +} diff --git a/src/amd/common/ac_vcn_enc.h b/src/amd/common/ac_vcn_enc.h index ae395258fa0..1ab2985a98e 100644 --- a/src/amd/common/ac_vcn_enc.h +++ b/src/amd/common/ac_vcn_enc.h @@ -28,6 +28,8 @@ #ifndef AC_VCN_ENC_H #define AC_VCN_ENC_H +#include "amd_family.h" + #define RENCODE_IB_OP_INITIALIZE 0x01000001 #define RENCODE_IB_OP_CLOSE_SESSION 0x01000002 #define RENCODE_IB_OP_ENCODE 0x01000003 @@ -798,4 +800,6 @@ typedef struct rvcn_enc_latency_s uint32_t encode_latency; } rvcn_enc_latency_t; +void ac_vcn_enc_init_cmds(rvcn_enc_cmd_t *cmd, enum vcn_version version); + #endif diff --git a/src/amd/common/meson.build b/src/amd/common/meson.build index 9fb3fdbecc3..c8b17fb4341 100644 --- a/src/amd/common/meson.build +++ b/src/amd/common/meson.build @@ -109,6 +109,7 @@ amd_common_files = files( 'ac_pm4.h', 'ac_vcn_av1_default.h', 'ac_vcn_dec.c', + 'ac_vcn_enc.c', ) if dep_elf.found()