summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2011-09-15 18:47:21 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2011-09-15 18:47:21 +0200
commit733a1d9f3441eec77c272648d0df7eea010b8f44 (patch)
treeab94924bda0c82d001cce55f53a86ce69ce25c8a /tests
parentba2255a7e41cade707af36d3de0a59fbb41245e9 (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.c55
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);