Commit 7b434057 authored by Samson Tam's avatar Samson Tam Committed by Alex Deucher
Browse files

drm/amd/display: clean up SPL code



[Why & How]
Add check for invalid pixel format, remove unused pixel formats
and clean up some names

Reviewed-by: default avatarNavid Assadian <navid.assadian@amd.com>
Signed-off-by: default avatarSamson Tam <Samson.Tam@amd.com>
Signed-off-by: default avatarAurabindo Pillai <aurabindo.pillai@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent fae0e342
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -64,6 +64,13 @@ static void populate_inits_from_splinits(struct scl_inits *inits,
	inits->h_c = dc_fixpt_from_int_dy(spl_inits->h_filter_init_int_c, spl_inits->h_filter_init_frac_c >> 5, 0, 19);
	inits->v_c = dc_fixpt_from_int_dy(spl_inits->v_filter_init_int_c, spl_inits->v_filter_init_frac_c >> 5, 0, 19);
}
static void populate_splformat_from_format(enum spl_pixel_format *spl_pixel_format, const enum pixel_format pixel_format)
{
	if (pixel_format < PIXEL_FORMAT_INVALID)
		*spl_pixel_format = (enum spl_pixel_format)pixel_format;
	else
		*spl_pixel_format = SPL_PIXEL_FORMAT_INVALID;
}
/// @brief Translate SPL input parameters from pipe context
/// @param pipe_ctx
/// @param spl_in
@@ -89,7 +96,7 @@ void translate_SPL_in_params_from_pipe_ctx(struct pipe_ctx *pipe_ctx, struct spl
		spl_in->callbacks = dcn2_spl_callbacks;
	}
	// Make format field from spl_in point to plane_res scl_data format
	spl_in->basic_in.format = (enum spl_pixel_format)pipe_ctx->plane_res.scl_data.format;
	populate_splformat_from_format(&spl_in->basic_in.format, pipe_ctx->plane_res.scl_data.format);
	// Make view_format from basic_out point to view_format from stream
	spl_in->basic_out.view_format = (enum spl_view_3d)stream->view_format;
	// Populate spl input basic input clip rect from plane state clip rect
+35 −36
Original line number Diff line number Diff line
@@ -563,6 +563,24 @@ static bool spl_is_rgb8(enum spl_pixel_format format)
	return false;
}

static bool spl_is_video_format(enum spl_pixel_format format)
{
	if (format >= SPL_PIXEL_FORMAT_VIDEO_BEGIN
			&& format <= SPL_PIXEL_FORMAT_VIDEO_END)
		return true;
	else
		return false;
}

static bool spl_is_subsampled_format(enum spl_pixel_format format)
{
	if (format >= SPL_PIXEL_FORMAT_SUBSAMPLED_BEGIN
			&& format <= SPL_PIXEL_FORMAT_SUBSAMPLED_END)
		return true;
	else
		return false;
}

/*Calculate inits and viewport */
static void spl_calculate_inits_and_viewports(struct spl_in *spl_in,
		struct spl_scratch *spl_scratch)
