From: Christian König Date: Mon, 9 Sep 2013 08:49:55 +0000 (+0200) Subject: radeon/uvd: move more logic into the common files X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2487324591c1629492288a814e1d8a3046d37b15;p=mesa.git radeon/uvd: move more logic into the common files Move the code back into the common UVD files since we now have base structures for R600 and radeonsi. Signed-off-by: Christian König Reviewed-by: Alex Deucher --- diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index aa5cadf93e9..f60252ad315 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -1293,7 +1293,7 @@ struct pipe_screen *r600_screen_create(struct radeon_winsys *ws) rscreen->b.b.get_driver_query_info = r600_get_driver_query_info; if (rscreen->b.info.has_uvd) { - rscreen->b.b.get_video_param = r600_uvd_get_video_param; + rscreen->b.b.get_video_param = ruvd_get_video_param; rscreen->b.b.is_video_format_supported = ruvd_is_format_supported; } else { rscreen->b.b.get_video_param = r600_get_video_param; diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index 2ba0251dccf..14919754610 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -816,11 +816,6 @@ struct pipe_video_codec *r600_uvd_create_decoder(struct pipe_context *context, struct pipe_video_buffer *r600_video_buffer_create(struct pipe_context *pipe, const struct pipe_video_buffer *tmpl); -int r600_uvd_get_video_param(struct pipe_screen *screen, - enum pipe_video_profile profile, - enum pipe_video_entrypoint entrypoint, - enum pipe_video_cap param); - /* * Helpers for building command buffers */ diff --git a/src/gallium/drivers/r600/r600_uvd.c b/src/gallium/drivers/r600/r600_uvd.c index eeac76f3e23..00669fd3171 100644 --- a/src/gallium/drivers/r600/r600_uvd.c +++ b/src/gallium/drivers/r600/r600_uvd.c @@ -167,33 +167,5 @@ static struct radeon_winsys_cs_handle* r600_uvd_set_dtb(struct ruvd_msg *msg, st struct pipe_video_codec *r600_uvd_create_decoder(struct pipe_context *context, const struct pipe_video_codec *templat) { - struct r600_context *ctx = (struct r600_context *)context; - - return ruvd_create_decoder(context, templat, ctx->b.ws, r600_uvd_set_dtb); -} - -int r600_uvd_get_video_param(struct pipe_screen *screen, - enum pipe_video_profile profile, - enum pipe_video_entrypoint entrypoint, - enum pipe_video_cap param) -{ - struct r600_screen *rscreen = (struct r600_screen *)screen; - - /* UVD 2.x limits */ - if (rscreen->b.family < CHIP_PALM) { - enum pipe_video_format codec = u_reduce_video_profile(profile); - switch (param) { - case PIPE_VIDEO_CAP_SUPPORTED: - /* no support for MPEG4 */ - return codec != PIPE_VIDEO_FORMAT_MPEG4; - case PIPE_VIDEO_CAP_PREFERS_INTERLACED: - case PIPE_VIDEO_CAP_SUPPORTS_INTERLACED: - /* and MPEG2 only with shaders */ - return codec != PIPE_VIDEO_FORMAT_MPEG12; - default: - break; - } - } - - return ruvd_get_video_param(screen, profile, entrypoint, param); + return ruvd_create_decoder(context, templat, r600_uvd_set_dtb); } diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c index 981d5c5f326..518978eadf6 100644 --- a/src/gallium/drivers/radeon/radeon_uvd.c +++ b/src/gallium/drivers/radeon/radeon_uvd.c @@ -46,6 +46,7 @@ #include "vl/vl_mpeg12_decoder.h" #include "../../winsys/radeon/drm/radeon_winsys.h" +#include "r600_pipe_common.h" #include "radeon_uvd.h" #define RUVD_ERR(fmt, args...) \ @@ -818,9 +819,9 @@ static void ruvd_flush(struct pipe_video_codec *decoder) */ struct pipe_video_codec *ruvd_create_decoder(struct pipe_context *context, const struct pipe_video_codec *templ, - struct radeon_winsys* ws, ruvd_set_dtb set_dtb) { + struct radeon_winsys* ws = ((struct r600_common_context *)context)->ws; unsigned dpb_size = calc_dpb_size(templ); unsigned width = templ->width, height = templ->height; unsigned bs_buf_size; @@ -1082,6 +1083,24 @@ int ruvd_get_video_param(struct pipe_screen *screen, enum pipe_video_entrypoint entrypoint, enum pipe_video_cap param) { + struct r600_common_screen *rscreen = (struct r600_common_screen *)screen; + + /* UVD 2.x limits */ + if (rscreen->family < CHIP_PALM) { + enum pipe_video_format codec = u_reduce_video_profile(profile); + switch (param) { + case PIPE_VIDEO_CAP_SUPPORTED: + /* no support for MPEG4 */ + return codec != PIPE_VIDEO_FORMAT_MPEG4; + case PIPE_VIDEO_CAP_PREFERS_INTERLACED: + case PIPE_VIDEO_CAP_SUPPORTS_INTERLACED: + /* and MPEG2 only with shaders */ + return codec != PIPE_VIDEO_FORMAT_MPEG12; + default: + break; + } + } + switch (param) { case PIPE_VIDEO_CAP_SUPPORTED: switch (u_reduce_video_profile(profile)) { diff --git a/src/gallium/drivers/radeon/radeon_uvd.h b/src/gallium/drivers/radeon/radeon_uvd.h index dedb3c7040d..b0135bac5d7 100644 --- a/src/gallium/drivers/radeon/radeon_uvd.h +++ b/src/gallium/drivers/radeon/radeon_uvd.h @@ -347,7 +347,6 @@ typedef struct radeon_winsys_cs_handle* (*ruvd_set_dtb) /* create an UVD decode */ struct pipe_video_codec *ruvd_create_decoder(struct pipe_context *context, const struct pipe_video_codec *templat, - struct radeon_winsys* ws, ruvd_set_dtb set_dtb); /* join surfaces into the same buffer with identical tiling params diff --git a/src/gallium/drivers/radeonsi/radeonsi_uvd.c b/src/gallium/drivers/radeonsi/radeonsi_uvd.c index de6cc12e45b..1cb3be026d1 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_uvd.c +++ b/src/gallium/drivers/radeonsi/radeonsi_uvd.c @@ -149,7 +149,5 @@ static struct radeon_winsys_cs_handle* radeonsi_uvd_set_dtb(struct ruvd_msg *msg struct pipe_video_codec *radeonsi_uvd_create_decoder(struct pipe_context *context, const struct pipe_video_codec *templ) { - struct r600_context *ctx = (struct r600_context *)context; - - return ruvd_create_decoder(context, templ, ctx->b.ws, radeonsi_uvd_set_dtb); + return ruvd_create_decoder(context, templ, radeonsi_uvd_set_dtb); }