[Intel-gfx] [PATCH i-g-t v2] benchmark/: fix gem_exec_nop complie error on android
Thomas Wood
thomas.wood at intel.com
Fri Jul 24 08:33:14 PDT 2015
On 24 July 2015 at 14:35, Derek Morton <derek.j.morton at intel.com> wrote:
> There are two versions of gem_exec_nop.c in benchmarks and tests
> which causes the build system to have two build modules with
> the same name.
> This patch renames benchmarks/gem_exec_nop.c to
> benchmarks/gem_exec_nop_benchmark.c using the existing
> gem_userptr_benchmark.c as a naming convention.
Would using LOCAL_MODULE_FILENAME help here, allowing an alternative
output name for Android?
https://developer.android.com/ndk/guides/android_mk.html#mdv
>
> v2: Also rename gem_mmap to gem_mmap_benchmark. Another file
> which breaks android which was added after this patch was 1st
> submitted.
>
> Signed-off-by: Derek Morton <derek.j.morton at intel.com>
> ---
> benchmarks/Makefile.sources | 9 +-
> benchmarks/gem_exec_nop.c | 153 ---------------------------------
> benchmarks/gem_exec_nop_benchmark.c | 153 +++++++++++++++++++++++++++++++++
> benchmarks/gem_mmap.c | 165 ------------------------------------
> benchmarks/gem_mmap_benchmark.c | 165 ++++++++++++++++++++++++++++++++++++
> 5 files changed, 325 insertions(+), 320 deletions(-)
> delete mode 100644 benchmarks/gem_exec_nop.c
> create mode 100644 benchmarks/gem_exec_nop_benchmark.c
> delete mode 100644 benchmarks/gem_mmap.c
> create mode 100644 benchmarks/gem_mmap_benchmark.c
>
> diff --git a/benchmarks/Makefile.sources b/benchmarks/Makefile.sources
> index 7ad95a5..35722b5 100644
> --- a/benchmarks/Makefile.sources
> +++ b/benchmarks/Makefile.sources
> @@ -1,11 +1,16 @@
> +# If you copy a test to benckmarks, rename it _benchmark
> +# The andriod build will fail when trying to build multiple binaries with
> +# the same name.
> +
> bin_PROGRAMS = \
> intel_upload_blit_large \
> intel_upload_blit_large_gtt \
> intel_upload_blit_large_map \
> intel_upload_blit_small \
> - gem_exec_nop \
> - gem_mmap \
> + gem_exec_nop_benchmark \
> + gem_mmap_benchmark \
> gem_prw \
> gem_userptr_benchmark \
> kms_vblank \
> $(NULL)
> +
> diff --git a/benchmarks/gem_exec_nop.c b/benchmarks/gem_exec_nop.c
> deleted file mode 100644
> index 2a3abd2..0000000
> --- a/benchmarks/gem_exec_nop.c
> +++ /dev/null
> @@ -1,153 +0,0 @@
> -/*
> - * Copyright © 2011 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.
> - *
> - * Authors:
> - * Chris Wilson <chris at chris-wilson.co.uk>
> - *
> - */
> -
> -#include <unistd.h>
> -#include <stdlib.h>
> -#include <stdint.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include <fcntl.h>
> -#include <inttypes.h>
> -#include <errno.h>
> -#include <sys/stat.h>
> -#include <sys/ioctl.h>
> -#include <sys/time.h>
> -#include <time.h>
> -
> -#include "drm.h"
> -#include "ioctl_wrappers.h"
> -#include "drmtest.h"
> -#include "intel_io.h"
> -#include "igt_stats.h"
> -
> -#define LOCAL_I915_EXEC_NO_RELOC (1<<11)
> -#define LOCAL_I915_EXEC_HANDLE_LUT (1<<12)
> -
> -static uint64_t elapsed(const struct timespec *start,
> - const struct timespec *end,
> - int loop)
> -{
> - return (1000000000ULL*(end->tv_sec - start->tv_sec) + (end->tv_nsec - start->tv_nsec))/loop;
> -}
> -
> -static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
> -{
> - int err = 0;
> - if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
> - err = -errno;
> - return err;
> -}
> -
> -static uint32_t batch(int fd)
> -{
> - const uint32_t buf[] = {MI_BATCH_BUFFER_END};
> - uint32_t handle = gem_create(fd, 4096);
> - gem_write(fd, handle, 0, buf, sizeof(buf));
> - return handle;
> -}
> -
> -static int loop(unsigned ring, int reps)
> -{
> - struct drm_i915_gem_execbuffer2 execbuf;
> - struct drm_i915_gem_exec_object2 gem_exec;
> - int count, fd;
> -
> - fd = drm_open_any();
> -
> - memset(&gem_exec, 0, sizeof(gem_exec));
> - gem_exec.handle = batch(fd);
> -
> - memset(&execbuf, 0, sizeof(execbuf));
> - execbuf.buffers_ptr = (uintptr_t)&gem_exec;
> - execbuf.buffer_count = 1;
> - execbuf.flags = ring;
> - execbuf.flags |= LOCAL_I915_EXEC_HANDLE_LUT;
> - execbuf.flags |= LOCAL_I915_EXEC_NO_RELOC;
> - if (__gem_execbuf(fd, &execbuf)) {
> - execbuf.flags = ring;
> - if (__gem_execbuf(fd, &execbuf))
> - return 77;
> - }
> -
> - for (count = 1; count <= 1<<16; count <<= 1) {
> - igt_stats_t stats;
> - int n;
> -
> - igt_stats_init_with_size(&stats, reps);
> -
> - for (n = 0; n < reps; n++) {
> - struct timespec start, end;
> - int loops = count;
> - sleep(1); /* wait for the hw to go back to sleep */
> - clock_gettime(CLOCK_MONOTONIC, &start);
> - while (loops--)
> - do_ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf);
> - gem_sync(fd, gem_exec.handle);
> - clock_gettime(CLOCK_MONOTONIC, &end);
> - igt_stats_push(&stats, elapsed(&start, &end, count));
> - }
> -
> - printf("%7.3f\n", igt_stats_get_trimean(&stats)/1000);
> - igt_stats_fini(&stats);
> - }
> - return 0;
> -}
> -
> -int main(int argc, char **argv)
> -{
> - unsigned ring = I915_EXEC_RENDER;
> - int reps = 13;
> - int c;
> -
> - while ((c = getopt (argc, argv, "e:r:")) != -1) {
> - switch (c) {
> - case 'e':
> - if (strcmp(optarg, "rcs") == 0)
> - ring = I915_EXEC_RENDER;
> - else if (strcmp(optarg, "vcs") == 0)
> - ring = I915_EXEC_BSD;
> - else if (strcmp(optarg, "bcs") == 0)
> - ring = I915_EXEC_BLT;
> - else if (strcmp(optarg, "vecs") == 0)
> - ring = I915_EXEC_VEBOX;
> - else
> - ring = atoi(optarg);
> - break;
> -
> - case 'r':
> - reps = atoi(optarg);
> - if (reps < 1)
> - reps = 1;
> - break;
> -
> - default:
> - break;
> - }
> - }
> -
> - return loop(ring, reps);
> -}
> diff --git a/benchmarks/gem_exec_nop_benchmark.c b/benchmarks/gem_exec_nop_benchmark.c
> new file mode 100644
> index 0000000..2a3abd2
> --- /dev/null
> +++ b/benchmarks/gem_exec_nop_benchmark.c
> @@ -0,0 +1,153 @@
> +/*
> + * Copyright © 2011 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.
> + *
> + * Authors:
> + * Chris Wilson <chris at chris-wilson.co.uk>
> + *
> + */
> +
> +#include <unistd.h>
> +#include <stdlib.h>
> +#include <stdint.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <fcntl.h>
> +#include <inttypes.h>
> +#include <errno.h>
> +#include <sys/stat.h>
> +#include <sys/ioctl.h>
> +#include <sys/time.h>
> +#include <time.h>
> +
> +#include "drm.h"
> +#include "ioctl_wrappers.h"
> +#include "drmtest.h"
> +#include "intel_io.h"
> +#include "igt_stats.h"
> +
> +#define LOCAL_I915_EXEC_NO_RELOC (1<<11)
> +#define LOCAL_I915_EXEC_HANDLE_LUT (1<<12)
> +
> +static uint64_t elapsed(const struct timespec *start,
> + const struct timespec *end,
> + int loop)
> +{
> + return (1000000000ULL*(end->tv_sec - start->tv_sec) + (end->tv_nsec - start->tv_nsec))/loop;
> +}
> +
> +static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
> +{
> + int err = 0;
> + if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
> + err = -errno;
> + return err;
> +}
> +
> +static uint32_t batch(int fd)
> +{
> + const uint32_t buf[] = {MI_BATCH_BUFFER_END};
> + uint32_t handle = gem_create(fd, 4096);
> + gem_write(fd, handle, 0, buf, sizeof(buf));
> + return handle;
> +}
> +
> +static int loop(unsigned ring, int reps)
> +{
> + struct drm_i915_gem_execbuffer2 execbuf;
> + struct drm_i915_gem_exec_object2 gem_exec;
> + int count, fd;
> +
> + fd = drm_open_any();
> +
> + memset(&gem_exec, 0, sizeof(gem_exec));
> + gem_exec.handle = batch(fd);
> +
> + memset(&execbuf, 0, sizeof(execbuf));
> + execbuf.buffers_ptr = (uintptr_t)&gem_exec;
> + execbuf.buffer_count = 1;
> + execbuf.flags = ring;
> + execbuf.flags |= LOCAL_I915_EXEC_HANDLE_LUT;
> + execbuf.flags |= LOCAL_I915_EXEC_NO_RELOC;
> + if (__gem_execbuf(fd, &execbuf)) {
> + execbuf.flags = ring;
> + if (__gem_execbuf(fd, &execbuf))
> + return 77;
> + }
> +
> + for (count = 1; count <= 1<<16; count <<= 1) {
> + igt_stats_t stats;
> + int n;
> +
> + igt_stats_init_with_size(&stats, reps);
> +
> + for (n = 0; n < reps; n++) {
> + struct timespec start, end;
> + int loops = count;
> + sleep(1); /* wait for the hw to go back to sleep */
> + clock_gettime(CLOCK_MONOTONIC, &start);
> + while (loops--)
> + do_ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf);
> + gem_sync(fd, gem_exec.handle);
> + clock_gettime(CLOCK_MONOTONIC, &end);
> + igt_stats_push(&stats, elapsed(&start, &end, count));
> + }
> +
> + printf("%7.3f\n", igt_stats_get_trimean(&stats)/1000);
> + igt_stats_fini(&stats);
> + }
> + return 0;
> +}
> +
> +int main(int argc, char **argv)
> +{
> + unsigned ring = I915_EXEC_RENDER;
> + int reps = 13;
> + int c;
> +
> + while ((c = getopt (argc, argv, "e:r:")) != -1) {
> + switch (c) {
> + case 'e':
> + if (strcmp(optarg, "rcs") == 0)
> + ring = I915_EXEC_RENDER;
> + else if (strcmp(optarg, "vcs") == 0)
> + ring = I915_EXEC_BSD;
> + else if (strcmp(optarg, "bcs") == 0)
> + ring = I915_EXEC_BLT;
> + else if (strcmp(optarg, "vecs") == 0)
> + ring = I915_EXEC_VEBOX;
> + else
> + ring = atoi(optarg);
> + break;
> +
> + case 'r':
> + reps = atoi(optarg);
> + if (reps < 1)
> + reps = 1;
> + break;
> +
> + default:
> + break;
> + }
> + }
> +
> + return loop(ring, reps);
> +}
> diff --git a/benchmarks/gem_mmap.c b/benchmarks/gem_mmap.c
> deleted file mode 100644
> index 7593e12..0000000
> --- a/benchmarks/gem_mmap.c
> +++ /dev/null
> @@ -1,165 +0,0 @@
> -/*
> - * Copyright © 2011-2015 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.
> - *
> - * Authors:
> - * Chris Wilson <chris at chris-wilson.co.uk>
> - *
> - */
> -
> -#include <unistd.h>
> -#include <stdlib.h>
> -#include <stdint.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include <fcntl.h>
> -#include <inttypes.h>
> -#include <errno.h>
> -#include <sys/stat.h>
> -#include <sys/ioctl.h>
> -#include <sys/time.h>
> -#include <time.h>
> -
> -#include "drm.h"
> -#include "ioctl_wrappers.h"
> -#include "drmtest.h"
> -#include "igt_aux.h"
> -#include "igt_stats.h"
> -
> -#define OBJECT_SIZE (1<<23)
> -
> -static uint64_t elapsed(const struct timespec *start,
> - const struct timespec *end)
> -{
> - return 1000000000ULL*(end->tv_sec - start->tv_sec) + (end->tv_nsec - start->tv_nsec);
> -}
> -
> -int main(int argc, char **argv)
> -{
> - int fd = drm_open_any();
> - enum map {CPU, GTT, WC} map = CPU;
> - enum dir {READ, WRITE, CLEAR} dir = READ;
> - int tiling = I915_TILING_NONE;
> - void *buf = malloc(OBJECT_SIZE);
> - uint32_t handle;
> - void *ptr, *src, *dst;
> - int reps = 13;
> - int c, size;
> -
> - while ((c = getopt (argc, argv, "m:d:r:t:")) != -1) {
> - switch (c) {
> - case 'm':
> - if (strcmp(optarg, "cpu") == 0)
> - map = CPU;
> - else if (strcmp(optarg, "gtt") == 0)
> - map = GTT;
> - else if (strcmp(optarg, "wc") == 0)
> - map = WC;
> - else
> - abort();
> - break;
> -
> - case 'd':
> - if (strcmp(optarg, "read") == 0)
> - dir = READ;
> - else if (strcmp(optarg, "write") == 0)
> - dir = WRITE;
> - else if (strcmp(optarg, "clear") == 0)
> - dir = CLEAR;
> - else
> - abort();
> - break;
> -
> - case 't':
> - if (strcmp(optarg, "x") == 0)
> - tiling = I915_TILING_X;
> - else if (strcmp(optarg, "y") == 0)
> - tiling = I915_TILING_Y;
> - else if (strcmp(optarg, "none") == 0)
> - tiling = I915_TILING_NONE;
> - else
> - abort();
> - break;
> -
> - case 'r':
> - reps = atoi(optarg);
> - if (reps < 1)
> - reps = 1;
> - break;
> -
> - default:
> - break;
> - }
> - }
> -
> - handle = gem_create(fd, OBJECT_SIZE);
> - switch (map) {
> - case CPU:
> - ptr = gem_mmap__cpu(fd, handle, 0, OBJECT_SIZE, PROT_WRITE);
> - gem_set_domain(fd, handle, I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
> - break;
> - case GTT:
> - ptr = gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_WRITE);
> - gem_set_domain(fd, handle, I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> - break;
> - case WC:
> - ptr = gem_mmap__wc(fd, handle, 0, OBJECT_SIZE, PROT_WRITE);
> - gem_set_domain(fd, handle, I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> - break;
> - default:
> - abort();
> - }
> -
> - gem_set_tiling(fd, handle, tiling, 512);
> -
> - if (dir == READ) {
> - src = ptr;
> - dst = buf;
> - } else {
> - src = buf;
> - dst = ptr;
> - }
> -
> - for (size = 1; size <= OBJECT_SIZE; size <<= 1) {
> - igt_stats_t stats;
> - int n;
> -
> - igt_stats_init_with_size(&stats, reps);
> -
> - for (n = 0; n < reps; n++) {
> - struct timespec start, end;
> -
> - clock_gettime(CLOCK_MONOTONIC, &start);
> - if (dir == CLEAR)
> - memset(dst, 0, size);
> - else
> - memcpy(dst, src, size);
> - clock_gettime(CLOCK_MONOTONIC, &end);
> -
> - igt_stats_push(&stats, elapsed(&start, &end));
> - }
> -
> - printf("%7.3f\n", igt_stats_get_trimean(&stats)/1000);
> - igt_stats_fini(&stats);
> - }
> -
> - return 0;
> -}
> diff --git a/benchmarks/gem_mmap_benchmark.c b/benchmarks/gem_mmap_benchmark.c
> new file mode 100644
> index 0000000..7593e12
> --- /dev/null
> +++ b/benchmarks/gem_mmap_benchmark.c
> @@ -0,0 +1,165 @@
> +/*
> + * Copyright © 2011-2015 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.
> + *
> + * Authors:
> + * Chris Wilson <chris at chris-wilson.co.uk>
> + *
> + */
> +
> +#include <unistd.h>
> +#include <stdlib.h>
> +#include <stdint.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <fcntl.h>
> +#include <inttypes.h>
> +#include <errno.h>
> +#include <sys/stat.h>
> +#include <sys/ioctl.h>
> +#include <sys/time.h>
> +#include <time.h>
> +
> +#include "drm.h"
> +#include "ioctl_wrappers.h"
> +#include "drmtest.h"
> +#include "igt_aux.h"
> +#include "igt_stats.h"
> +
> +#define OBJECT_SIZE (1<<23)
> +
> +static uint64_t elapsed(const struct timespec *start,
> + const struct timespec *end)
> +{
> + return 1000000000ULL*(end->tv_sec - start->tv_sec) + (end->tv_nsec - start->tv_nsec);
> +}
> +
> +int main(int argc, char **argv)
> +{
> + int fd = drm_open_any();
> + enum map {CPU, GTT, WC} map = CPU;
> + enum dir {READ, WRITE, CLEAR} dir = READ;
> + int tiling = I915_TILING_NONE;
> + void *buf = malloc(OBJECT_SIZE);
> + uint32_t handle;
> + void *ptr, *src, *dst;
> + int reps = 13;
> + int c, size;
> +
> + while ((c = getopt (argc, argv, "m:d:r:t:")) != -1) {
> + switch (c) {
> + case 'm':
> + if (strcmp(optarg, "cpu") == 0)
> + map = CPU;
> + else if (strcmp(optarg, "gtt") == 0)
> + map = GTT;
> + else if (strcmp(optarg, "wc") == 0)
> + map = WC;
> + else
> + abort();
> + break;
> +
> + case 'd':
> + if (strcmp(optarg, "read") == 0)
> + dir = READ;
> + else if (strcmp(optarg, "write") == 0)
> + dir = WRITE;
> + else if (strcmp(optarg, "clear") == 0)
> + dir = CLEAR;
> + else
> + abort();
> + break;
> +
> + case 't':
> + if (strcmp(optarg, "x") == 0)
> + tiling = I915_TILING_X;
> + else if (strcmp(optarg, "y") == 0)
> + tiling = I915_TILING_Y;
> + else if (strcmp(optarg, "none") == 0)
> + tiling = I915_TILING_NONE;
> + else
> + abort();
> + break;
> +
> + case 'r':
> + reps = atoi(optarg);
> + if (reps < 1)
> + reps = 1;
> + break;
> +
> + default:
> + break;
> + }
> + }
> +
> + handle = gem_create(fd, OBJECT_SIZE);
> + switch (map) {
> + case CPU:
> + ptr = gem_mmap__cpu(fd, handle, 0, OBJECT_SIZE, PROT_WRITE);
> + gem_set_domain(fd, handle, I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
> + break;
> + case GTT:
> + ptr = gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_WRITE);
> + gem_set_domain(fd, handle, I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> + break;
> + case WC:
> + ptr = gem_mmap__wc(fd, handle, 0, OBJECT_SIZE, PROT_WRITE);
> + gem_set_domain(fd, handle, I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> + break;
> + default:
> + abort();
> + }
> +
> + gem_set_tiling(fd, handle, tiling, 512);
> +
> + if (dir == READ) {
> + src = ptr;
> + dst = buf;
> + } else {
> + src = buf;
> + dst = ptr;
> + }
> +
> + for (size = 1; size <= OBJECT_SIZE; size <<= 1) {
> + igt_stats_t stats;
> + int n;
> +
> + igt_stats_init_with_size(&stats, reps);
> +
> + for (n = 0; n < reps; n++) {
> + struct timespec start, end;
> +
> + clock_gettime(CLOCK_MONOTONIC, &start);
> + if (dir == CLEAR)
> + memset(dst, 0, size);
> + else
> + memcpy(dst, src, size);
> + clock_gettime(CLOCK_MONOTONIC, &end);
> +
> + igt_stats_push(&stats, elapsed(&start, &end));
> + }
> +
> + printf("%7.3f\n", igt_stats_get_trimean(&stats)/1000);
> + igt_stats_fini(&stats);
> + }
> +
> + return 0;
> +}
> --
> 1.9.1
>
More information about the Intel-gfx
mailing list