From patchwork Fri Aug 22 03:12:35 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Widawsky X-Patchwork-Id: 4761191 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id C24D09F344 for ; Fri, 22 Aug 2014 03:14:26 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D5BC220173 for ; Fri, 22 Aug 2014 03:14:25 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id C396D20155 for ; Fri, 22 Aug 2014 03:14:24 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 60BE86E87A; Thu, 21 Aug 2014 20:14:24 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 6C3E56E89D for ; Thu, 21 Aug 2014 20:14:15 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP; 21 Aug 2014 20:14:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.97,862,1389772800"; d="scan'208";a="375576272" Received: from unknown (HELO ironside.intel.com) ([10.255.12.192]) by FMSMGA003.fm.intel.com with ESMTP; 21 Aug 2014 20:10:22 -0700 From: Ben Widawsky To: Intel GFX Date: Thu, 21 Aug 2014 20:12:35 -0700 Message-Id: <1408677155-1840-73-git-send-email-benjamin.widawsky@intel.com> X-Mailer: git-send-email 2.0.4 In-Reply-To: <1408677155-1840-1-git-send-email-benjamin.widawsky@intel.com> References: <1408677155-1840-1-git-send-email-benjamin.widawsky@intel.com> Cc: Ben Widawsky Subject: [Intel-gfx] [PATCH] no_reloc: test case X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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; +}