[igt-dev] [RFC PATCH v9 5/5] tests: gem_exec_basic: add "exec-ctx" buffer execution demo test

Andi Shyti via igt-dev
2019-02-14T00:45:02Z

The "exec-ctx" is a demo subtest inserted in the gem_exec_basic
test. The main goal is to reach the engines by using
the new uapi interfacing with igt_require_gem_engine_list().

The "exec-ctx" subtest simply gets the list of engines, binds
them to a context and executes a buffer. This is done through a
new "for_each_engine2" loop which iterates through the
engines.

Signed-off-by: Andi Shyti <andi.shyti@intel.com>
---
Hi Chris,

one note on this. You didn't like the explicit iterator in the
for_each, while for me it makes quite sense to have it explicit
rather than hidden because, as I said in the previous review, the
user might want to use it.

At the end, we iterate for the iterating value, e.g. we do

for (i = 0; i < N; i++)
...

because we are interested in 'i' (of course, not always, but most
of the cases), at the same way we might be interested to the e2
value.

If we really want to hide e2, I would rather call it
for_each_mapped_idx() or similar.

Andi

tests/i915/gem_exec_basic.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)

diff --git a/tests/i915/gem_exec_basic.c b/tests/i915/gem_exec_basic.c
index dcb83864b1c1..a26eaff1cfe8 100644
--- a/tests/i915/gem_exec_basic.c
+++ b/tests/i915/gem_exec_basic.c
@@ -135,6 +135,21 @@ igt_main
gtt(fd, e->exec_id | e->flags);
}

+ igt_subtest("exec-ctx") {
+ uint32_t ctx_id;
+ struct intel_execution_engine2 *e2;
+ int index_map = 0;
+
+ igt_require_gem_engine_list(fd);
+ ctx_id = gem_context_create(fd);
+
+ for_each_engine2(fd, ctx_id, e2)
+ igt_assert(gem_context_has_engine(fd, ++index_map,
+ ctx_id));
+
+ gem_context_destroy(fd, ctx_id);
+ }
+
igt_fixture {
igt_stop_hang_detector();
close(fd);
--
2.20.1