From: Christian König Date: Thu, 7 Jul 2016 09:20:30 +0000 (+0200) Subject: radeon/uvd: move polaris fw check into radeon_video.c v2 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=36df04dac4a2f8a714f2497465cc983dab849246;p=mesa.git radeon/uvd: move polaris fw check into radeon_video.c v2 It's actually not very clever to claim to support H.264 and then fail to create a decoder. v2: prefix FW macro with UVD_. Signed-off-by: Christian König Reviewed-by: Leo Liu --- diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c index 72234175663..52658fa2393 100644 --- a/src/gallium/drivers/radeon/radeon_uvd.c +++ b/src/gallium/drivers/radeon/radeon_uvd.c @@ -60,8 +60,6 @@ #define FB_BUFFER_SIZE_TONGA (2048 * 64) #define IT_SCALING_TABLE_SIZE 992 -#define FW_1_66_16 ((1 << 24) | (66 << 16) | (16 << 8)) - /* UVD decoder representation */ struct ruvd_decoder { struct pipe_video_codec base; @@ -1185,12 +1183,6 @@ struct pipe_video_codec *ruvd_create_decoder(struct pipe_context *context, height = align(height, VL_MACROBLOCK_HEIGHT); break; case PIPE_VIDEO_FORMAT_MPEG4_AVC: - if ((info.family == CHIP_POLARIS10 || info.family == CHIP_POLARIS11) && - info.uvd_fw_version < FW_1_66_16 ) { - RVID_ERR("POLARIS10/11 firmware version need to be updated.\n"); - return NULL; - } - width = align(width, VL_MACROBLOCK_WIDTH); height = align(height, VL_MACROBLOCK_HEIGHT); break; diff --git a/src/gallium/drivers/radeon/radeon_video.c b/src/gallium/drivers/radeon/radeon_video.c index 6d11fc10765..d7c5a165ef3 100644 --- a/src/gallium/drivers/radeon/radeon_video.c +++ b/src/gallium/drivers/radeon/radeon_video.c @@ -43,6 +43,8 @@ #include "radeon_video.h" #include "radeon_vce.h" +#define UVD_FW_1_66_16 ((1 << 24) | (66 << 16) | (16 << 8)) + /* generate an stream handle */ unsigned rvid_alloc_stream_handle() { @@ -206,6 +208,9 @@ int rvid_get_video_param(struct pipe_screen *screen, { struct r600_common_screen *rscreen = (struct r600_common_screen *)screen; enum pipe_video_format codec = u_reduce_video_profile(profile); + struct radeon_info info; + + rscreen->ws->query_info(rscreen->ws, &info); if (entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) { switch (param) { @@ -239,10 +244,15 @@ int rvid_get_video_param(struct pipe_screen *screen, case PIPE_VIDEO_FORMAT_MPEG12: return profile != PIPE_VIDEO_PROFILE_MPEG1; case PIPE_VIDEO_FORMAT_MPEG4: + /* no support for MPEG4 on older hw */ + return rscreen->family >= CHIP_PALM; case PIPE_VIDEO_FORMAT_MPEG4_AVC: - if (rscreen->family < CHIP_PALM) - /* no support for MPEG4 */ - return codec != PIPE_VIDEO_FORMAT_MPEG4; + if ((rscreen->family == CHIP_POLARIS10 || + rscreen->family == CHIP_POLARIS11) && + info.uvd_fw_version < UVD_FW_1_66_16 ) { + RVID_ERR("POLARIS10/11 firmware version need to be updated.\n"); + return false; + } return true; case PIPE_VIDEO_FORMAT_VC1: return true;