@@ -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
@@ -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 \
new file mode 100644
@@ -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;
+}