mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-12 02:16:17 +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;
|
return end - start;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void run_test_on_crtc(struct test_output *o, int crtc_idx, int duration_ms)
|
static void run_test_on_crtc_set(struct test_output *o, int *crtc_idxs,
|
||||||
{
|
int crtc_count, 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)
|
|
||||||
{
|
{
|
||||||
|
char test_name[128];
|
||||||
unsigned elapsed;
|
unsigned elapsed;
|
||||||
int i;
|
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)
|
if (!o->mode_valid)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
igt_assert(o->count == crtc_count);
|
||||||
|
|
||||||
last_connector = o->kconnector[0];
|
last_connector = o->kconnector[0];
|
||||||
|
|
||||||
fprintf(stdout, "Beginning %s on crtc %d:%d, connector %d:%d\n",
|
fprintf(stdout, "Beginning %s\n", test_name);
|
||||||
igt_subtest_name(), o->_crtc[0], o->_crtc[1], o->_connector[0], o->_connector[1]);
|
|
||||||
|
|
||||||
if (o->flags & TEST_PAN)
|
if (o->flags & TEST_PAN)
|
||||||
o->fb_width *= 2;
|
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)
|
if (o->flags & TEST_FB_BAD_TILING)
|
||||||
set_y_tiling(o, 2);
|
set_y_tiling(o, 2);
|
||||||
|
|
||||||
kmstest_dump_mode(&o->kmode[0]);
|
for (i = 0; i < o->count; i++)
|
||||||
kmstest_dump_mode(&o->kmode[1]);
|
kmstest_dump_mode(&o->kmode[i]);
|
||||||
|
|
||||||
if (set_mode(o, o->fb_ids[0], 0, 0)) {
|
if (set_mode(o, o->fb_ids[0], 0, 0)) {
|
||||||
/* We may fail to apply the mode if there are hidden
|
/* We may fail to apply the mode if there are hidden
|
||||||
* constraints, such as bandwidth on the third pipe.
|
* constraints, such as bandwidth on the third pipe.
|
||||||
*/
|
*/
|
||||||
if (0) {
|
igt_assert_f(crtc_count > 1 || crtc_idxs[0] < 2,
|
||||||
fprintf(stderr, "failed to set mode (%dx%d@%dHz): %s\n",
|
"set_mode may only fail on the 3rd pipe or in multiple crtc tests\n");
|
||||||
o->kmode[0].hdisplay, o->kmode[0].vdisplay, o->kmode[0].vrefresh,
|
|
||||||
strerror(errno));
|
|
||||||
}
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
igt_assert(fb_is_bound(o, o->fb_ids[0]));
|
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)
|
if (o->flags & TEST_VBLANK)
|
||||||
check_final_state(o, &o->vblank_state, elapsed);
|
check_final_state(o, &o->vblank_state, elapsed);
|
||||||
|
|
||||||
fprintf(stdout, "\n%s on crtc %d:%d, connector %d:%d: PASSED\n\n",
|
fprintf(stdout, "\n%s: PASSED\n\n", test_name);
|
||||||
igt_subtest_name(), o->_crtc[0], o->_crtc[1], o->_connector[0], o->_connector[1]);
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
kmstest_remove_fb(drm_fd, &o->fb_info[2]);
|
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 */
|
/* Find any connected displays */
|
||||||
for (i = 0; i < resources->count_connectors; i++) {
|
for (i = 0; i < resources->count_connectors; i++) {
|
||||||
for (n = 0; n < resources->count_crtcs; n++) {
|
for (n = 0; n < resources->count_crtcs; n++) {
|
||||||
|
int crtc_idx;
|
||||||
|
|
||||||
memset(&o, 0, sizeof(o));
|
memset(&o, 0, sizeof(o));
|
||||||
o.count = 1;
|
o.count = 1;
|
||||||
o._connector[0] = resources->connectors[i];
|
o._connector[0] = resources->connectors[i];
|
||||||
@ -1340,7 +1273,8 @@ static int run_test(int duration, int flags)
|
|||||||
o.bpp = 32;
|
o.bpp = 32;
|
||||||
o.depth = 24;
|
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 (n = 0; n < resources->count_crtcs; n++) {
|
||||||
for (j = i + 1; j < resources->count_connectors; j++) {
|
for (j = i + 1; j < resources->count_connectors; j++) {
|
||||||
for (m = n + 1; m < resources->count_crtcs; m++) {
|
for (m = n + 1; m < resources->count_crtcs; m++) {
|
||||||
|
int crtc_idxs[2];
|
||||||
|
|
||||||
memset(&o, 0, sizeof(o));
|
memset(&o, 0, sizeof(o));
|
||||||
o.count = 2;
|
o.count = 2;
|
||||||
o._connector[0] = resources->connectors[i];
|
o._connector[0] = resources->connectors[i];
|
||||||
@ -1401,7 +1337,11 @@ static int run_pair(int duration, int flags)
|
|||||||
o.bpp = 32;
|
o.bpp = 32;
|
||||||
o.depth = 24;
|
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