mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-05 20:04:31 -05:00
drm/amd/display: Align phantom pipe dst/src scaling with main for subvp
[WHY?] Subvp src/dst stream rectangles are not being created with the same scaling factors as the main stream. [HOW?] Make sure subvp stream src rectangle scales its height to have the same src/dst ratio as the main stream. Reviewed-by: Alvin Lee <Alvin.Lee2@amd.com> Reviewed-by: Jun Lei <Jun.Lei@amd.com> Acked-by: Tom Chung <chiahsuan.chung@amd.com> Signed-off-by: Dillon Varone <Dillon.Varone@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
31494626ce
commit
7dcc3fcf01
@@ -1680,7 +1680,7 @@ static void dcn32_enable_phantom_plane(struct dc *dc,
|
||||
|
||||
/* Shadow pipe has small viewport. */
|
||||
phantom_plane->clip_rect.y = 0;
|
||||
phantom_plane->clip_rect.height = phantom_stream->timing.v_addressable;
|
||||
phantom_plane->clip_rect.height = phantom_stream->src.height;
|
||||
|
||||
phantom_plane->is_phantom = true;
|
||||
|
||||
|
||||
@@ -536,6 +536,7 @@ void dcn32_set_phantom_stream_timing(struct dc *dc,
|
||||
unsigned int dcfclk = context->bw_ctx.dml.vba.DCFCLKState[vlevel][context->bw_ctx.dml.vba.maxMpcComb];
|
||||
unsigned int socclk = context->bw_ctx.dml.vba.SOCCLKPerState[vlevel];
|
||||
struct vba_vars_st *vba = &context->bw_ctx.dml.vba;
|
||||
struct dc_stream_state *main_stream = ref_pipe->stream;
|
||||
|
||||
dc_assert_fp_enabled();
|
||||
|
||||
@@ -581,8 +582,13 @@ void dcn32_set_phantom_stream_timing(struct dc *dc,
|
||||
|
||||
phantom_stream->dst.y = 0;
|
||||
phantom_stream->dst.height = phantom_vactive;
|
||||
/* When scaling, DML provides the end to end required number of lines for MALL.
|
||||
* dst.height is always correct for this case, but src.height is not which causes a
|
||||
* delta between main and phantom pipe scaling outputs. Need to adjust src.height on
|
||||
* phantom for this case.
|
||||
*/
|
||||
phantom_stream->src.y = 0;
|
||||
phantom_stream->src.height = phantom_vactive;
|
||||
phantom_stream->src.height = (double)phantom_vactive * (double)main_stream->src.height / (double)main_stream->dst.height;
|
||||
|
||||
phantom_stream->timing.v_addressable = phantom_vactive;
|
||||
phantom_stream->timing.v_front_porch = 1;
|
||||
|
||||
Reference in New Issue
Block a user