summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.sources3
-rw-r--r--tests/i915/gem_media_vme.c117
-rw-r--r--tests/meson.build1
3 files changed, 121 insertions, 0 deletions
diff --git a/tests/Makefile.sources b/tests/Makefile.sources
index 6ec03d24..a234fa5d 100644
--- a/tests/Makefile.sources
+++ b/tests/Makefile.sources
@@ -287,6 +287,9 @@ gem_madvise_SOURCES = i915/gem_madvise.c
TESTS_progs += gem_media_fill
gem_media_fill_SOURCES = i915/gem_media_fill.c
+TESTS_progs += gem_media_vme
+gem_media_vme_SOURCES = i915/gem_media_vme.c
+
TESTS_progs += gem_mmap
gem_mmap_SOURCES = i915/gem_mmap.c
diff --git a/tests/i915/gem_media_vme.c b/tests/i915/gem_media_vme.c
new file mode 100644
index 00000000..8d9fd822
--- /dev/null
+++ b/tests/i915/gem_media_vme.c
@@ -0,0 +1,117 @@
+/*
+ * Copyright © 2018 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 "igt.h"
+#include <stdbool.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include "drm.h"
+#include "intel_bufmgr.h"
+
+IGT_TEST_DESCRIPTION("A very simple workload for the VME media block.");
+
+#define WIDTH 64
+#define STRIDE (WIDTH)
+#define HEIGHT 64
+
+#define INPUT_SIZE (WIDTH * HEIGHT * sizeof(char) * 1.5)
+#define OUTPUT_SIZE (56*sizeof(int))
+
+static void
+scratch_buf_init(drm_intel_bufmgr *bufmgr,
+ struct igt_buf *buf,
+ unsigned int size)
+{
+ drm_intel_bo *bo;
+
+ bo = drm_intel_bo_alloc(bufmgr, "", size, 4096);
+ igt_assert(bo);
+
+ memset(buf, 0, sizeof(*buf));
+
+ buf->bo = bo;
+ buf->tiling = I915_TILING_NONE;
+ buf->size = size;
+}
+
+static void scratch_buf_init_src(drm_intel_bufmgr *bufmgr, struct igt_buf *buf)
+{
+ scratch_buf_init(bufmgr, buf, INPUT_SIZE);
+
+ /*
+ * Ideally we would read src surface from file "SourceFrameI.yu12".
+ * But even without it, we can still triger the rcs0 resetting
+ * with this vme kernel.
+ */
+
+ buf->stride = STRIDE;
+}
+
+static void scratch_buf_init_dst(drm_intel_bufmgr *bufmgr, struct igt_buf *buf)
+{
+ scratch_buf_init(bufmgr, buf, OUTPUT_SIZE);
+
+ buf->stride = 1;
+}
+
+igt_simple_main
+{
+ int drm_fd;
+ uint32_t devid;
+ drm_intel_bufmgr *bufmgr;
+ igt_vme_func_t media_vme;
+ struct intel_batchbuffer *batch;
+ struct igt_buf src, dst;
+
+ drm_fd = drm_open_driver(DRIVER_INTEL);
+ igt_require_gem(drm_fd);
+
+ devid = intel_get_drm_devid(drm_fd);
+
+ media_vme = igt_get_media_vme_func(devid);
+ igt_require_f(media_vme, "no media-vme function\n");
+
+ bufmgr = drm_intel_bufmgr_gem_init(drm_fd, 4096);
+ igt_assert(bufmgr);
+
+ batch = intel_batchbuffer_alloc(bufmgr, devid);
+ igt_assert(batch);
+
+ scratch_buf_init_src(bufmgr, &src);
+ scratch_buf_init_dst(bufmgr, &dst);
+
+ igt_fork_hang_detector(drm_fd);
+
+ media_vme(batch, &src, WIDTH, HEIGHT, &dst);
+
+ gem_sync(drm_fd, dst.bo->handle);
+
+ igt_stop_hang_detector();
+}
diff --git a/tests/meson.build b/tests/meson.build
index 783cc61b..0f12df26 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -168,6 +168,7 @@ gem_progs = [
'gem_lut_handle',
'gem_madvise',
'gem_media_fill',
+ 'gem_media_vme',
'gem_mmap',
'gem_mmap_gtt',
'gem_mmap_offset_exhaustion',