drm/amd/display: Align phantom pipe dst/src scaling with main for subvp
authorDillon Varone <Dillon.Varone@amd.com>
Wed, 2 Nov 2022 19:28:47 +0000 (15:28 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Nov 2022 18:35:14 +0000 (13:35 -0500)
[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>
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c

index ae52935ecd5d91b987b6bd3d018a46f9905ef3e8..62817301aae41c2d34890986542eae2a23339bf0 100644 (file)
@@ -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;
 
index f359f3edaf36227549f5ea1d22942977176ae8e3..51b4b1d0ba99dc599d08493fc44a2ee5d9adb7ca 100644 (file)
@@ -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;