mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-12 10:26:12 +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);
|
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)
|
static int opt_handler(int option, int option_index, void *data)
|
||||||
{
|
{
|
||||||
switch (option) {
|
switch (option) {
|
||||||
@ -3378,6 +3423,9 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
igt_subtest_f("%s-stridechange", feature_str(t.feature))
|
igt_subtest_f("%s-stridechange", feature_str(t.feature))
|
||||||
stridechange_subtest(&t);
|
stridechange_subtest(&t);
|
||||||
|
|
||||||
|
igt_subtest_f("%s-tilingchange", feature_str(t.feature))
|
||||||
|
tilingchange_subtest(&t);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (t.feature & FEATURE_PSR)
|
if (t.feature & FEATURE_PSR)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user