diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2011-09-15 18:47:21 +0200 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2011-09-15 18:47:21 +0200 |
commit | 733a1d9f3441eec77c272648d0df7eea010b8f44 (patch) | |
tree | ab94924bda0c82d001cce55f53a86ce69ce25c8a /tests | |
parent | ba2255a7e41cade707af36d3de0a59fbb41245e9 (diff) |
tests/gem_mmap_gtt: also test gtt pwrite paths
This needs a properly pre-faulted dst bo.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gem_mmap_gtt.c | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/tests/gem_mmap_gtt.c b/tests/gem_mmap_gtt.c index 44e4218..7f6b2da 100644 --- a/tests/gem_mmap_gtt.c +++ b/tests/gem_mmap_gtt.c @@ -97,18 +97,28 @@ static void gem_close(int fd, uint32_t handle) assert(ret == 0); } +static void set_domain(int fd, uint32_t handle) +{ + struct drm_i915_gem_set_domain set_domain; + int ret; + + set_domain.handle = handle; + set_domain.read_domains = I915_GEM_DOMAIN_GTT; + set_domain.write_domain = I915_GEM_DOMAIN_GTT; + + ret = drmIoctl(fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain); + assert(ret == 0); +} + static void * -create_pointer(int fd) +mmap_bo(int fd, uint32_t handle) { struct drm_i915_gem_mmap_gtt arg; - uint32_t handle; void *ptr; int ret; memset(&arg, 0, sizeof(arg)); - handle = gem_create(fd, OBJECT_SIZE); - arg.handle = handle; ret = ioctl(fd, DRM_IOCTL_I915_GEM_MMAP_GTT, &arg); assert(ret == 0); @@ -117,6 +127,19 @@ create_pointer(int fd) MAP_SHARED, fd, arg.offset); assert(ptr != MAP_FAILED); + return ptr; +} + +static void * +create_pointer(int fd) +{ + uint32_t handle; + void *ptr; + + handle = gem_create(fd, OBJECT_SIZE); + + ptr = mmap_bo(fd, handle); + gem_close(fd, handle); return ptr; @@ -155,6 +178,29 @@ test_write(int fd) } static void +test_write_gtt(int fd) +{ + uint32_t dst; + char *dst_gtt; + void *src; + + dst = gem_create(fd, OBJECT_SIZE); + + /* prefault object into gtt */ + dst_gtt = mmap_bo(fd, dst); + set_domain(fd, dst); + memset(dst_gtt, 0, OBJECT_SIZE); + munmap(dst_gtt, OBJECT_SIZE); + + src = create_pointer(fd); + + gem_write(fd, dst, 0, src, OBJECT_SIZE); + + gem_close(fd, dst); + munmap(src, OBJECT_SIZE); +} + +static void test_read(int fd) { void *dst; @@ -179,6 +225,7 @@ int main(int argc, char **argv) test_copy(fd); test_read(fd); test_write(fd); + test_write_gtt(fd); close(fd); |