2 * Copyright © 2013 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24 * Damien Lespiau <damien.lespiau@intel.com>
25 * Xiang, Haihao <haihao.xiang@intel.com>
29 * This file is a basic test for the media_fill() function, a very simple
30 * workload for the Media pipeline.
36 #include <sys/ioctl.h>
46 #include "ioctl_wrappers.h"
48 #include "intel_bufmgr.h"
49 #include "intel_batchbuffer.h"
51 #include "intel_chipset.h"
54 #define STRIDE (WIDTH)
56 #define SIZE (HEIGHT*STRIDE)
64 drm_intel_bufmgr *bufmgr;
65 uint8_t linear[WIDTH * HEIGHT];
68 static void scratch_buf_init(data_t *data, struct igt_buf *buf,
69 int width, int height, int stride, uint8_t color)
74 bo = drm_intel_bo_alloc(data->bufmgr, "", SIZE, 4096);
75 for (i = 0; i < width * height; i++)
76 data->linear[i] = color;
77 gem_write(data->drm_fd, bo->handle, 0, data->linear,
78 sizeof(data->linear));
82 buf->tiling = I915_TILING_NONE;
87 scratch_buf_check(data_t *data, struct igt_buf *buf, int x, int y,
92 gem_read(data->drm_fd, buf->bo->handle, 0,
93 data->linear, sizeof(data->linear));
94 val = data->linear[y * WIDTH + x];
95 igt_assert_f(val == color,
96 "Expected 0x%02x, found 0x%02x at (%d,%d)\n",
103 struct intel_batchbuffer *batch = NULL;
105 igt_media_fillfunc_t media_fill = NULL;
108 data.drm_fd = drm_open_any_render();
109 data.devid = intel_get_drm_devid(data.drm_fd);
111 data.bufmgr = drm_intel_bufmgr_gem_init(data.drm_fd, 4096);
112 igt_assert(data.bufmgr);
114 media_fill = igt_get_media_fillfunc(data.devid);
116 igt_require_f(media_fill,
117 "no media-fill function\n");
119 batch = intel_batchbuffer_alloc(data.bufmgr, data.devid);
122 scratch_buf_init(&data, &dst, WIDTH, HEIGHT, STRIDE, COLOR_C4);
124 for (i = 0; i < WIDTH; i++) {
125 for (j = 0; j < HEIGHT; j++) {
126 scratch_buf_check(&data, &dst, i, j, COLOR_C4);
131 &dst, 0, 0, WIDTH / 2, HEIGHT / 2,
134 for (i = 0; i < WIDTH; i++) {
135 for (j = 0; j < HEIGHT; j++) {
136 if (i < WIDTH / 2 && j < HEIGHT / 2)
137 scratch_buf_check(&data, &dst, i, j, COLOR_4C);
139 scratch_buf_check(&data, &dst, i, j, COLOR_C4);