summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuha-Pekka Heikkila <juhapekka.heikkila@gmail.com>2020-02-17 22:03:23 +0200
committerJuha-Pekka Heikkila <juhapekka.heikkila@gmail.com>2020-02-21 13:00:25 +0200
commitf966f2715d2ee5f677bbc35f2944d391d35dbecf (patch)
treec0a563509d6c127bdebe66f804824312efffefd4
parent5d3062af9ed4780ff651bd9463b3355334cb74f7 (diff)
tests/kms_rotation_crc: limit maximum used plane size
It shouldn't make difference here if used maximum available screen resolution or something smaller. Something smaller is much faster so limit maximum size to 640x480. Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com> Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Acked-by: Martin Peres <martin.peres@linux.intel.com>
-rw-r--r--tests/kms_rotation_crc.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 2a7b10e9..3e789dc1 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -27,6 +27,8 @@
#define MAX_FENCES 32
#define MAXMULTIPLANESAMOUNT 2
+#define TEST_MAX_WIDTH 640
+#define TEST_MAX_HEIGHT 480
struct p_struct {
igt_plane_t *plane;
@@ -65,6 +67,8 @@ typedef struct {
struct p_struct *multiplaneoldview;
struct p_point planepos[MAXMULTIPLANESAMOUNT];
+
+ bool use_native_resolution;
} data_t;
typedef struct {
@@ -210,8 +214,13 @@ static void prepare_fbs(data_t *data, igt_output_t *output,
mode = igt_output_get_mode(output);
if (plane->type != DRM_PLANE_TYPE_CURSOR) {
- w = mode->hdisplay;
- h = mode->vdisplay;
+ if (data->use_native_resolution) {
+ w = mode->hdisplay;
+ h = mode->vdisplay;
+ } else {
+ w = min(TEST_MAX_WIDTH, mode->hdisplay);
+ h = min(TEST_MAX_HEIGHT, mode->vdisplay);
+ }
min_w = 256;
min_h = 256;
@@ -404,8 +413,14 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
/* Only support partial covering primary plane on gen9+ */
if (plane_type == DRM_PLANE_TYPE_PRIMARY &&
- i != rectangle && intel_gen(intel_get_drm_devid(data->gfx_fd)) < 9)
- continue;
+ intel_gen(intel_get_drm_devid(data->gfx_fd)) < 9) {
+ if (i != rectangle)
+ continue;
+ else
+ data->use_native_resolution = true;
+ } else {
+ data->use_native_resolution = false;
+ }
if (!data->override_fmt) {
for (j = 0; j < plane->drm_plane->count_formats; j++) {
@@ -493,7 +508,7 @@ static void pointlocation(data_t *data, planeinfos *p, drmModeModeInfo *mode,
int c)
{
if (data->planepos[c].origo & p_right) {
- p[c].x1 = (int32_t)(data->planepos[c].x * mode->hdisplay
+ p[c].x1 = (int32_t)(data->planepos[c].x * min(TEST_MAX_WIDTH, mode->hdisplay)
+ mode->hdisplay);
p[c].x1 &= ~3;
/*
@@ -504,17 +519,17 @@ static void pointlocation(data_t *data, planeinfos *p, drmModeModeInfo *mode,
*/
p[c].x1 -= mode->hdisplay & 2;
} else {
- p[c].x1 = (int32_t)(data->planepos[c].x * mode->hdisplay);
+ p[c].x1 = (int32_t)(data->planepos[c].x * min(TEST_MAX_WIDTH, mode->hdisplay));
p[c].x1 &= ~3;
}
if (data->planepos[c].origo & p_bottom) {
- p[c].y1 = (int32_t)(data->planepos[c].y * mode->vdisplay
+ p[c].y1 = (int32_t)(data->planepos[c].y * min(TEST_MAX_HEIGHT, mode->vdisplay)
+ mode->vdisplay);
p[c].y1 &= ~3;
p[c].y1 -= mode->vdisplay & 2;
} else {
- p[c].y1 = (int32_t)(data->planepos[c].y * mode->vdisplay);
+ p[c].y1 = (int32_t)(data->planepos[c].y * min(TEST_MAX_HEIGHT, mode->vdisplay));
p[c].y1 &= ~3;
}
}
@@ -530,7 +545,7 @@ static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
igt_output_t *output;
igt_crc_t retcrc_sw, retcrc_hw;
planeinfos p[2];
- int c;
+ int c, used_w, used_h;
struct p_struct *oldplanes;
drmModeModeInfo *mode;
@@ -568,14 +583,17 @@ static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
igt_display_require_output(display);
igt_display_commit2(display, COMMIT_ATOMIC);
+ used_w = min(TEST_MAX_WIDTH, mode->hdisplay);
+ used_h = min(TEST_MAX_HEIGHT, mode->vdisplay);
+
data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
INTEL_PIPE_CRC_SOURCE_AUTO);
igt_pipe_crc_start(data->pipe_crc);
for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
- p[0].width = (uint64_t)(planeconfigs[i].width * mode->hdisplay);
- p[0].height = (uint64_t)(planeconfigs[i].height * mode->vdisplay);
+ p[0].width = (uint64_t)(planeconfigs[i].width * used_w);
+ p[0].height = (uint64_t)(planeconfigs[i].height * used_h);
p[0].tiling = planeconfigs[i].tiling;
pointlocation(data, (planeinfos *)&p, mode, 0);
@@ -584,8 +602,8 @@ static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
- p[1].width = (uint64_t)(planeconfigs[j].width * mode->hdisplay);
- p[1].height = (uint64_t)(planeconfigs[j].height * mode->vdisplay);
+ p[1].width = (uint64_t)(planeconfigs[j].width * used_w);
+ p[1].height = (uint64_t)(planeconfigs[j].height * used_h);
p[1].tiling = planeconfigs[j].tiling;
pointlocation(data, (planeinfos *)&p,
mode, 1);