mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-10 17:36:11 +00:00
kms_flip: consolidate run_test_on_{crtc,crtc_pair}
No functional change. Signed-off-by: Imre Deak <imre.deak@intel.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
1ac94b50af
commit
13ef9e8d54
140
tests/kms_flip.c
140
tests/kms_flip.c
@ -1120,104 +1120,38 @@ static unsigned event_loop(struct test_output *o, unsigned duration_ms)
|
||||
return end - start;
|
||||
}
|
||||
|
||||
static void run_test_on_crtc(struct test_output *o, int crtc_idx, int duration_ms)
|
||||
{
|
||||
unsigned elapsed;
|
||||
|
||||
connector_find_preferred_mode(o->_connector[0], crtc_idx, o);
|
||||
if (!o->mode_valid)
|
||||
return;
|
||||
|
||||
last_connector = o->kconnector[0];
|
||||
|
||||
fprintf(stdout, "Beginning %s on crtc %d, connector %d\n",
|
||||
igt_subtest_name(), o->_crtc[0], o->_connector[0]);
|
||||
|
||||
if (o->flags & TEST_PAN)
|
||||
o->fb_width <<= 1;
|
||||
|
||||
o->fb_ids[0] = kmstest_create_fb(drm_fd, o->fb_width, o->fb_height,
|
||||
o->bpp, o->depth, false, &o->fb_info[0]);
|
||||
o->fb_ids[1] = kmstest_create_fb(drm_fd, o->fb_width, o->fb_height,
|
||||
o->bpp, o->depth, false, &o->fb_info[1]);
|
||||
o->fb_ids[2] = kmstest_create_fb(drm_fd, o->fb_width, o->fb_height,
|
||||
o->bpp, o->depth, true, &o->fb_info[2]);
|
||||
igt_assert(o->fb_ids[0]);
|
||||
igt_assert(o->fb_ids[1]);
|
||||
igt_assert(o->fb_ids[2]);
|
||||
|
||||
paint_flip_mode(&o->fb_info[0], false);
|
||||
paint_flip_mode(&o->fb_info[1], true);
|
||||
paint_flip_mode(&o->fb_info[2], true);
|
||||
|
||||
if (o->flags & TEST_FB_BAD_TILING)
|
||||
set_y_tiling(o, 2);
|
||||
|
||||
kmstest_dump_mode(&o->kmode[0]);
|
||||
if (set_mode(o, o->fb_ids[0], 0, 0)) {
|
||||
/* We may fail to apply the mode if there are hidden
|
||||
* constraints, such as bandwidth on the third pipe.
|
||||
*/
|
||||
igt_assert_f(crtc_idx < 2, "set_mode may only fail on the 3rd pipe\n");
|
||||
goto out;
|
||||
}
|
||||
igt_assert(fb_is_bound(o, o->fb_ids[0]));
|
||||
|
||||
/* quiescent the hw a bit so ensure we don't miss a single frame */
|
||||
if (o->flags & TEST_CHECK_TS)
|
||||
sleep(1);
|
||||
|
||||
igt_assert(do_page_flip(o, o->fb_ids[1], true) == 0);
|
||||
wait_for_events(o);
|
||||
|
||||
o->current_fb_id = 1;
|
||||
if (o->flags & TEST_FLIP)
|
||||
o->flip_state.seq_step = 1;
|
||||
else
|
||||
o->flip_state.seq_step = 0;
|
||||
if (o->flags & TEST_VBLANK)
|
||||
o->vblank_state.seq_step = 10;
|
||||
else
|
||||
o->vblank_state.seq_step = 0;
|
||||
|
||||
/* We run the vblank and flip actions in parallel by default. */
|
||||
o->seq_step = max(o->vblank_state.seq_step, o->flip_state.seq_step);
|
||||
|
||||
elapsed = event_loop(o, duration_ms);
|
||||
|
||||
if (o->flags & TEST_FLIP && !(o->flags & TEST_NOEVENT))
|
||||
check_final_state(o, &o->flip_state, elapsed);
|
||||
if (o->flags & TEST_VBLANK)
|
||||
check_final_state(o, &o->vblank_state, elapsed);
|
||||
|
||||
fprintf(stdout, "\n%s on crtc %d, connector %d: PASSED\n\n",
|
||||
igt_subtest_name(), o->_crtc[0], o->_connector[0]);
|
||||
|
||||
out:
|
||||
kmstest_remove_fb(drm_fd, &o->fb_info[2]);
|
||||
kmstest_remove_fb(drm_fd, &o->fb_info[1]);
|
||||
kmstest_remove_fb(drm_fd, &o->fb_info[0]);
|
||||
|
||||
last_connector = NULL;
|
||||
|
||||
drmModeFreeEncoder(o->kencoder[0]);
|
||||
drmModeFreeConnector(o->kconnector[0]);
|
||||
}
|
||||
|
||||
static void run_test_on_crtc_pair(struct test_output *o,
|
||||
int crtc_idx0, int crtc_idx1, int duration_ms)
|
||||
static void run_test_on_crtc_set(struct test_output *o, int *crtc_idxs,
|
||||
int crtc_count, int duration_ms)
|
||||
{
|
||||
char test_name[128];
|
||||
unsigned elapsed;
|
||||
int i;
|
||||
|
||||
connector_find_compatible_mode(crtc_idx0, crtc_idx1, o);
|
||||
switch (crtc_count) {
|
||||
case 1:
|
||||
connector_find_preferred_mode(o->_connector[0], crtc_idxs[0], o);
|
||||
snprintf(test_name, sizeof(test_name),
|
||||
"%s on crtc %d, connector %d",
|
||||
igt_subtest_name(), o->_crtc[0], o->_connector[0]);
|
||||
break;
|
||||
case 2:
|
||||
connector_find_compatible_mode(crtc_idxs[0], crtc_idxs[1], o);
|
||||
snprintf(test_name, sizeof(test_name),
|
||||
"%s on crtc %d:%d, connector %d:%d",
|
||||
igt_subtest_name(), o->_crtc[0], o->_crtc[1],
|
||||
o->_connector[0], o->_connector[1]);
|
||||
break;
|
||||
default:
|
||||
igt_assert(0);
|
||||
}
|
||||
if (!o->mode_valid)
|
||||
return;
|
||||
|
||||
igt_assert(o->count == crtc_count);
|
||||
|
||||
last_connector = o->kconnector[0];
|
||||
|
||||
fprintf(stdout, "Beginning %s on crtc %d:%d, connector %d:%d\n",
|
||||
igt_subtest_name(), o->_crtc[0], o->_crtc[1], o->_connector[0], o->_connector[1]);
|
||||
fprintf(stdout, "Beginning %s\n", test_name);
|
||||
|
||||
if (o->flags & TEST_PAN)
|
||||
o->fb_width *= 2;
|
||||
@ -1239,17 +1173,15 @@ static void run_test_on_crtc_pair(struct test_output *o,
|
||||
if (o->flags & TEST_FB_BAD_TILING)
|
||||
set_y_tiling(o, 2);
|
||||
|
||||
kmstest_dump_mode(&o->kmode[0]);
|
||||
kmstest_dump_mode(&o->kmode[1]);
|
||||
for (i = 0; i < o->count; i++)
|
||||
kmstest_dump_mode(&o->kmode[i]);
|
||||
|
||||
if (set_mode(o, o->fb_ids[0], 0, 0)) {
|
||||
/* We may fail to apply the mode if there are hidden
|
||||
* constraints, such as bandwidth on the third pipe.
|
||||
*/
|
||||
if (0) {
|
||||
fprintf(stderr, "failed to set mode (%dx%d@%dHz): %s\n",
|
||||
o->kmode[0].hdisplay, o->kmode[0].vdisplay, o->kmode[0].vrefresh,
|
||||
strerror(errno));
|
||||
}
|
||||
igt_assert_f(crtc_count > 1 || crtc_idxs[0] < 2,
|
||||
"set_mode may only fail on the 3rd pipe or in multiple crtc tests\n");
|
||||
goto out;
|
||||
}
|
||||
igt_assert(fb_is_bound(o, o->fb_ids[0]));
|
||||
@ -1281,8 +1213,7 @@ static void run_test_on_crtc_pair(struct test_output *o,
|
||||
if (o->flags & TEST_VBLANK)
|
||||
check_final_state(o, &o->vblank_state, elapsed);
|
||||
|
||||
fprintf(stdout, "\n%s on crtc %d:%d, connector %d:%d: PASSED\n\n",
|
||||
igt_subtest_name(), o->_crtc[0], o->_crtc[1], o->_connector[0], o->_connector[1]);
|
||||
fprintf(stdout, "\n%s: PASSED\n\n", test_name);
|
||||
|
||||
out:
|
||||
kmstest_remove_fb(drm_fd, &o->fb_info[2]);
|
||||
@ -1331,6 +1262,8 @@ static int run_test(int duration, int flags)
|
||||
/* Find any connected displays */
|
||||
for (i = 0; i < resources->count_connectors; i++) {
|
||||
for (n = 0; n < resources->count_crtcs; n++) {
|
||||
int crtc_idx;
|
||||
|
||||
memset(&o, 0, sizeof(o));
|
||||
o.count = 1;
|
||||
o._connector[0] = resources->connectors[i];
|
||||
@ -1340,7 +1273,8 @@ static int run_test(int duration, int flags)
|
||||
o.bpp = 32;
|
||||
o.depth = 24;
|
||||
|
||||
run_test_on_crtc(&o, n, duration);
|
||||
crtc_idx = n;
|
||||
run_test_on_crtc_set(&o, &crtc_idx, 1, duration);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1391,6 +1325,8 @@ static int run_pair(int duration, int flags)
|
||||
for (n = 0; n < resources->count_crtcs; n++) {
|
||||
for (j = i + 1; j < resources->count_connectors; j++) {
|
||||
for (m = n + 1; m < resources->count_crtcs; m++) {
|
||||
int crtc_idxs[2];
|
||||
|
||||
memset(&o, 0, sizeof(o));
|
||||
o.count = 2;
|
||||
o._connector[0] = resources->connectors[i];
|
||||
@ -1401,7 +1337,11 @@ static int run_pair(int duration, int flags)
|
||||
o.bpp = 32;
|
||||
o.depth = 24;
|
||||
|
||||
run_test_on_crtc_pair(&o, n, m, duration);
|
||||
crtc_idxs[0] = n;
|
||||
crtc_idxs[1] = m;
|
||||
|
||||
run_test_on_crtc_set(&o, crtc_idxs, 2,
|
||||
duration);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user