/* default probability + probability data */
ctx_size = 2304 * 5;
- if (((struct si_screen *)dec->screen)->info.family >= CHIP_RENOIR) {
+ if (((struct si_screen *)dec->screen)->info.vcn_ip_version >= VCN_2_0_0) {
/* SRE collocated context data */
ctx_size += 32 * 2 * 128 * 68;
/* SMP collocated context data */
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 ||
- ((struct si_screen*)dec->screen)->info.family == CHIP_GFX940) &&
+ if ((((struct si_screen*)dec->screen)->info.vcn_ip_version >= VCN_3_0_0) &&
(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);
max_references = MAX2(max_references, 9);
if (dec->dpb_type == DPB_MAX_RES)
- dpb_size = (((struct si_screen *)dec->screen)->info.family >= CHIP_RENOIR)
+ dpb_size = (((struct si_screen *)dec->screen)->info.vcn_ip_version >= VCN_2_0_0)
? (8192 * 4320 * 3 / 2) * max_references
: (4096 * 3000 * 3 / 2) * max_references;
else
dec->ws = ws;
if (u_reduce_video_profile(templ->profile) != PIPE_VIDEO_FORMAT_JPEG &&
- (sctx->gfx_level >= GFX11 || sctx->family == CHIP_GFX940)) {
+ (sctx->vcn_ip_ver >= VCN_4_0_0)) {
dec->vcn_dec_sw_ring = true;
ring = AMD_IP_VCN_UNIFIED;
}
if (dec->stream_type == RDECODE_CODEC_JPEG) {
- if (sctx->family == CHIP_MI100 || sctx->family == CHIP_MI200)
+ if (sctx->vcn_ip_ver == VCN_2_5_0 || sctx->vcn_ip_ver == VCN_2_6_0)
dec->njctx = 2;
- else if (sctx->family == CHIP_GFX940)
+ else if (sctx->vcn_ip_ver == VCN_4_0_3)
dec->njctx = 24;
else
dec->njctx = 1;
for (i = 0; i < ARRAY_SIZE(dec->render_pic_list); i++)
dec->render_pic_list[i] = NULL;
- if ((sctx->family >= CHIP_NAVI21 || sctx->family == CHIP_GFX940) &&
- (stream_type == RDECODE_CODEC_H264_PERF)) {
+ if ((sctx->vcn_ip_ver >= VCN_3_0_0) && (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++)
}
}
- if ((sctx->family >= CHIP_NAVI21 || sctx->family == CHIP_GFX940) &&
+ if ((sctx->vcn_ip_ver >= VCN_3_0_0) &&
(stream_type == RDECODE_CODEC_VP9 ||
stream_type == RDECODE_CODEC_AV1 ||
((stream_type == RDECODE_CODEC_H265) && templ->expect_chunked_decode) ||
((stream_type == RDECODE_CODEC_H264_PERF) && templ->expect_chunked_decode)))
dec->dpb_type = DPB_DYNAMIC_TIER_2;
- else if (sctx->family <= CHIP_NAVI14 && stream_type == RDECODE_CODEC_VP9)
+ else if (sctx->vcn_ip_ver <= VCN_2_6_0 && stream_type == RDECODE_CODEC_VP9)
dec->dpb_type = DPB_DYNAMIC_TIER_1;
else
dec->dpb_type = DPB_MAX_RES;
- dec->db_alignment = (((struct si_screen *)dec->screen)->info.family >= CHIP_RENOIR &&
+ dec->db_alignment = (((struct si_screen *)dec->screen)->info.vcn_ip_version >= VCN_2_0_0 &&
dec->base.width > 32 && (dec->stream_type == RDECODE_CODEC_VP9 ||
dec->stream_type == RDECODE_CODEC_AV1 ||
dec->base.profile == PIPE_VIDEO_PROFILE_HEVC_MAIN_10)) ? 64 : 32;
dec->addr_gfx_mode = RDECODE_ARRAY_MODE_LINEAR;
dec->av1_version = RDECODE_AV1_VER_0;
- switch (sctx->family) {
- case CHIP_RAVEN:
- case CHIP_RAVEN2:
+ switch (sctx->vcn_ip_ver) {
+ case VCN_1_0_0:
+ case VCN_1_0_1:
dec->reg.data0 = RDECODE_VCN1_GPCOM_VCPU_DATA0;
dec->reg.data1 = RDECODE_VCN1_GPCOM_VCPU_DATA1;
dec->reg.cmd = RDECODE_VCN1_GPCOM_VCPU_CMD;
dec->reg.cntl = RDECODE_VCN1_ENGINE_CNTL;
dec->jpg_reg.version = RDECODE_JPEG_REG_VER_V1;
break;
- case CHIP_NAVI10:
- case CHIP_NAVI12:
- case CHIP_NAVI14:
- case CHIP_RENOIR:
+ case VCN_2_0_0:
+ case VCN_2_0_2:
+ case VCN_2_0_3:
+ case VCN_2_2_0:
dec->reg.data0 = RDECODE_VCN2_GPCOM_VCPU_DATA0;
dec->reg.data1 = RDECODE_VCN2_GPCOM_VCPU_DATA1;
dec->reg.cmd = RDECODE_VCN2_GPCOM_VCPU_CMD;
dec->reg.cntl = RDECODE_VCN2_ENGINE_CNTL;
dec->jpg_reg.version = RDECODE_JPEG_REG_VER_V2;
break;
- case CHIP_MI100:
- case CHIP_MI200:
- case CHIP_NAVI21:
- case CHIP_NAVI22:
- case CHIP_NAVI23:
- case CHIP_NAVI24:
- case CHIP_VANGOGH:
- case CHIP_REMBRANDT:
- case CHIP_RAPHAEL_MENDOCINO:
+ case VCN_2_5_0:
+ case VCN_2_6_0:
+ case VCN_3_0_0:
+ case VCN_3_0_2:
+ case VCN_3_0_16:
+ case VCN_3_0_33:
+ case VCN_3_1_1:
+ case VCN_3_1_2:
dec->reg.data0 = RDECODE_VCN2_5_GPCOM_VCPU_DATA0;
dec->reg.data1 = RDECODE_VCN2_5_GPCOM_VCPU_DATA1;
dec->reg.cmd = RDECODE_VCN2_5_GPCOM_VCPU_CMD;
dec->reg.cntl = RDECODE_VCN2_5_ENGINE_CNTL;
dec->jpg_reg.version = RDECODE_JPEG_REG_VER_V2;
break;
- case CHIP_GFX940:
+ case VCN_4_0_3:
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:
- case CHIP_GFX1102:
- case CHIP_GFX1103_R1:
- case CHIP_GFX1103_R2:
+ case VCN_4_0_0:
+ case VCN_4_0_2:
+ case VCN_4_0_4:
dec->jpg_reg.version = RDECODE_JPEG_REG_VER_V2;
dec->addr_gfx_mode = RDECODE_ARRAY_MODE_ADDRLIB_SEL_GFX11;
dec->av1_version = RDECODE_AV1_VER_1;
list_inithead(&dec->dpb_unref_list);
}
- dec->tmz_ctx = sctx->family < CHIP_RENOIR;
+ dec->tmz_ctx = sctx->vcn_ip_ver <= VCN_2_2_0 && sctx->vcn_ip_ver != VCN_UNKNOWN;
return &dec->base;
sscreen->info.ip[AMD_IP_VCN_ENC].num_queues))
return 0;
- if (sscreen->info.family == CHIP_GFX940)
+ if (sscreen->info.vcn_ip_version == VCN_4_0_3)
return 0;
switch (param) {
/* in case it is explicitly marked as not supported by the kernel */
(QUERYABLE_KERNEL ? KERNEL_ENC_CAP(codec, valid) : 1) &&
((codec == PIPE_VIDEO_FORMAT_MPEG4_AVC &&
- (sscreen->info.family >= CHIP_RAVEN || si_vce_is_fw_version_supported(sscreen))) ||
+ (sscreen->info.vcn_ip_version >= VCN_1_0_0 || si_vce_is_fw_version_supported(sscreen))) ||
(profile == PIPE_VIDEO_PROFILE_HEVC_MAIN &&
- (sscreen->info.family >= CHIP_RAVEN || si_radeon_uvd_enc_supported(sscreen))) ||
- (profile == PIPE_VIDEO_PROFILE_HEVC_MAIN_10 && sscreen->info.family >= CHIP_RENOIR) ||
- (profile == PIPE_VIDEO_PROFILE_AV1_MAIN && (sscreen->info.family >= CHIP_GFX1100))));
+ (sscreen->info.vcn_ip_version >= VCN_1_0_0 || si_radeon_uvd_enc_supported(sscreen))) ||
+ (profile == PIPE_VIDEO_PROFILE_HEVC_MAIN_10 && sscreen->info.vcn_ip_version >= VCN_2_0_0) ||
+ (profile == PIPE_VIDEO_PROFILE_AV1_MAIN &&
+ (sscreen->info.vcn_ip_version >= VCN_4_0_0 && sscreen->info.vcn_ip_version != VCN_4_0_3))));
case PIPE_VIDEO_CAP_NPOT_TEXTURES:
return 1;
case PIPE_VIDEO_CAP_MIN_WIDTH:
case PIPE_VIDEO_CAP_STACKED_FRAMES:
return (sscreen->info.family < CHIP_TONGA) ? 1 : 2;
case PIPE_VIDEO_CAP_MAX_TEMPORAL_LAYERS:
- if (codec == PIPE_VIDEO_FORMAT_MPEG4_AVC &&
- sscreen->info.family >= CHIP_RAVEN)
- return 4;
- else
- return 0;
+ return (codec == PIPE_VIDEO_FORMAT_MPEG4_AVC &&
+ sscreen->info.vcn_ip_version >= VCN_1_0_0) ? 4 : 0;
case PIPE_VIDEO_CAP_ENC_QUALITY_LEVEL:
- if (sscreen->info.family >= CHIP_RAVEN)
- return 32;
- else
- return 0;
+ return (sscreen->info.vcn_ip_version >= VCN_1_0_0) ? 32 : 0;
case PIPE_VIDEO_CAP_ENC_SUPPORTS_MAX_FRAME_SIZE:
- return (sscreen->info.family >= CHIP_RAVEN) ? 1 : 0;
+ return (sscreen->info.vcn_ip_version >= VCN_1_0_0) ? 1 : 0;
case PIPE_VIDEO_CAP_ENC_HEVC_FEATURE_FLAGS:
- if ((sscreen->info.family >= CHIP_RAVEN) &&
+ if ((sscreen->info.vcn_ip_version >= VCN_1_0_0) &&
(profile == PIPE_VIDEO_PROFILE_HEVC_MAIN ||
profile == PIPE_VIDEO_PROFILE_HEVC_MAIN_10)) {
union pipe_h265_enc_cap_features pipe_features;
pipe_features.bits.constrained_intra_pred = PIPE_ENC_FEATURE_SUPPORTED;
pipe_features.bits.deblocking_filter_disable
= PIPE_ENC_FEATURE_SUPPORTED;
- if (sscreen->info.family >= CHIP_RENOIR)
+ if (sscreen->info.vcn_ip_version >= VCN_2_0_0)
pipe_features.bits.sao = PIPE_ENC_FEATURE_SUPPORTED;
return pipe_features.value;
return 0;
case PIPE_VIDEO_CAP_ENC_HEVC_BLOCK_SIZES:
- if (sscreen->info.family >= CHIP_RAVEN &&
+ if (sscreen->info.vcn_ip_version >= VCN_1_0_0 &&
(profile == PIPE_VIDEO_PROFILE_HEVC_MAIN ||
profile == PIPE_VIDEO_PROFILE_HEVC_MAIN_10)) {
union pipe_h265_enc_cap_block_sizes pipe_block_sizes;
return 0;
case PIPE_VIDEO_CAP_ENC_SUPPORTS_ASYNC_OPERATION:
- return (sscreen->info.family >= CHIP_RAVEN) ? 1 : 0;
+ return (sscreen->info.vcn_ip_version >= VCN_1_0_0) ? 1 : 0;
case PIPE_VIDEO_CAP_ENC_MAX_SLICES_PER_FRAME:
- if (sscreen->info.family >= CHIP_RAVEN)
- return 128;
- else
- return 1;
+ return (sscreen->info.vcn_ip_version >= VCN_1_0_0) ? 128 : 1;
case PIPE_VIDEO_CAP_ENC_SLICES_STRUCTURE:
- if (sscreen->info.family >= CHIP_RENOIR) {
+ if (sscreen->info.vcn_ip_version >= VCN_2_0_0) {
int value = (PIPE_VIDEO_CAP_SLICE_STRUCTURE_POWER_OF_TWO_ROWS |
PIPE_VIDEO_CAP_SLICE_STRUCTURE_EQUAL_ROWS |
PIPE_VIDEO_CAP_SLICE_STRUCTURE_EQUAL_MULTI_ROWS);
return 0;
case PIPE_VIDEO_CAP_ENC_AV1_FEATURE:
- if (sscreen->info.family >= CHIP_GFX1100) {
+ if (sscreen->info.vcn_ip_version >= VCN_4_0_0 && sscreen->info.vcn_ip_version != VCN_4_0_3) {
union pipe_av1_enc_cap_features attrib;
attrib.value = 0;
return 0;
case PIPE_VIDEO_CAP_ENC_AV1_FEATURE_EXT1:
- if (sscreen->info.family >= CHIP_GFX1100) {
+ if (sscreen->info.vcn_ip_version >= VCN_4_0_0 && sscreen->info.vcn_ip_version != VCN_4_0_3) {
union pipe_av1_enc_cap_features_ext1 attrib_ext1;
attrib_ext1.value = 0;
attrib_ext1.bits.interpolation_filter = PIPE_VIDEO_CAP_ENC_AV1_INTERPOLATION_FILTER_EIGHT_TAP |
return 0;
case PIPE_VIDEO_CAP_ENC_AV1_FEATURE_EXT2:
- if (sscreen->info.family >= CHIP_GFX1100) {
+ if (sscreen->info.vcn_ip_version >= VCN_4_0_0 && sscreen->info.vcn_ip_version != VCN_4_0_3) {
union pipe_av1_enc_cap_features_ext2 attrib_ext2;
attrib_ext2.value = 0;
} else
return 0;
case PIPE_VIDEO_CAP_ENC_SUPPORTS_TILE:
- if (sscreen->info.family >= CHIP_GFX1100 && profile == PIPE_VIDEO_PROFILE_AV1_MAIN)
+ if ((sscreen->info.vcn_ip_version >= VCN_4_0_0 && sscreen->info.vcn_ip_version != VCN_4_0_3) &&
+ profile == PIPE_VIDEO_PROFILE_AV1_MAIN)
return 1;
else
return 0;
case PIPE_VIDEO_CAP_SUPPORTED:
if (codec != PIPE_VIDEO_FORMAT_JPEG &&
!(sscreen->info.ip[AMD_IP_UVD].num_queues ||
- ((sscreen->info.family >= CHIP_GFX1100 || sscreen->info.family == CHIP_GFX940) ?
+ ((sscreen->info.vcn_ip_version >= VCN_4_0_0) ?
sscreen->info.ip[AMD_IP_VCN_UNIFIED].num_queues :
sscreen->info.ip[AMD_IP_VCN_DEC].num_queues)))
return false;
sscreen->info.family == CHIP_POLARIS11))
return KERNEL_DEC_CAP(codec, valid);
if (codec < PIPE_VIDEO_FORMAT_MPEG4_AVC &&
- (sscreen->info.family >= CHIP_NAVI24 ||
- sscreen->info.family == CHIP_GFX940))
+ sscreen->info.vcn_ip_version >= VCN_3_0_33)
return false;
switch (codec) {
case PIPE_VIDEO_FORMAT_MPEG12:
- if (sscreen->info.gfx_level >= GFX11 ||
- sscreen->info.family == CHIP_GFX940)
- return false;
- else
- return profile != PIPE_VIDEO_PROFILE_MPEG1;
+ return !(sscreen->info.vcn_ip_version >= VCN_3_0_33 || profile == PIPE_VIDEO_PROFILE_MPEG1);
case PIPE_VIDEO_FORMAT_MPEG4:
- if (sscreen->info.gfx_level >= GFX11 ||
- sscreen->info.family == CHIP_GFX940)
- return false;
- else
- return true;
+ return !(sscreen->info.vcn_ip_version >= VCN_3_0_33);
case PIPE_VIDEO_FORMAT_MPEG4_AVC:
if ((sscreen->info.family == CHIP_POLARIS10 || sscreen->info.family == CHIP_POLARIS11) &&
sscreen->info.uvd_fw_version < UVD_FW_1_66_16) {
}
return true;
case PIPE_VIDEO_FORMAT_VC1:
- if (sscreen->info.gfx_level >= GFX11 ||
- sscreen->info.family == CHIP_GFX940)
- return false;
- else
- return true;
+ return !(sscreen->info.vcn_ip_version >= VCN_3_0_33);
case PIPE_VIDEO_FORMAT_HEVC:
/* Carrizo only supports HEVC Main */
if (sscreen->info.family >= CHIP_STONEY)
return profile == PIPE_VIDEO_PROFILE_HEVC_MAIN;
return false;
case PIPE_VIDEO_FORMAT_JPEG:
- if (sscreen->info.family >= CHIP_RAVEN) {
+ if (sscreen->info.vcn_ip_version >= VCN_1_0_0) {
if (!sscreen->info.ip[AMD_IP_VCN_JPEG].num_queues)
return false;
else
}
return true;
case PIPE_VIDEO_FORMAT_VP9:
- if (sscreen->info.family < CHIP_RAVEN)
- return false;
- return true;
+ return sscreen->info.vcn_ip_version >= VCN_1_0_0;
case PIPE_VIDEO_FORMAT_AV1:
- if ((sscreen->info.family < CHIP_NAVI21 && sscreen->info.family != CHIP_GFX940) ||
- sscreen->info.family == CHIP_NAVI24)
- return false;
- return true;
+ return sscreen->info.vcn_ip_version >= VCN_3_0_0 && sscreen->info.vcn_ip_version != VCN_3_0_33;
default:
return false;
}
case PIPE_VIDEO_FORMAT_HEVC:
case PIPE_VIDEO_FORMAT_VP9:
case PIPE_VIDEO_FORMAT_AV1:
- return (sscreen->info.family < CHIP_RENOIR) ?
+ return (sscreen->info.vcn_ip_version < VCN_2_0_0) ?
((sscreen->info.family < CHIP_TONGA) ? 2048 : 4096) : 8192;
default:
return (sscreen->info.family < CHIP_TONGA) ? 2048 : 4096;
case PIPE_VIDEO_FORMAT_HEVC:
case PIPE_VIDEO_FORMAT_VP9:
case PIPE_VIDEO_FORMAT_AV1:
- return (sscreen->info.family < CHIP_RENOIR) ?
+ return (sscreen->info.vcn_ip_version < VCN_2_0_0) ?
((sscreen->info.family < CHIP_TONGA) ? 1152 : 4096) : 4352;
default:
return (sscreen->info.family < CHIP_TONGA) ? 1152 : 4096;
case PIPE_FORMAT_Y8_400_UNORM:
return true;
case PIPE_FORMAT_Y8_U8_V8_444_UNORM:
- if (sscreen->info.family >= CHIP_RENOIR)
+ if (sscreen->info.vcn_ip_version >= VCN_2_0_0)
return true;
else
return false;
case PIPE_FORMAT_R8G8B8A8_UNORM:
case PIPE_FORMAT_A8R8G8B8_UNORM:
case PIPE_FORMAT_R8_G8_B8_UNORM:
- if (sscreen->info.family == CHIP_GFX940)
+ if (sscreen->info.vcn_ip_version == VCN_4_0_3)
return true;
else
return false;
if ((entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) &&
(((profile == PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH) &&
- (sscreen->info.family >= CHIP_RENOIR)) ||
+ (sscreen->info.vcn_ip_version >= VCN_2_0_0)) ||
((profile == PIPE_VIDEO_PROFILE_AV1_MAIN) &&
- (sscreen->info.family >= CHIP_GFX1100))))
+ (sscreen->info.vcn_ip_version >= VCN_4_0_0 &&
+ sscreen->info.vcn_ip_version != VCN_4_0_3))))
return (format == PIPE_FORMAT_P010 || format == PIPE_FORMAT_NV12);
sscreen->b.get_disk_shader_cache = si_get_disk_shader_cache;
if (sscreen->info.ip[AMD_IP_UVD].num_queues ||
- ((sscreen->info.family >= CHIP_GFX1100 || sscreen->info.family == CHIP_GFX940) ?
+ ((sscreen->info.vcn_ip_version >= VCN_4_0_0) ?
sscreen->info.ip[AMD_IP_VCN_UNIFIED].num_queues : sscreen->info.ip[AMD_IP_VCN_DEC].num_queues) ||
sscreen->info.ip[AMD_IP_VCN_JPEG].num_queues || sscreen->info.ip[AMD_IP_VCE].num_queues ||
sscreen->info.ip[AMD_IP_UVD_ENC].num_queues || sscreen->info.ip[AMD_IP_VCN_ENC].num_queues) {