mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-11 01:46:14 +00:00
kms_frontbuffer_tracking: add tilingchange subtest
During the review of a recent FBC patch, Ville pointed a problem that happens when we use the page flip IOCTL to switch between buffers that have different tiling formats. This test should catch the problem introduced by that patch - which was not merged, by the way, so the test should be passing. Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
This commit is contained in:
parent
98bb8428b2
commit
d2a17f4bc4
@ -2989,6 +2989,51 @@ static void stridechange_subtest(const struct test_mode *t)
|
||||
igt_remove_fb(drm.fd, &new_fb);
|
||||
}
|
||||
|
||||
/**
|
||||
* tilingchange - alternate between tiled and untiled in multiple ways
|
||||
*
|
||||
* METHOD
|
||||
* This test alternates between tiled and untiled frontbuffers of the same
|
||||
* size and format through multiple different APIs: the page flip IOCTL,
|
||||
* normal modesets and the plane APIs.
|
||||
*
|
||||
* EXPECTED RESULTS
|
||||
* FBC gets properly disabled for the untiled FB and reenabled for the
|
||||
* tiled FB.
|
||||
*
|
||||
* FAILURES
|
||||
* Bad Kernels may somehow leave FBC enabled, which can cause FIFO underruns
|
||||
* that lead to CRC assertion failures.
|
||||
*/
|
||||
static void tilingchange_subtest(const struct test_mode *t)
|
||||
{
|
||||
struct igt_fb new_fb, *old_fb;
|
||||
struct modeset_params *params = pick_params(t);
|
||||
enum flip_type flip_type;
|
||||
|
||||
prepare_subtest(t, NULL);
|
||||
|
||||
old_fb = params->fb.fb;
|
||||
|
||||
create_fb(t->format, params->fb.fb->width, params->fb.fb->height,
|
||||
LOCAL_DRM_FORMAT_MOD_NONE, t->plane, &new_fb);
|
||||
fill_fb(&new_fb, COLOR_PRIM_BG);
|
||||
|
||||
for (flip_type = 0; flip_type < FLIP_COUNT; flip_type++) {
|
||||
igt_debug("Flip type: %d\n", flip_type);
|
||||
|
||||
/* Set a buffer with no tiling. */
|
||||
params->fb.fb = &new_fb;
|
||||
page_flip_for_params(params, flip_type);
|
||||
do_assertions(ASSERT_FBC_DISABLED);
|
||||
|
||||
/* Put FBC back in a working state. */
|
||||
params->fb.fb = old_fb;
|
||||
page_flip_for_params(params, flip_type);
|
||||
do_assertions(0);
|
||||
}
|
||||
}
|
||||
|
||||
static int opt_handler(int option, int option_index, void *data)
|
||||
{
|
||||
switch (option) {
|
||||
@ -3378,6 +3423,9 @@ int main(int argc, char *argv[])
|
||||
|
||||
igt_subtest_f("%s-stridechange", feature_str(t.feature))
|
||||
stridechange_subtest(&t);
|
||||
|
||||
igt_subtest_f("%s-tilingchange", feature_str(t.feature))
|
||||
tilingchange_subtest(&t);
|
||||
}
|
||||
|
||||
if (t.feature & FEATURE_PSR)
|
||||
|
Loading…
x
Reference in New Issue
Block a user