summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/i915/gem_ppgtt.c55
1 files changed, 39 insertions, 16 deletions
diff --git a/tests/i915/gem_ppgtt.c b/tests/i915/gem_ppgtt.c
index c2e4ca67..11ca31e7 100644
--- a/tests/i915/gem_ppgtt.c
+++ b/tests/i915/gem_ppgtt.c
@@ -85,7 +85,9 @@ static void scratch_buf_fini(struct igt_buf *buf)
memset(buf, 0, sizeof(*buf));
}
-static void fork_rcs_copy(int target, drm_intel_bo **dst, int count, unsigned flags)
+static void fork_rcs_copy(int timeout, uint32_t final,
+ drm_intel_bo **dst, int count,
+ unsigned flags)
#define CREATE_CONTEXT 0x1
{
igt_render_copyfunc_t render_copy;
@@ -117,6 +119,8 @@ static void fork_rcs_copy(int target, drm_intel_bo **dst, int count, unsigned fl
igt_fork(child, count) {
struct intel_batchbuffer *batch;
struct igt_buf buf = {};
+ struct igt_buf src;
+ unsigned long i;
batch = intel_batchbuffer_alloc(dst[child]->bufmgr,
devid);
@@ -135,23 +139,29 @@ static void fork_rcs_copy(int target, drm_intel_bo **dst, int count, unsigned fl
buf.size = SIZE;
buf.bpp = 32;
- for (int i = 0; i <= target; i++) {
- struct igt_buf src;
-
+ i = 0;
+ igt_until_timeout(timeout) {
scratch_buf_init(&src, dst[child]->bufmgr,
- i | child << 16);
-
+ i++ | child << 16);
render_copy(batch, NULL,
&src, 0, 0,
WIDTH, HEIGHT,
&buf, 0, 0);
-
scratch_buf_fini(&src);
}
+
+ scratch_buf_init(&src, dst[child]->bufmgr,
+ final | child << 16);
+ render_copy(batch, NULL,
+ &src, 0, 0,
+ WIDTH, HEIGHT,
+ &buf, 0, 0);
+ scratch_buf_fini(&src);
}
}
-static void fork_bcs_copy(int target, drm_intel_bo **dst, int count)
+static void fork_bcs_copy(int timeout, uint32_t final,
+ drm_intel_bo **dst, int count)
{
int devid;
@@ -169,18 +179,20 @@ static void fork_bcs_copy(int target, drm_intel_bo **dst, int count)
igt_fork(child, count) {
struct intel_batchbuffer *batch;
+ drm_intel_bo *src[2];
+ unsigned long i;
+
batch = intel_batchbuffer_alloc(dst[child]->bufmgr,
devid);
igt_assert(batch);
- for (int i = 0; i <= target; i++) {
- drm_intel_bo *src[2];
-
+ i = 0;
+ igt_until_timeout(timeout) {
src[0] = create_bo(dst[child]->bufmgr,
~0);
src[1] = create_bo(dst[child]->bufmgr,
- i | child << 16);
+ i++ | child << 16);
intel_copy_bo(batch, src[0], src[1], SIZE);
intel_copy_bo(batch, dst[child], src[0], SIZE);
@@ -188,6 +200,17 @@ static void fork_bcs_copy(int target, drm_intel_bo **dst, int count)
drm_intel_bo_unreference(src[1]);
drm_intel_bo_unreference(src[0]);
}
+
+ src[0] = create_bo(dst[child]->bufmgr,
+ ~0);
+ src[1] = create_bo(dst[child]->bufmgr,
+ final | child << 16);
+
+ intel_copy_bo(batch, src[0], src[1], SIZE);
+ intel_copy_bo(batch, dst[child], src[0], SIZE);
+
+ drm_intel_bo_unreference(src[1]);
+ drm_intel_bo_unreference(src[0]);
}
}
@@ -314,8 +337,8 @@ int main(int argc, char **argv)
igt_subtest("blt-vs-render-ctx0") {
drm_intel_bo *bcs[1], *rcs[N_CHILD];
- fork_bcs_copy(0x4000, bcs, 1);
- fork_rcs_copy(0x8000 / N_CHILD, rcs, N_CHILD, 0);
+ fork_bcs_copy(30, 0x4000, bcs, 1);
+ fork_rcs_copy(30, 0x8000 / N_CHILD, rcs, N_CHILD, 0);
igt_waitchildren();
@@ -326,8 +349,8 @@ int main(int argc, char **argv)
igt_subtest("blt-vs-render-ctxN") {
drm_intel_bo *bcs[1], *rcs[N_CHILD];
- fork_rcs_copy(0x8000 / N_CHILD, rcs, N_CHILD, CREATE_CONTEXT);
- fork_bcs_copy(0x4000, bcs, 1);
+ fork_rcs_copy(30, 0x8000 / N_CHILD, rcs, N_CHILD, CREATE_CONTEXT);
+ fork_bcs_copy(30, 0x4000, bcs, 1);
igt_waitchildren();