summaryrefslogtreecommitdiff
path: root/tests/amdgpu
diff options
context:
space:
mode:
authorDavid Zhang <dingchen.zhang@amd.com>2022-05-09 22:41:08 -0400
committerDavid Zhang <dingchen.zhang@amd.com>2022-05-10 13:23:54 -0400
commit5217d24bab74048e1b2e1d177c820ca81615c967 (patch)
tree59a9e639ae7e3ef12eb53dde8c67808044df57ac /tests/amdgpu
parent93fa4422bd91c47fbc5699efa3725287a7754699 (diff)
tests/amdgpu/amd_psr: some fix for PSR-SU MPO test case
[why] Analogous to usermode behavior, when there are primary plane and overlay plane committed, alpha region of overlay corresponding to the primary plane position/size should be set to zero to explicitly display the content of primary plane (emulated as video playback in this test case) in general. The input arguments of width/height of the helper to paint the framebuffer should not exceed the size of the created framebuffer. [how] - set the alpha region of overlay plane framebuffer to zero aligned to the position/size of the primary plane - paint the primary plane framebuffer background/foreground w/ the valid width/height. Cc: Rodrigo Siqueira <rodrigo.siqueira@amd.com> Cc: Harry Wentland <harry.wentland@amd.com> Cc: Leo Li <sunpeng.li@amd.com> Cc: Jay Pillai <aurabindo.pillai@amd.com> Cc: Wayne Lin <wayne.lin@amd.com> changes in v2: ------------------ - correct the word "toplay" and replace w/ "overlay" to make it more clear and accurate Signed-off-by: David Zhang <dingchen.zhang@amd.com> Reviewed-by: Leo Li <sunpeng.li@amd.com>
Diffstat (limited to 'tests/amdgpu')
-rw-r--r--tests/amdgpu/amd_psr.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/tests/amdgpu/amd_psr.c b/tests/amdgpu/amd_psr.c
index b930b20e..de12bd04 100644
--- a/tests/amdgpu/amd_psr.c
+++ b/tests/amdgpu/amd_psr.c
@@ -351,9 +351,9 @@ static void run_check_psr_su_mpo(data_t *data)
cr = igt_get_cairo_ctx(data->fd, &rect_fb[i]);
igt_assert_f(cr, "Failed to get cairo context\n");
/* background in black */
- igt_paint_color(cr, 0, 0, data->w, data->h, .0, .0, .0);
+ igt_paint_color(cr, 0, 0, data->w / 2, data->h / 2, .0, .0, .0);
/* foreground (megenta strip) */
- igt_paint_color(cr, i * strip_w, 0, strip_w, data->h, 1.0, .0, 1.0);
+ igt_paint_color(cr, i * strip_w, 0, strip_w, data->h / 2, 1.0, .0, 1.0);
igt_put_cairo_ctx(cr);
}
@@ -364,8 +364,18 @@ static void run_check_psr_su_mpo(data_t *data)
igt_plane_set_position(data->primary, 0, 0);
igt_plane_set_size(data->primary, data->w / 2, data->h / 2);
- /* adjust alpha for vpb (primary plane) region in overlay */
- draw_color_alpha(&ov_fb, 0, 0, data->w / 2, data->h / 2, .5, .5, .5, .3);
+ /**
+ * adjust alpha for vpb (primary plane) region in overlay.
+ * given alpha, we have below formula:
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * blended = alpha * overlay + (1 - alpha) * underlay
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * since primary plane is underlay while overlay plane is overlay,
+ * to display the content of primary plane w/ blending, we'd set
+ * the alpha of each pixel in overlay corresponding to primary plane
+ * position/size to be zero.
+ */
+ draw_color_alpha(&ov_fb, 0, 0, data->w / 2, data->h / 2, .5, .5, .5, .0);
igt_output_set_pipe(data->output, data->pipe_id);
igt_display_commit_atomic(&data->display, 0, NULL);