diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-07-18 10:25:24 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-07-18 10:50:50 +0100 |
commit | 8cca110eacb8248d81c755b120b3d9717fd533d1 (patch) | |
tree | 5c6b12347e4a9a7520e308f851f844db14d3c381 /tests/prime_vgem.c | |
parent | 3d8f55c3e0b4545a6385a44094a70e68e071a49c (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.c | 41 |
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-" : "", |