diff mbox

no_reloc: test case

Message ID 1408677155-1840-73-git-send-email-benjamin.widawsky@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ben Widawsky Aug. 22, 2014, 3:12 a.m. UTC
needs libdrm
---
 tests/Makefile.am        |   4 +-
 tests/Makefile.sources   |   1 +
 tests/gem_exec_noreloc.c | 172 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 175 insertions(+), 2 deletions(-)
 create mode 100644 tests/gem_exec_noreloc.c
diff mbox

Patch

diff --git a/tests/Makefile.am b/tests/Makefile.am
index a2fba51..5c06ab3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -27,8 +27,8 @@  multi-tests.txt: Makefile.sources
 	@echo ${multi_kernel_tests} >> $@
 	@echo END TESTLIST >> $@
 
-EXTRA_PROGRAMS = $(TESTS_progs) $(TESTS_progs_M) $(HANG) $(TESTS_testsuite)
-EXTRA_DIST = $(TESTS_scripts) $(TESTS_scripts_M) $(scripts) $(IMAGES) $(common_files)
+bin_PROGRAMS = $(TESTS_progs) $(TESTS_progs_M) $(HANG) $(TESTS_testsuite)
+dist_bin_SCRIPTS = $(TESTS_scripts) $(TESTS_scripts_M) $(scripts) $(IMAGES) $(common_files)
 
 CLEANFILES = $(EXTRA_PROGRAMS) single-tests.txt multi-tests.txt
 
diff --git a/tests/Makefile.sources b/tests/Makefile.sources
index 698e290..cbc3bb9 100644
--- a/tests/Makefile.sources
+++ b/tests/Makefile.sources
@@ -31,6 +31,7 @@  TESTS_progs_M = \
 	gem_evict_everything \
 	gem_exec_bad_domains \
 	gem_exec_faulting_reloc \
+	gem_exec_noreloc \
 	gem_exec_nop \
 	gem_exec_params \
 	gem_exec_parse \
diff --git a/tests/gem_exec_noreloc.c b/tests/gem_exec_noreloc.c
new file mode 100644
index 0000000..3552246
--- /dev/null
+++ b/tests/gem_exec_noreloc.c
@@ -0,0 +1,172 @@ 
+/*
+ * Copyright (c) 2014 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <limits.h>
+#include <signal.h>
+#include <errno.h>
+#include <drm.h>
+
+#include "ioctl_wrappers.h"
+#include "drmtest.h"
+#include "igt_core.h"
+#include "igt_aux.h"
+#include "intel_bufmgr.h"
+#include "intel_batchbuffer.h"
+#include "intel_io.h"
+#include "intel_chipset.h"
+
+#define PATTERN 0xdefaca7e
+
+int fd;
+static struct intel_batchbuffer *batch_3d;
+
+static void
+set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
+{
+	int size = width * height;
+	uint32_t *vaddr;
+
+	drm_intel_bo_map(bo, true);
+	vaddr = bo->virtual;
+	while (size--)
+		*vaddr++ = val;
+	drm_intel_bo_unmap(bo);
+}
+
+static void
+cmp_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
+{
+	int size = width * height;
+	uint32_t *vaddr;
+
+	drm_intel_bo_map(bo, false);
+	vaddr = bo->virtual;
+	while (size--)
+		igt_assert(*vaddr++ == val);
+	drm_intel_bo_unmap(bo);
+}
+
+
+static void init_buffer(drm_intel_bufmgr *bufmgr,
+                        struct igt_buf *buf,
+                        drm_intel_bo *bo,
+                        int width, int height)
+{
+	buf->bo = bo;
+	buf->size = width * height * 4;
+	igt_assert(buf->bo);
+	buf->tiling = I915_TILING_NONE;
+	buf->num_tiles = width * height * 4;
+	buf->stride = width * 4;
+}
+
+static drm_intel_bo *
+create_bo(drm_intel_bufmgr *bufmgr, int width, int height)
+{
+	drm_intel_bo *bo;
+
+	bo = drm_intel_bo_alloc_prelocated(bufmgr, "soft bo", width * height * 4);
+	igt_assert(bo);
+
+	set_bo(bo, PATTERN, width, height);
+
+	return bo;
+}
+
+static void release_bo(drm_intel_bo *bo)
+{
+	drm_intel_gem_bo_unmap_gtt(bo);
+	drm_intel_bo_unreference(bo);
+}
+
+static void render_copyfunc(struct igt_buf *src,
+			    struct igt_buf *dst,
+			    int width,
+			    int height)
+{
+	const int src_x = 0, src_y = 0, dst_x = 0, dst_y = 0;
+	igt_render_copyfunc_t rendercopy = igt_get_render_copyfunc(intel_get_drm_devid(fd));
+
+	igt_assert(rendercopy);
+
+	if (rendercopy) {
+		rendercopy(batch_3d, NULL,
+			   src, src_x, src_y,
+			   width, height,
+			   dst, dst_x, dst_y);
+		intel_batchbuffer_flush(batch_3d);
+	}
+}
+
+static struct intel_batchbuffer *
+noreloc_batchbuffer_alloc(drm_intel_bufmgr *bufmgr, uint32_t devid)
+{
+	struct intel_batchbuffer *batch = calloc(sizeof(*batch), 1);
+	igt_assert(batch);
+
+	batch->bufmgr = bufmgr;
+	batch->devid = devid;
+	batch->bo = drm_intel_bo_alloc_prelocated(bufmgr, "batchbuffer", 4096);
+	igt_assert(batch->bo);
+	memset(batch->buffer, 0, sizeof(batch->buffer));
+	batch->ptr = batch->buffer;
+
+	return batch;
+}
+
+int main(int argc, char **argv)
+{
+	struct igt_buf src, dest;
+	drm_intel_bo *from, *to;
+	drm_intel_bufmgr *bufmgr;
+
+	fd = drm_open_any();
+	igt_assert(fd >= 0);
+
+	bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
+	batch_3d = noreloc_batchbuffer_alloc(bufmgr, intel_get_drm_devid(fd));
+	igt_assert(batch_3d);
+
+	from = create_bo(bufmgr, 4096, 4096);
+	to = create_bo(bufmgr, 4096, 4096);
+	igt_assert(from);
+	igt_assert(to);
+	init_buffer(bufmgr, &src, from, 4096, 4096);
+	init_buffer(bufmgr, &dest,  to, 4096, 4096);
+
+	render_copyfunc(&src, &dest, 4096, 4096);
+	cmp_bo(to, PATTERN, 4096, 4096);
+
+	release_bo(to);
+	release_bo(from);
+
+	return 0;
+}