[Intel-gfx] [Intel gfx][i-g-t PATCH 1/4] tests: add gem_media_fill
Xiang, Haihao
haihao.xiang at intel.com
Mon Dec 2 02:06:55 CET 2013
On Fri, 2013-11-29 at 09:02 +0100, Daniel Vetter wrote:
> On Fri, Nov 29, 2013 at 02:57:13PM +0800, Xiang, Haihao wrote:
> > From: "Xiang, Haihao" <haihao.xiang at intel.com>
> >
> > It is to check whether media pipeline on render ring works. Codes
> > are copied and modified from the rendercopy case which uses 3D pipeline.
> > However media pipeline is simpler than 3D pipeline and there is few changes
> > between gen6,gen7 and gen8
> >
> > Signed-off-by: Xiang, Haihao <haihao.xiang at intel.com>
>
> Really awesome. This should also help in writing crazy multi-ring tests
> which check correctness. I don't have any clue about media stuff, so
> please let someone else from your team quickly review it before you push.
> Otherwise lgtm.
Thanks for your comments. I will fix the issue Yakui pointed out first
then push the code.
> -Daniel
>
> > ---
> > lib/Makefile.sources | 2 +
> > lib/media_fill.c | 9 ++++
> > lib/media_fill.h | 50 ++++++++++++++++++
> > tests/Makefile.sources | 1 +
> > tests/gem_media_fill.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++
> > 5 files changed, 194 insertions(+)
> > create mode 100644 lib/media_fill.c
> > create mode 100644 lib/media_fill.h
> > create mode 100644 tests/gem_media_fill.c
> >
> > diff --git a/lib/Makefile.sources b/lib/Makefile.sources
> > index 699621b..cad238a 100644
> > --- a/lib/Makefile.sources
> > +++ b/lib/Makefile.sources
> > @@ -19,6 +19,8 @@ libintel_tools_la_SOURCES = \
> > intel_mmio.c \
> > intel_pci.c \
> > intel_reg.h \
> > + media_fill.c \
> > + media_fill.h \
> > rendercopy_i915.c \
> > rendercopy_i830.c \
> > gen6_render.h \
> > diff --git a/lib/media_fill.c b/lib/media_fill.c
> > new file mode 100644
> > index 0000000..8ee5db6
> > --- /dev/null
> > +++ b/lib/media_fill.c
> > @@ -0,0 +1,9 @@
> > +#include "i830_reg.h"
> > +#include "media_fill.h"
> > +
> > +media_fillfunc_t get_media_fillfunc(int devid)
> > +{
> > + media_fillfunc_t fill = NULL;
> > +
> > + return fill;
> > +}
> > diff --git a/lib/media_fill.h b/lib/media_fill.h
> > new file mode 100644
> > index 0000000..2e058cb
> > --- /dev/null
> > +++ b/lib/media_fill.h
> > @@ -0,0 +1,50 @@
> > +#ifndef RENDE_MEDIA_FILL_H
> > +#define RENDE_MEDIA_FILL_H
> > +
> > +#include <stdlib.h>
> > +#include <sys/ioctl.h>
> > +#include <stdio.h>
> > +#include <string.h>
> > +#include <assert.h>
> > +#include <fcntl.h>
> > +#include <inttypes.h>
> > +#include <errno.h>
> > +#include <sys/stat.h>
> > +#include <sys/time.h>
> > +#include <getopt.h>
> > +#include "drm.h"
> > +#include "i915_drm.h"
> > +#include "drmtest.h"
> > +#include "intel_bufmgr.h"
> > +#include "intel_batchbuffer.h"
> > +#include "intel_gpu_tools.h"
> > +
> > +struct scratch_buf {
> > + drm_intel_bo *bo;
> > + uint32_t stride;
> > + uint32_t tiling;
> > + uint32_t *data;
> > + uint32_t *cpu_mapping;
> > + uint32_t size;
> > + unsigned num_tiles;
> > +};
> > +
> > +static inline unsigned buf_width(struct scratch_buf *buf)
> > +{
> > + return buf->stride/sizeof(uint8_t);
> > +}
> > +
> > +static inline unsigned buf_height(struct scratch_buf *buf)
> > +{
> > + return buf->size/buf->stride;
> > +}
> > +
> > +typedef void (*media_fillfunc_t)(struct intel_batchbuffer *batch,
> > + struct scratch_buf *dst,
> > + unsigned x, unsigned y,
> > + unsigned width, unsigned height,
> > + uint8_t color);
> > +
> > +media_fillfunc_t get_media_fillfunc(int devid);
> > +
> > +#endif /* RENDE_MEDIA_FILL_H */
> > diff --git a/tests/Makefile.sources b/tests/Makefile.sources
> > index d201809..0ff0e37 100644
> > --- a/tests/Makefile.sources
> > +++ b/tests/Makefile.sources
> > @@ -87,6 +87,7 @@ TESTS_progs = \
> > gem_largeobject \
> > gem_lut_handle \
> > gem_mmap_offset_exhaustion \
> > + gem_media_fill \
> > gem_pin \
> > gem_pipe_control_store_loop \
> > gem_reg_read \
> > diff --git a/tests/gem_media_fill.c b/tests/gem_media_fill.c
> > new file mode 100644
> > index 0000000..40b391d
> > --- /dev/null
> > +++ b/tests/gem_media_fill.c
> > @@ -0,0 +1,132 @@
> > +/*
> > + * Copyright © 2013 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:
> > + * Damien Lespiau <damien.lespiau at intel.com>
> > + * Xiang, Haihao <haihao.xiang at intel.com>
> > + */
> > +
> > +/*
> > + * This file is a basic test for the media_fill() function, a very simple
> > + * workload for the Media pipeline.
> > + */
> > +
> > +#include <stdbool.h>
> > +#include <unistd.h>
> > +#include <cairo.h>
> > +
> > +#include "media_fill.h"
> > +
> > +#define WIDTH 64
> > +#define STRIDE (WIDTH)
> > +#define HEIGHT 64
> > +#define SIZE (HEIGHT*STRIDE)
> > +
> > +#define COLOR_C4 0xc4
> > +#define COLOR_4C 0x4c
> > +
> > +typedef struct {
> > + int drm_fd;
> > + uint32_t devid;
> > + drm_intel_bufmgr *bufmgr;
> > + uint8_t linear[WIDTH * HEIGHT];
> > +} data_t;
> > +
> > +static void scratch_buf_init(data_t *data, struct scratch_buf *buf,
> > + int width, int height, int stride, uint8_t color)
> > +{
> > + drm_intel_bo *bo;
> > + int i;
> > +
> > + bo = drm_intel_bo_alloc(data->bufmgr, "", SIZE, 4096);
> > + for (i = 0; i < width * height; i++)
> > + data->linear[i] = color;
> > + gem_write(data->drm_fd, bo->handle, 0, data->linear,
> > + sizeof(data->linear));
> > +
> > + buf->bo = bo;
> > + buf->stride = stride;
> > + buf->tiling = I915_TILING_NONE;
> > + buf->size = SIZE;
> > +}
> > +
> > +static void
> > +scratch_buf_check(data_t *data, struct scratch_buf *buf, int x, int y,
> > + uint8_t color)
> > +{
> > + uint8_t val;
> > +
> > + gem_read(data->drm_fd, buf->bo->handle, 0,
> > + data->linear, sizeof(data->linear));
> > + val = data->linear[y * WIDTH + x];
> > + if (val != color) {
> > + fprintf(stderr, "Expected 0x%02x, found 0x%02x at (%d,%d)\n",
> > + color, val, x, y);
> > + abort();
> > + }
> > +}
> > +
> > +int main(int argc, char **argv)
> > +{
> > + data_t data = {0, };
> > + struct intel_batchbuffer *batch = NULL;
> > + struct scratch_buf dst;
> > + media_fillfunc_t media_fill = NULL;
> > + int i, j;
> > +
> > + igt_fixture {
> > + data.drm_fd = drm_open_any_render();
> > + data.devid = intel_get_drm_devid(data.drm_fd);
> > +
> > + data.bufmgr = drm_intel_bufmgr_gem_init(data.drm_fd, 4096);
> > + igt_assert(data.bufmgr);
> > +
> > + media_fill = get_media_fillfunc(data.devid);
> > +
> > + igt_require_f(media_fill,
> > + "no media-fill function\n");
> > +
> > + batch = intel_batchbuffer_alloc(data.bufmgr, data.devid);
> > + igt_assert(batch);
> > + }
> > +
> > + scratch_buf_init(&data, &dst, WIDTH, HEIGHT, STRIDE, COLOR_C4);
> > +
> > + for (i = 0; i < WIDTH; i++) {
> > + for (j = 0; j < HEIGHT; j++) {
> > + scratch_buf_check(&data, &dst, i, j, COLOR_C4);
> > + }
> > + }
> > +
> > + media_fill(batch,
> > + &dst, 0, 0, WIDTH / 2, HEIGHT / 2,
> > + COLOR_4C);
> > +
> > + for (i = 0; i < WIDTH; i++) {
> > + for (j = 0; j < HEIGHT; j++) {
> > + if (i < WIDTH / 2 && j < HEIGHT / 2)
> > + scratch_buf_check(&data, &dst, i, j, COLOR_4C);
> > + else
> > + scratch_buf_check(&data, &dst, i, j, COLOR_C4);
> > + }
> > + }
> > +}
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
More information about the Intel-gfx
mailing list