summaryrefslogtreecommitdiff
path: root/tests/prime_vgem.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-07-18 10:25:24 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2016-07-18 10:50:50 +0100
commit8cca110eacb8248d81c755b120b3d9717fd533d1 (patch)
tree5c6b12347e4a9a7520e308f851f844db14d3c381 /tests/prime_vgem.c
parent3d8f55c3e0b4545a6385a44094a70e68e071a49c (diff)
igt/prime_vgem: Check for fence wait before gem_read()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/prime_vgem.c')
-rw-r--r--tests/prime_vgem.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/prime_vgem.c b/tests/prime_vgem.c
index a1541dac..5bd13cda 100644
--- a/tests/prime_vgem.c
+++ b/tests/prime_vgem.c
@@ -58,6 +58,44 @@ static void test_read(int vgem, int i915)
gem_close(i915, handle);
}
+static void test_fence_read(int vgem, int i915)
+{
+ struct vgem_bo scratch;
+ uint32_t handle;
+ uint32_t *ptr;
+ uint32_t fence;
+ int dmabuf, i;
+
+ scratch.width = 1024;
+ scratch.height = 1024;
+ scratch.bpp = 32;
+ vgem_create(vgem, &scratch);
+
+ dmabuf = prime_handle_to_fd(vgem, scratch.handle);
+ handle = prime_fd_to_handle(i915, dmabuf);
+ close(dmabuf);
+
+ fence = vgem_fence_attach(vgem, &scratch, VGEM_FENCE_WRITE);
+
+ igt_fork(child, 1) {
+ for (i = 0; i < 1024; i++) {
+ uint32_t tmp;
+ gem_read(i915, handle, 4096*i, &tmp, sizeof(tmp));
+ igt_assert_eq(tmp, i);
+ }
+ gem_close(i915, handle);
+ }
+
+ ptr = vgem_mmap(vgem, &scratch, PROT_WRITE);
+ for (i = 0; i < 1024; i++)
+ ptr[1024*i] = i;
+ munmap(ptr, scratch.size);
+ vgem_fence_signal(vgem, fence);
+ gem_close(vgem, scratch.handle);
+
+ igt_waitchildren();
+}
+
static void test_write(int vgem, int i915)
{
struct vgem_bo scratch;
@@ -625,6 +663,9 @@ igt_main
igt_require(vgem_has_fences(vgem));
}
+ igt_subtest("basic-fence-read")
+ test_fence_read(i915, vgem);
+
for (e = intel_execution_engines; e->name; e++) {
igt_subtest_f("%sfence-wait-%s",
e->exec_id == 0 ? "basic-" : "",