mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-10 09:26:10 +00:00
kms_frontbuffer_tracking: add farfromfence subtest
Make sure we notice in case our crtc->y handling is still wrong. Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
This commit is contained in:
parent
cb3861a9e3
commit
04d1311fc3
@ -2248,6 +2248,72 @@ static void modesetfrombusy_subtest(const struct test_mode *t)
|
||||
igt_remove_fb(drm.fd, &fb2);
|
||||
}
|
||||
|
||||
/**
|
||||
* farfromfence - test drawing as far from the fence start as possible
|
||||
*
|
||||
* METHOD
|
||||
* One of the possible problems with FBC is that if the mode being displayed
|
||||
* is very far away from the fence we might setup the hardware frontbuffer
|
||||
* tracking in the wrong way. So this test tries to set a really tall FB,
|
||||
* makes the CRTC point to the bottom of that FB, then it tries to exercise
|
||||
* the hardware frontbuffer tracking through GTT mmap operations.
|
||||
*
|
||||
* EXPECTED RESULTS
|
||||
* Everything succeeds.
|
||||
*
|
||||
* FAILURES
|
||||
* If you're getting wrong CRC calulations, then the hardware tracking might
|
||||
* be misconfigured and needs to be checked. If we're failing because FBC is
|
||||
* disabled and the reason is that there's not enough stolen memory, then the
|
||||
* Kernel might be calculating the amount of stolen memory needed based on the
|
||||
* whole framebuffer size, and not just on the needed size: in this case, you
|
||||
* need a newer Kernel.
|
||||
*/
|
||||
static void farfromfence_subtest(const struct test_mode *t)
|
||||
{
|
||||
int r;
|
||||
struct igt_fb tall_fb;
|
||||
struct modeset_params *params = pick_params(t);
|
||||
struct draw_pattern_info *pattern = &pattern1;
|
||||
struct fb_region *target;
|
||||
int max_height;
|
||||
|
||||
switch (intel_gen(intel_get_drm_devid(drm.fd))) {
|
||||
case 2:
|
||||
max_height = 2048;
|
||||
break;
|
||||
case 3:
|
||||
max_height = 4096;
|
||||
break;
|
||||
default:
|
||||
max_height = 8192;
|
||||
break;
|
||||
}
|
||||
|
||||
prepare_subtest(t, pattern);
|
||||
target = pick_target(t, params);
|
||||
|
||||
igt_create_fb(drm.fd, params->mode->hdisplay, max_height,
|
||||
DRM_FORMAT_XRGB8888, LOCAL_I915_FORMAT_MOD_X_TILED,
|
||||
&tall_fb);
|
||||
|
||||
igt_draw_fill_fb(drm.fd, &tall_fb, 0xFF);
|
||||
|
||||
params->fb.fb = &tall_fb;
|
||||
params->fb.x = 0;
|
||||
params->fb.y = max_height - params->mode->vdisplay;
|
||||
set_mode_for_params(params);
|
||||
do_assertions(0);
|
||||
|
||||
for (r = 0; r < pattern->n_rects; r++) {
|
||||
draw_rect(pattern, target, t->method, r);
|
||||
update_wanted_crc(t, &pattern->crcs[r]);
|
||||
do_assertions(0);
|
||||
}
|
||||
|
||||
igt_remove_fb(drm.fd, &tall_fb);
|
||||
}
|
||||
|
||||
static void try_invalid_strides(void)
|
||||
{
|
||||
uint32_t gem_handle;
|
||||
@ -2615,6 +2681,22 @@ int main(int argc, char *argv[])
|
||||
multidraw_subtest(&t);
|
||||
TEST_MODE_ITER_END
|
||||
|
||||
TEST_MODE_ITER_BEGIN(t)
|
||||
if (t.pipes != PIPE_SINGLE)
|
||||
continue;
|
||||
if (t.screen != SCREEN_PRIM)
|
||||
continue;
|
||||
if (t.plane != PLANE_PRI)
|
||||
continue;
|
||||
if (t.fbs != FBS_INDIVIDUAL)
|
||||
continue;
|
||||
if (t.method != IGT_DRAW_MMAP_GTT)
|
||||
continue;
|
||||
|
||||
igt_subtest_f("%s-farfromfence", feature_str(t.feature))
|
||||
farfromfence_subtest(&t);
|
||||
TEST_MODE_ITER_END
|
||||
|
||||
TEST_MODE_ITER_BEGIN(t)
|
||||
if (t.pipes != PIPE_SINGLE)
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user