@@ -607,7 +625,7 @@ static void spl_calculate_inits_and_viewports(struct spl_in *spl_in,
		spl_swap(flip_vert_scan_dir, flip_horz_scan_dir);
	}

	if (spl_is_yuv420(spl_in->basic_in.format)) {
	if (spl_is_subsampled_format(spl_in->basic_in.format)) {
		/* this gives the direction of the cositing (negative will move
		 * left, right otherwise)
		 */
@@ -715,24 +733,6 @@ static void spl_clamp_viewport(struct spl_rect *viewport)
		viewport->width = MIN_VIEWPORT_SIZE;
}

static bool spl_dscl_is_420_format(enum spl_pixel_format format)
{
	if (format == SPL_PIXEL_FORMAT_420BPP8 ||
			format == SPL_PIXEL_FORMAT_420BPP10)
		return true;
	else
		return false;
}

static bool spl_dscl_is_video_format(enum spl_pixel_format format)
{
	if (format >= SPL_PIXEL_FORMAT_VIDEO_BEGIN
			&& format <= SPL_PIXEL_FORMAT_VIDEO_END)
		return true;
	else
		return false;
}

static enum scl_mode spl_get_dscl_mode(const struct spl_in *spl_in,
				const struct spl_scaler_data *data,
				bool enable_isharp, bool enable_easf)
@@ -749,8 +749,8 @@ static enum scl_mode spl_get_dscl_mode(const struct spl_in *spl_in,
			&& !enable_isharp)
		return SCL_MODE_SCALING_444_BYPASS;

	if (!spl_dscl_is_420_format(pixel_format)) {
		if (spl_dscl_is_video_format(pixel_format))
	if (!spl_is_subsampled_format(pixel_format)) {
		if (spl_is_video_format(pixel_format))
			return SCL_MODE_SCALING_444_YCBCR_ENABLE;
		else
			return SCL_MODE_SCALING_444_RGB_ENABLE;
@@ -773,7 +773,7 @@ static bool spl_choose_lls_policy(enum spl_pixel_format format,
	enum spl_transfer_func_predefined tf_predefined_type,
	enum linear_light_scaling *lls_pref)
{
	if (spl_is_yuv420(format)) {
	if (spl_is_video_format(format)) {
		*lls_pref = LLS_PREF_NO;
		if ((tf_type == SPL_TF_TYPE_PREDEFINED) ||
			(tf_type == SPL_TF_TYPE_DISTRIBUTED_POINTS))
@@ -832,7 +832,7 @@ static bool enable_easf(struct spl_in *spl_in, struct spl_scratch *spl_scratch)
/* Check if video is in fullscreen mode */
static bool spl_is_video_fullscreen(struct spl_in *spl_in)
{
	if (spl_is_yuv420(spl_in->basic_in.format) && spl_in->is_fullscreen)
	if (spl_is_video_format(spl_in->basic_in.format) && spl_in->is_fullscreen)
		return true;
	return false;
}
@@ -863,10 +863,10 @@ static bool spl_get_isharp_en(struct spl_in *spl_in,
	 * Apply sharpness to RGB and YUV (NV12/P010)
	 *  surfaces based on policy setting
	 */
	if (!spl_is_yuv420(spl_in->basic_in.format) &&
	if (!spl_is_video_format(spl_in->basic_in.format) &&
		(spl_in->sharpen_policy == SHARPEN_YUV))
		return enable_isharp;
	else if ((spl_is_yuv420(spl_in->basic_in.format) && !fullscreen) &&
	else if ((spl_is_video_format(spl_in->basic_in.format) && !fullscreen) &&
		(spl_in->sharpen_policy == SHARPEN_RGB_FULLSCREEN_YUV))
		return enable_isharp;
	else if (!spl_in->is_fullscreen &&
@@ -949,7 +949,7 @@ static bool spl_get_optimal_number_of_taps(
	int min_taps_y, min_taps_c;
	enum lb_memory_config lb_config;
	bool skip_easf = false;
	bool is_ycbcr = spl_dscl_is_video_format(spl_in->basic_in.format);
	bool is_subsampled = spl_is_subsampled_format(spl_in->basic_in.format);

	if (spl_scratch->scl_data.viewport.width > spl_scratch->scl_data.h_active &&
		max_downscale_src_width != 0 &&
@@ -981,7 +981,7 @@ static bool spl_get_optimal_number_of_taps(
	if (skip_easf)
		spl_get_taps_non_adaptive_scaler(spl_scratch, in_taps);
	else {
		if (spl_is_yuv420(spl_in->basic_in.format)) {
		if (spl_is_video_format(spl_in->basic_in.format)) {
			spl_scratch->scl_data.taps.h_taps = 6;
			spl_scratch->scl_data.taps.v_taps = 6;
			spl_scratch->scl_data.taps.h_taps_c = 4;
@@ -999,8 +999,7 @@ static bool spl_get_optimal_number_of_taps(
	min_taps_c = spl_fixpt_ceil(spl_scratch->scl_data.ratios.vert_c);

	/* Use LB_MEMORY_CONFIG_3 for 4:2:0 */
	if ((spl_in->basic_in.format == SPL_PIXEL_FORMAT_420BPP8)
		|| (spl_in->basic_in.format == SPL_PIXEL_FORMAT_420BPP10))
	if (spl_is_yuv420(spl_in->basic_in.format))
		lb_config = LB_MEMORY_CONFIG_3;
	else
		lb_config = LB_MEMORY_CONFIG_0;
@@ -1056,7 +1055,7 @@ static bool spl_get_optimal_number_of_taps(
		if (spl_scratch->scl_data.taps.h_taps_c == 5)
			spl_scratch->scl_data.taps.h_taps_c = 4;

		if (spl_is_yuv420(spl_in->basic_in.format)) {
		if (spl_is_video_format(spl_in->basic_in.format)) {
			if (spl_scratch->scl_data.taps.h_taps <= 4) {
				*enable_easf_v = false;
				*enable_easf_h = false;
@@ -1101,10 +1100,10 @@ static bool spl_get_optimal_number_of_taps(
			spl_scratch->scl_data.taps.h_taps = 1;
			spl_scratch->scl_data.taps.v_taps = 1;

			if (IDENTITY_RATIO(spl_scratch->scl_data.ratios.horz_c) && !is_ycbcr)
			if (IDENTITY_RATIO(spl_scratch->scl_data.ratios.horz_c) && !is_subsampled)
				spl_scratch->scl_data.taps.h_taps_c = 1;

			if (IDENTITY_RATIO(spl_scratch->scl_data.ratios.vert_c) && !is_ycbcr)
			if (IDENTITY_RATIO(spl_scratch->scl_data.ratios.vert_c) && !is_subsampled)
				spl_scratch->scl_data.taps.v_taps_c = 1;

			*enable_easf_v = false;
@@ -1118,11 +1117,11 @@ static bool spl_get_optimal_number_of_taps(
				(IDENTITY_RATIO(spl_scratch->scl_data.ratios.vert)))
				spl_scratch->scl_data.taps.v_taps = 1;

			if ((!*enable_easf_h) && !is_ycbcr &&
			if ((!*enable_easf_h) && !is_subsampled &&
				(IDENTITY_RATIO(spl_scratch->scl_data.ratios.horz_c)))
				spl_scratch->scl_data.taps.h_taps_c = 1;

			if ((!*enable_easf_v) && !is_ycbcr &&
			if ((!*enable_easf_v) && !is_subsampled &&
				(IDENTITY_RATIO(spl_scratch->scl_data.ratios.vert_c)))
				spl_scratch->scl_data.taps.v_taps_c = 1;
		}
@@ -1133,7 +1132,7 @@ static bool spl_get_optimal_number_of_taps(
static void spl_set_black_color_data(enum spl_pixel_format format,
			struct scl_black_color *scl_black_color)
{
	bool ycbcr = spl_dscl_is_video_format(format);
	bool ycbcr = spl_is_video_format(format);
	if (ycbcr)	{
		scl_black_color->offset_rgb_y = BLACK_OFFSET_RGB_Y;
		scl_black_color->offset_rgb_cbcr = BLACK_OFFSET_CBCR;
@@ -1600,7 +1599,7 @@ static void spl_set_easf_data(struct spl_scratch *spl_scratch, struct spl_out *s
			0x0;	// fp1.5.10, C3 coefficient
	}

	if (spl_is_yuv420(format)) { /* TODO: 0 = RGB, 1 = YUV */
	if (spl_is_video_format(format)) { /* TODO: 0 = RGB, 1 = YUV */
		dscl_prog_data->easf_matrix_mode = 1;
		/*
		 * 2-bit, BF3 chroma mode correction calculation mode
+3 −3
Original line number Diff line number Diff line
@@ -63,13 +63,13 @@ enum spl_pixel_format {
	SPL_PIXEL_FORMAT_420BPP8,
	SPL_PIXEL_FORMAT_420BPP10,
	/*end of pixel format definition*/
	SPL_PIXEL_FORMAT_INVALID,
	SPL_PIXEL_FORMAT_422BPP8,
	SPL_PIXEL_FORMAT_422BPP10,
	SPL_PIXEL_FORMAT_GRPH_BEGIN = SPL_PIXEL_FORMAT_INDEX8,
	SPL_PIXEL_FORMAT_GRPH_END = SPL_PIXEL_FORMAT_FP16,
	SPL_PIXEL_FORMAT_SUBSAMPLED_BEGIN = SPL_PIXEL_FORMAT_420BPP8,
	SPL_PIXEL_FORMAT_SUBSAMPLED_END = SPL_PIXEL_FORMAT_420BPP10,
	SPL_PIXEL_FORMAT_VIDEO_BEGIN = SPL_PIXEL_FORMAT_420BPP8,
	SPL_PIXEL_FORMAT_VIDEO_END = SPL_PIXEL_FORMAT_420BPP10,
	SPL_PIXEL_FORMAT_INVALID,
	SPL_PIXEL_FORMAT_UNKNOWN
};