drm/amd/display: fix dml pipe merge logic
Dml merges mpc/odm combine pipes to do calculations. This merge is imperfect if there is a viewport overlap. This change saves pre overlap viewport for dml use. Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Reviewed-by: Wesley Chalmers <Wesley.Chalmers@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
bdfbff5ef4
commit
fa90219a12
|
@ -692,6 +692,9 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx)
|
|||
/* Round up, assume original video size always even dimensions */
|
||||
data->viewport_c.width = (data->viewport.width + vpc_div - 1) / vpc_div;
|
||||
data->viewport_c.height = (data->viewport.height + vpc_div - 1) / vpc_div;
|
||||
|
||||
data->viewport_unadjusted = data->viewport;
|
||||
data->viewport_c_unadjusted = data->viewport_c;
|
||||
}
|
||||
|
||||
static void calculate_recout(struct pipe_ctx *pipe_ctx)
|
||||
|
|
|
@ -2212,12 +2212,12 @@ int dcn20_populate_dml_pipes_from_context(
|
|||
|| pipes[pipe_cnt].pipe.dest.odm_combine != dm_odm_combine_mode_disabled;
|
||||
pipes[pipe_cnt].pipe.src.source_scan = pln->rotation == ROTATION_ANGLE_90
|
||||
|| pln->rotation == ROTATION_ANGLE_270 ? dm_vert : dm_horz;
|
||||
pipes[pipe_cnt].pipe.src.viewport_y_y = scl->viewport.y;
|
||||
pipes[pipe_cnt].pipe.src.viewport_y_c = scl->viewport_c.y;
|
||||
pipes[pipe_cnt].pipe.src.viewport_width = scl->viewport.width;
|
||||
pipes[pipe_cnt].pipe.src.viewport_width_c = scl->viewport_c.width;
|
||||
pipes[pipe_cnt].pipe.src.viewport_height = scl->viewport.height;
|
||||
pipes[pipe_cnt].pipe.src.viewport_height_c = scl->viewport_c.height;
|
||||
pipes[pipe_cnt].pipe.src.viewport_y_y = scl->viewport_unadjusted.y;
|
||||
pipes[pipe_cnt].pipe.src.viewport_y_c = scl->viewport_c_unadjusted.y;
|
||||
pipes[pipe_cnt].pipe.src.viewport_width = scl->viewport_unadjusted.width;
|
||||
pipes[pipe_cnt].pipe.src.viewport_width_c = scl->viewport_c_unadjusted.width;
|
||||
pipes[pipe_cnt].pipe.src.viewport_height = scl->viewport_unadjusted.height;
|
||||
pipes[pipe_cnt].pipe.src.viewport_height_c = scl->viewport_c_unadjusted.height;
|
||||
pipes[pipe_cnt].pipe.src.surface_width_y = pln->plane_size.surface_size.width;
|
||||
pipes[pipe_cnt].pipe.src.surface_height_y = pln->plane_size.surface_size.height;
|
||||
pipes[pipe_cnt].pipe.src.surface_width_c = pln->plane_size.chroma_size.width;
|
||||
|
|
|
@ -173,6 +173,8 @@ struct scaler_data {
|
|||
struct scaling_taps taps;
|
||||
struct rect viewport;
|
||||
struct rect viewport_c;
|
||||
struct rect viewport_unadjusted;
|
||||
struct rect viewport_c_unadjusted;
|
||||
struct rect recout;
|
||||
struct scaling_ratios ratios;
|
||||
struct scl_inits inits;
|
||||
|
|
Loading…
Reference in New Issue