From: Dillon Varone <dillon.var...@amd.com>

[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.l...@amd.com>
Reviewed-by: Jun Lei <jun....@amd.com>
Acked-by: Tom Chung <chiahsuan.ch...@amd.com>
Signed-off-by: Dillon Varone <dillon.var...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c | 2 +-
 drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c  | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c 
b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
index 08d3c9d9b251..f6c3a2f7a228 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
@@ -1679,7 +1679,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;
 
diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c 
b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
index f359f3edaf36..51b4b1d0ba99 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
@@ -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;
-- 
2.25.1

Reply via email to