mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-22 15:26:21 +00:00
tests/kms_fbc_crc: Allow the subtests to pass even if some planes aren't FBC capable
Don't skip the entire subtest if FBC only works on some of the primary planes, as is the case on pre-gen4 and hsw+. Only skip the entire subtest if all crtc/connector combinations skip. Also print some kind of status for all otherwise valid crtc/connector combos if they skip due to FBC being disabled or CRC support not being there. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
This commit is contained in:
parent
66d5f092d4
commit
f85fff0de6
@ -66,6 +66,7 @@ typedef struct {
|
||||
uint32_t crtc_id;
|
||||
uint32_t crtc_idx;
|
||||
uint32_t fb_id[2];
|
||||
connector_t connector;
|
||||
} data_t;
|
||||
|
||||
static const char *test_mode_str(enum test_mode mode)
|
||||
@ -108,9 +109,9 @@ static uint32_t create_fb(data_t *data,
|
||||
}
|
||||
|
||||
static bool
|
||||
connector_set_mode(data_t *data, connector_t *connector,
|
||||
drmModeModeInfo *mode, uint32_t fb_id)
|
||||
connector_set_mode(data_t *data, drmModeModeInfo *mode, uint32_t fb_id)
|
||||
{
|
||||
connector_t *connector = &data->connector;
|
||||
struct kmstest_connector_config *config = &connector->config;
|
||||
int ret;
|
||||
|
||||
@ -335,19 +336,45 @@ static void test_crc(data_t *data, enum test_mode mode)
|
||||
free(crcs);
|
||||
}
|
||||
|
||||
static bool prepare_crtc(data_t *data, uint32_t connector_id, enum test_mode mode)
|
||||
static bool prepare_crtc(data_t *data, uint32_t connector_id)
|
||||
{
|
||||
igt_pipe_crc_t *pipe_crc;
|
||||
igt_crc_t *crcs = NULL;
|
||||
connector_t connector;
|
||||
int ret;
|
||||
|
||||
ret = kmstest_get_connector_config(data->drm_fd,
|
||||
return !kmstest_get_connector_config(data->drm_fd,
|
||||
connector_id,
|
||||
1 << data->crtc_idx,
|
||||
&connector.config);
|
||||
if (ret)
|
||||
&data->connector.config);
|
||||
}
|
||||
|
||||
static bool prepare_test(data_t *data, enum test_mode mode)
|
||||
{
|
||||
connector_t *connector = &data->connector;
|
||||
igt_pipe_crc_t *pipe_crc;
|
||||
igt_crc_t *crcs = NULL;
|
||||
|
||||
data->fb_id[0] = create_fb(data,
|
||||
connector->config.default_mode.hdisplay,
|
||||
connector->config.default_mode.vdisplay,
|
||||
0.0, 0.0, 0.0, &connector->fb[0]);
|
||||
igt_assert(data->fb_id[0]);
|
||||
|
||||
data->fb_id[1] = create_fb(data,
|
||||
connector->config.default_mode.hdisplay,
|
||||
connector->config.default_mode.vdisplay,
|
||||
0.1, 0.1, 0.1, &connector->fb[1]);
|
||||
igt_assert(data->fb_id[1]);
|
||||
|
||||
data->handle[0] = connector->fb[0].gem_handle;
|
||||
data->handle[1] = connector->fb[1].gem_handle;
|
||||
|
||||
/* scanout = fb[1] */
|
||||
connector_set_mode(data, &connector->config.default_mode,
|
||||
data->fb_id[1]);
|
||||
usleep(300000);
|
||||
|
||||
if (!fbc_enabled(data)) {
|
||||
printf("FBC not enabled\n");
|
||||
kmstest_free_connector_config(&connector->config);
|
||||
return false;
|
||||
}
|
||||
|
||||
igt_pipe_crc_free(data->pipe_crc[data->crtc_idx]);
|
||||
data->pipe_crc[data->crtc_idx] = NULL;
|
||||
@ -357,33 +384,12 @@ static bool prepare_crtc(data_t *data, uint32_t connector_id, enum test_mode mod
|
||||
if (!pipe_crc) {
|
||||
printf("auto crc not supported on this connector with crtc %i\n",
|
||||
data->crtc_idx);
|
||||
kmstest_free_connector_config(&connector->config);
|
||||
return false;
|
||||
}
|
||||
|
||||
data->pipe_crc[data->crtc_idx] = pipe_crc;
|
||||
|
||||
data->fb_id[0] = create_fb(data,
|
||||
connector.config.default_mode.hdisplay,
|
||||
connector.config.default_mode.vdisplay,
|
||||
0.0, 0.0, 0.0, &connector.fb[0]);
|
||||
igt_assert(data->fb_id[0]);
|
||||
|
||||
data->fb_id[1] = create_fb(data,
|
||||
connector.config.default_mode.hdisplay,
|
||||
connector.config.default_mode.vdisplay,
|
||||
0.1, 0.1, 0.1, &connector.fb[1]);
|
||||
igt_assert(data->fb_id[1]);
|
||||
|
||||
data->handle[0] = connector.fb[0].gem_handle;
|
||||
data->handle[1] = connector.fb[1].gem_handle;
|
||||
|
||||
/* scanout = fb[1] */
|
||||
connector_set_mode(data, &connector, &connector.config.default_mode,
|
||||
data->fb_id[1]);
|
||||
usleep(300000);
|
||||
|
||||
igt_skip_on(!fbc_enabled(data));
|
||||
|
||||
igt_wait_for_vblank(data->drm_fd, data->crtc_idx);
|
||||
|
||||
/* get reference crc for fb[1] */
|
||||
@ -410,18 +416,18 @@ static bool prepare_crtc(data_t *data, uint32_t connector_id, enum test_mode mod
|
||||
}
|
||||
|
||||
/* scanout = fb[0] */
|
||||
connector_set_mode(data, &connector, &connector.config.default_mode,
|
||||
connector_set_mode(data, &connector->config.default_mode,
|
||||
data->fb_id[0]);
|
||||
usleep(300000);
|
||||
|
||||
igt_skip_on(!fbc_enabled(data));
|
||||
igt_assert(fbc_enabled(data));
|
||||
|
||||
if (mode == TEST_CONTEXT || mode == TEST_PAGE_FLIP_AND_CONTEXT) {
|
||||
/*
|
||||
* make ctx[0] FBC RT address point to fb[0], ctx[1]
|
||||
* FBC RT address is left as disabled.
|
||||
*/
|
||||
exec_nop(data, connector.fb[0].gem_handle, data->ctx[0]);
|
||||
exec_nop(data, connector->fb[0].gem_handle, data->ctx[0]);
|
||||
}
|
||||
|
||||
igt_wait_for_vblank(data->drm_fd, data->crtc_idx);
|
||||
@ -433,7 +439,7 @@ static bool prepare_crtc(data_t *data, uint32_t connector_id, enum test_mode mod
|
||||
igt_pipe_crc_stop(pipe_crc);
|
||||
free(crcs);
|
||||
|
||||
kmstest_free_connector_config(&connector.config);
|
||||
kmstest_free_connector_config(&connector->config);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -452,6 +458,7 @@ static void finish_crtc(data_t *data, enum test_mode mode)
|
||||
static void run_test(data_t *data, enum test_mode mode)
|
||||
{
|
||||
int i, n;
|
||||
int valid_tests = 0;
|
||||
|
||||
for (i = 0; i < data->resources->count_connectors; i++) {
|
||||
uint32_t connector_id = data->resources->connectors[i];
|
||||
@ -460,19 +467,30 @@ static void run_test(data_t *data, enum test_mode mode)
|
||||
data->crtc_idx = n;
|
||||
data->crtc_id = data->resources->crtcs[n];
|
||||
|
||||
if (!prepare_crtc(data, connector_id, mode))
|
||||
if (!prepare_crtc(data, connector_id))
|
||||
continue;
|
||||
|
||||
fprintf(stdout, "Beginning %s on crtc %d, connector %d\n",
|
||||
igt_subtest_name(), data->crtc_id, connector_id);
|
||||
|
||||
if (!prepare_test(data, mode)) {
|
||||
fprintf(stdout, "%s on crtc %d, connector %d: SKIPPED\n",
|
||||
igt_subtest_name(), data->crtc_id, connector_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
valid_tests++;
|
||||
|
||||
test_crc(data, mode);
|
||||
|
||||
fprintf(stdout, "\n%s on crtc %d, connector %d: PASSED\n\n",
|
||||
fprintf(stdout, "%s on crtc %d, connector %d: PASSED\n",
|
||||
igt_subtest_name(), data->crtc_id, connector_id);
|
||||
|
||||
finish_crtc(data, mode);
|
||||
}
|
||||
}
|
||||
|
||||
igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
|
||||
}
|
||||
|
||||
igt_main
|
||||
|
Loading…
x
Reference in New Issue
Block a user