igt/gem_concurrent_all: Pass buffer data down

In order reduce the number of parameters being passed everywhere, whilst
simultaneously making more information available to the lower levels,
pass the struct buffers around.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2016-01-27 13:02:35 +00:00
parent 5dea5deffc
commit 37f4da0d98

View File

@ -67,9 +67,19 @@ struct intel_batchbuffer *batch;
int all;
int pass;
struct buffers {
const struct access_mode *mode;
drm_intel_bufmgr *bufmgr;
drm_intel_bo **src, **dst;
drm_intel_bo *snoop, *spare;
uint32_t *tmp;
int width, height, size;
int count;
};
#define MIN_BUFFERS 3
static void blt_copy_bo(drm_intel_bo *dst, drm_intel_bo *src);
static void blt_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src);
static void
nop_release_bo(drm_intel_bo *bo)
@ -78,56 +88,39 @@ nop_release_bo(drm_intel_bo *bo)
}
static void
prw_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
prw_set_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
int size = width * height, i;
uint32_t *tmp;
tmp = malloc(4*size);
if (tmp) {
for (i = 0; i < size; i++)
tmp[i] = val;
drm_intel_bo_subdata(bo, 0, 4*size, tmp);
free(tmp);
} else {
for (i = 0; i < size; i++)
drm_intel_bo_subdata(bo, 4*i, 4, &val);
}
for (int i = 0; i < b->size; i++)
b->tmp[i] = val;
drm_intel_bo_subdata(bo, 0, 4*b->size, b->tmp);
}
static void
prw_cmp_bo(drm_intel_bo *bo, uint32_t val, int width, int height, drm_intel_bo *tmp)
prw_cmp_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
int size = width * height, i;
uint32_t *vaddr;
do_or_die(drm_intel_bo_map(tmp, true));
do_or_die(drm_intel_bo_get_subdata(bo, 0, 4*size, tmp->virtual));
vaddr = tmp->virtual;
for (i = 0; i < size; i++)
vaddr = b->tmp;
do_or_die(drm_intel_bo_get_subdata(bo, 0, 4*b->size, vaddr));
for (int i = 0; i < b->size; i++)
igt_assert_eq_u32(vaddr[i], val);
drm_intel_bo_unmap(tmp);
}
#define pixel(y, width) ((y)*(width) + (((y) + pass)%(width)))
static void
partial_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
partial_set_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
int y;
for (y = 0; y < height; y++)
do_or_die(drm_intel_bo_subdata(bo, 4*pixel(y, width), 4, &val));
for (int y = 0; y < b->height; y++)
do_or_die(drm_intel_bo_subdata(bo, 4*pixel(y, b->width), 4, &val));
}
static void
partial_cmp_bo(drm_intel_bo *bo, uint32_t val, int width, int height, drm_intel_bo *tmp)
partial_cmp_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
int y;
for (y = 0; y < height; y++) {
for (int y = 0; y < b->height; y++) {
uint32_t buf;
do_or_die(drm_intel_bo_get_subdata(bo, 4*pixel(y, width), 4, &buf));
do_or_die(drm_intel_bo_get_subdata(bo, 4*pixel(y, b->width), 4, &buf));
igt_assert_eq_u32(buf, val);
}
}
@ -216,8 +209,6 @@ snoop_create_bo(drm_intel_bufmgr *bufmgr, int width, int height)
{
drm_intel_bo *bo;
igt_skip_on(gem_has_llc(fd));
bo = unmapped_create_bo(bufmgr, width, height);
gem_set_caching(fd, bo->handle, I915_CACHING_CACHED);
drm_intel_bo_disable_reuse(bo);
@ -276,9 +267,9 @@ userptr_create_bo(drm_intel_bufmgr *bufmgr, int width, int height)
}
static void
userptr_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
userptr_set_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
int size = width * height;
int size = b->size;
uint32_t *vaddr = bo->virtual;
gem_set_domain(fd, bo->handle,
@ -288,9 +279,9 @@ userptr_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
}
static void
userptr_cmp_bo(drm_intel_bo *bo, uint32_t val, int width, int height, drm_intel_bo *tmp)
userptr_cmp_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
int size = width * height;
int size = b->size;
uint32_t *vaddr = bo->virtual;
gem_set_domain(fd, bo->handle,
@ -309,10 +300,10 @@ userptr_release_bo(drm_intel_bo *bo)
}
static void
gtt_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
gtt_set_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
uint32_t *vaddr = bo->virtual;
int size = width * height;
int size = b->size;
drm_intel_gem_bo_start_gtt_access(bo, true);
while (size--)
@ -320,15 +311,14 @@ gtt_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
}
static void
gtt_cmp_bo(drm_intel_bo *bo, uint32_t val, int width, int height, drm_intel_bo *tmp)
gtt_cmp_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
uint32_t *vaddr = bo->virtual;
int y;
/* GTT access is slow. So we just compare a few points */
drm_intel_gem_bo_start_gtt_access(bo, false);
for (y = 0; y < height; y++)
igt_assert_eq_u32(vaddr[pixel(y, width)], val);
for (int y = 0; y < b->height; y++)
igt_assert_eq_u32(vaddr[pixel(y, b->width)], val);
}
static drm_intel_bo *
@ -399,9 +389,9 @@ gpuX_create_bo(drm_intel_bufmgr *bufmgr, int width, int height)
}
static void
cpu_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
cpu_set_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
int size = width * height;
int size = b->size;
uint32_t *vaddr;
do_or_die(drm_intel_bo_map(bo, true));
@ -412,9 +402,9 @@ cpu_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
}
static void
cpu_cmp_bo(drm_intel_bo *bo, uint32_t val, int width, int height, drm_intel_bo *tmp)
cpu_cmp_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
int size = width * height;
int size = b->size;
uint32_t *vaddr;
do_or_die(drm_intel_bo_map(bo, false));
@ -425,7 +415,7 @@ cpu_cmp_bo(drm_intel_bo *bo, uint32_t val, int width, int height, drm_intel_bo *
}
static void
gpu_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
gpu_set_bo(struct buffers *buffers, drm_intel_bo *bo, uint32_t val)
{
struct drm_i915_gem_relocation_entry reloc[1];
struct drm_i915_gem_exec_object2 gem_exec[2];
@ -445,12 +435,12 @@ gpu_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
COLOR_BLT_WRITE_ALPHA | XY_COLOR_BLT_WRITE_RGB;
if (gen >= 4 && tiling) {
b[-1] |= XY_COLOR_BLT_TILED;
*b = width;
*b = buffers->width;
} else
*b = width << 2;
*b = buffers->width << 2;
*b++ |= 0xf0 << 16 | 1 << 25 | 1 << 24;
*b++ = 0;
*b++ = height << 16 | width;
*b++ = buffers->height << 16 | buffers->width;
reloc[0].offset = (b - buf) * sizeof(uint32_t);
reloc[0].target_handle = bo->handle;
reloc[0].read_domains = I915_GEM_DOMAIN_RENDER;
@ -483,17 +473,17 @@ gpu_set_bo(drm_intel_bo *bo, uint32_t val, int width, int height)
}
static void
gpu_cmp_bo(drm_intel_bo *bo, uint32_t val, int width, int height, drm_intel_bo *tmp)
gpu_cmp_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val)
{
blt_copy_bo(tmp, bo);
cpu_cmp_bo(tmp, val, width, height, NULL);
blt_copy_bo(b, b->snoop, bo);
cpu_cmp_bo(b, b->snoop, val);
}
const struct access_mode {
const char *name;
bool (*require)(void);
void (*set_bo)(drm_intel_bo *bo, uint32_t val, int w, int h);
void (*cmp_bo)(drm_intel_bo *bo, uint32_t val, int w, int h, drm_intel_bo *tmp);
void (*set_bo)(struct buffers *b, drm_intel_bo *bo, uint32_t val);
void (*cmp_bo)(struct buffers *b, drm_intel_bo *bo, uint32_t val);
drm_intel_bo *(*create_bo)(drm_intel_bufmgr *bufmgr, int width, int height);
void (*release_bo)(drm_intel_bo *bo);
} access_modes[] = {
@ -573,24 +563,22 @@ const struct access_mode {
};
int num_buffers;
const int width = 512, height = 512;
igt_render_copyfunc_t rendercopy;
struct buffers {
const struct access_mode *mode;
drm_intel_bufmgr *bufmgr;
drm_intel_bo **src, **dst;
drm_intel_bo *dummy, *spare;
int count;
};
static void *buffers_init(struct buffers *data,
const struct access_mode *mode,
int width, int height,
int _fd)
{
data->mode = mode;
data->count = 0;
data->width = width;
data->height = height;
data->size = width * height;
data->tmp = malloc(4*data->size);
igt_assert(data->tmp);
data->bufmgr = drm_intel_bufmgr_gem_init(_fd, 4096);
igt_assert(data->bufmgr);
@ -611,7 +599,7 @@ static void buffers_destroy(struct buffers *data)
data->mode->release_bo(data->src[i]);
data->mode->release_bo(data->dst[i]);
}
data->mode->release_bo(data->dummy);
data->mode->release_bo(data->snoop);
data->mode->release_bo(data->spare);
data->count = 0;
}
@ -619,6 +607,7 @@ static void buffers_destroy(struct buffers *data)
static void buffers_create(struct buffers *data,
int count)
{
int width = data->width, height = data->height;
igt_assert(data->bufmgr);
buffers_destroy(data);
@ -629,8 +618,8 @@ static void buffers_create(struct buffers *data,
data->dst[i] =
data->mode->create_bo(data->bufmgr, width, height);
}
data->dummy = data->mode->create_bo(data->bufmgr, width, height);
data->spare = data->mode->create_bo(data->bufmgr, width, height);
data->snoop = snoop_create_bo(data->bufmgr, width, height);
data->count = count;
}
@ -641,6 +630,7 @@ static void buffers_fini(struct buffers *data)
buffers_destroy(data);
free(data->tmp);
free(data->src);
data->src = NULL;
data->dst = NULL;
@ -650,21 +640,21 @@ static void buffers_fini(struct buffers *data)
data->bufmgr = NULL;
}
typedef void (*do_copy)(drm_intel_bo *dst, drm_intel_bo *src);
typedef void (*do_copy)(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src);
typedef struct igt_hang_ring (*do_hang)(void);
static void render_copy_bo(drm_intel_bo *dst, drm_intel_bo *src)
static void render_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src)
{
struct igt_buf d = {
.bo = dst,
.size = width * height * 4,
.num_tiles = width * height * 4,
.stride = width * 4,
.size = b->size * 4,
.num_tiles = b->size * 4,
.stride = b->width * 4,
}, s = {
.bo = src,
.size = width * height * 4,
.num_tiles = width * height * 4,
.stride = width * 4,
.size = b->size * 4,
.num_tiles = b->size * 4,
.stride = b->width * 4,
};
uint32_t swizzle;
@ -673,21 +663,21 @@ static void render_copy_bo(drm_intel_bo *dst, drm_intel_bo *src)
rendercopy(batch, NULL,
&s, 0, 0,
width, height,
b->width, b->height,
&d, 0, 0);
}
static void blt_copy_bo(drm_intel_bo *dst, drm_intel_bo *src)
static void blt_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src)
{
intel_blt_copy(batch,
src, 0, 0, 4*width,
dst, 0, 0, 4*width,
width, height, 32);
src, 0, 0, 4*b->width,
dst, 0, 0, 4*b->width,
b->width, b->height, 32);
}
static void cpu_copy_bo(drm_intel_bo *dst, drm_intel_bo *src)
static void cpu_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src)
{
const int size = width * height * sizeof(uint32_t);
const int size = b->size * sizeof(uint32_t);
void *d, *s;
gem_set_domain(fd, src->handle, I915_GEM_DOMAIN_CPU, 0);
@ -701,9 +691,9 @@ static void cpu_copy_bo(drm_intel_bo *dst, drm_intel_bo *src)
munmap(s, size);
}
static void gtt_copy_bo(drm_intel_bo *dst, drm_intel_bo *src)
static void gtt_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src)
{
const int size = width * height * sizeof(uint32_t);
const int size = b->size * sizeof(uint32_t);
void *d, *s;
gem_set_domain(fd, src->handle, I915_GEM_DOMAIN_GTT, 0);
@ -718,9 +708,9 @@ static void gtt_copy_bo(drm_intel_bo *dst, drm_intel_bo *src)
munmap(s, size);
}
static void wc_copy_bo(drm_intel_bo *dst, drm_intel_bo *src)
static void wc_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src)
{
const int size = width * height * sizeof(uint32_t);
const int size = b->width * sizeof(uint32_t);
void *d, *s;
gem_set_domain(fd, src->handle, I915_GEM_DOMAIN_GTT, 0);
@ -756,12 +746,12 @@ static void do_basic0(struct buffers *buffers,
{
gem_quiescent_gpu(fd);
buffers->mode->set_bo(buffers->src[0], 0xdeadbeef, width, height);
buffers->mode->set_bo(buffers, buffers->src[0], 0xdeadbeef);
for (int i = 0; i < buffers->count; i++) {
struct igt_hang_ring hang = do_hang_func();
do_copy_func(buffers->dst[i], buffers->src[0]);
buffers->mode->cmp_bo(buffers->dst[i], 0xdeadbeef, width, height, buffers->dummy);
do_copy_func(buffers, buffers->dst[i], buffers->src[0]);
buffers->mode->cmp_bo(buffers, buffers->dst[i], 0xdeadbeef);
igt_post_hang_ring(fd, hang);
}
@ -776,12 +766,12 @@ static void do_basic1(struct buffers *buffers,
for (int i = 0; i < buffers->count; i++) {
struct igt_hang_ring hang = do_hang_func();
buffers->mode->set_bo(buffers->src[i], i, width, height);
buffers->mode->set_bo(buffers->dst[i], ~i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], i);
buffers->mode->set_bo(buffers, buffers->dst[i], ~i);
do_copy_func(buffers->dst[i], buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
usleep(0); /* let someone else claim the mutex */
buffers->mode->cmp_bo(buffers->dst[i], i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], i);
igt_post_hang_ring(fd, hang);
}
@ -796,19 +786,19 @@ static void do_basicN(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (int i = 0; i < buffers->count; i++) {
buffers->mode->set_bo(buffers->src[i], i, width, height);
buffers->mode->set_bo(buffers->dst[i], ~i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], i);
buffers->mode->set_bo(buffers, buffers->dst[i], ~i);
}
hang = do_hang_func();
for (int i = 0; i < buffers->count; i++) {
do_copy_func(buffers->dst[i], buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
usleep(0); /* let someone else claim the mutex */
}
for (int i = 0; i < buffers->count; i++)
buffers->mode->cmp_bo(buffers->dst[i], i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], i);
igt_post_hang_ring(fd, hang);
}
@ -822,16 +812,16 @@ static void do_overwrite_source(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = 0; i < buffers->count; i++) {
buffers->mode->set_bo(buffers->src[i], i, width, height);
buffers->mode->set_bo(buffers->dst[i], ~i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], i);
buffers->mode->set_bo(buffers, buffers->dst[i], ~i);
}
for (i = 0; i < buffers->count; i++)
do_copy_func(buffers->dst[i], buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
hang = do_hang_func();
for (i = buffers->count; i--; )
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef);
for (i = 0; i < buffers->count; i++)
buffers->mode->cmp_bo(buffers->dst[i], i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], i);
igt_post_hang_ring(fd, hang);
}
@ -846,23 +836,23 @@ static void do_overwrite_source_read(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = 0; i < half; i++) {
buffers->mode->set_bo(buffers->src[i], i, width, height);
buffers->mode->set_bo(buffers->dst[i], ~i, width, height);
buffers->mode->set_bo(buffers->dst[i+half], ~i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], i);
buffers->mode->set_bo(buffers, buffers->dst[i], ~i);
buffers->mode->set_bo(buffers, buffers->dst[i+half], ~i);
}
for (i = 0; i < half; i++) {
do_copy_func(buffers->dst[i], buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
if (do_rcs)
render_copy_bo(buffers->dst[i+half], buffers->src[i]);
render_copy_bo(buffers, buffers->dst[i+half], buffers->src[i]);
else
blt_copy_bo(buffers->dst[i+half], buffers->src[i]);
blt_copy_bo(buffers, buffers->dst[i+half], buffers->src[i]);
}
hang = do_hang_func();
for (i = half; i--; )
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef);
for (i = 0; i < half; i++) {
buffers->mode->cmp_bo(buffers->dst[i], i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers->dst[i+half], i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], i);
buffers->mode->cmp_bo(buffers, buffers->dst[i+half], i);
}
igt_post_hang_ring(fd, hang);
}
@ -890,16 +880,16 @@ static void do_overwrite_source__rev(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = 0; i < buffers->count; i++) {
buffers->mode->set_bo(buffers->src[i], i, width, height);
buffers->mode->set_bo(buffers->dst[i], ~i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], i);
buffers->mode->set_bo(buffers, buffers->dst[i], ~i);
}
for (i = 0; i < buffers->count; i++)
do_copy_func(buffers->dst[i], buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
hang = do_hang_func();
for (i = 0; i < buffers->count; i++)
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef);
for (i = buffers->count; i--; )
buffers->mode->cmp_bo(buffers->dst[i], i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], i);
igt_post_hang_ring(fd, hang);
}
@ -910,12 +900,12 @@ static void do_overwrite_source__one(struct buffers *buffers,
struct igt_hang_ring hang;
gem_quiescent_gpu(fd);
buffers->mode->set_bo(buffers->src[0], 0, width, height);
buffers->mode->set_bo(buffers->dst[0], ~0, width, height);
do_copy_func(buffers->dst[0], buffers->src[0]);
buffers->mode->set_bo(buffers, buffers->src[0], 0);
buffers->mode->set_bo(buffers, buffers->dst[0], ~0);
do_copy_func(buffers, buffers->dst[0], buffers->src[0]);
hang = do_hang_func();
buffers->mode->set_bo(buffers->src[0], 0xdeadbeef, width, height);
buffers->mode->cmp_bo(buffers->dst[0], 0, width, height, buffers->dummy);
buffers->mode->set_bo(buffers, buffers->src[0], 0xdeadbeef);
buffers->mode->cmp_bo(buffers, buffers->dst[0], 0);
igt_post_hang_ring(fd, hang);
}
@ -930,27 +920,27 @@ static void do_intermix(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = 0; i < buffers->count; i++) {
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef^~i, width, height);
buffers->mode->set_bo(buffers->dst[i], i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef^~i);
buffers->mode->set_bo(buffers, buffers->dst[i], i);
}
for (i = 0; i < half; i++) {
if (do_rcs == 1 || (do_rcs == -1 && i & 1))
render_copy_bo(buffers->dst[i], buffers->src[i]);
render_copy_bo(buffers, buffers->dst[i], buffers->src[i]);
else
blt_copy_bo(buffers->dst[i], buffers->src[i]);
blt_copy_bo(buffers, buffers->dst[i], buffers->src[i]);
do_copy_func(buffers->dst[i+half], buffers->src[i]);
do_copy_func(buffers, buffers->dst[i+half], buffers->src[i]);
if (do_rcs == 1 || (do_rcs == -1 && (i & 1) == 0))
render_copy_bo(buffers->dst[i], buffers->dst[i+half]);
render_copy_bo(buffers, buffers->dst[i], buffers->dst[i+half]);
else
blt_copy_bo(buffers->dst[i], buffers->dst[i+half]);
blt_copy_bo(buffers, buffers->dst[i], buffers->dst[i+half]);
do_copy_func(buffers->dst[i+half], buffers->src[i+half]);
do_copy_func(buffers, buffers->dst[i+half], buffers->src[i+half]);
}
hang = do_hang_func();
for (i = 0; i < 2*half; i++)
buffers->mode->cmp_bo(buffers->dst[i], 0xdeadbeef^~i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], 0xdeadbeef^~i);
igt_post_hang_ring(fd, hang);
}
@ -984,12 +974,12 @@ static void do_early_read(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = buffers->count; i--; )
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef);
for (i = 0; i < buffers->count; i++)
do_copy_func(buffers->dst[i], buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
hang = do_hang_func();
for (i = buffers->count; i--; )
buffers->mode->cmp_bo(buffers->dst[i], 0xdeadbeef, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], 0xdeadbeef);
igt_post_hang_ring(fd, hang);
}
@ -1002,15 +992,15 @@ static void do_read_read_bcs(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = buffers->count; i--; )
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef ^ i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef ^ i);
for (i = 0; i < buffers->count; i++) {
do_copy_func(buffers->dst[i], buffers->src[i]);
blt_copy_bo(buffers->spare, buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
blt_copy_bo(buffers, buffers->spare, buffers->src[i]);
}
buffers->mode->cmp_bo(buffers->spare, 0xdeadbeef^(buffers->count-1), width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->spare, 0xdeadbeef^(buffers->count-1));
hang = do_hang_func();
for (i = buffers->count; i--; )
buffers->mode->cmp_bo(buffers->dst[i], 0xdeadbeef ^ i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], 0xdeadbeef ^ i);
igt_post_hang_ring(fd, hang);
}
@ -1023,14 +1013,14 @@ static void do_write_read_bcs(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = buffers->count; i--; )
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef ^ i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef ^ i);
for (i = 0; i < buffers->count; i++) {
blt_copy_bo(buffers->spare, buffers->src[i]);
do_copy_func(buffers->dst[i], buffers->spare);
blt_copy_bo(buffers, buffers->spare, buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->spare);
}
hang = do_hang_func();
for (i = buffers->count; i--; )
buffers->mode->cmp_bo(buffers->dst[i], 0xdeadbeef ^ i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], 0xdeadbeef ^ i);
igt_post_hang_ring(fd, hang);
}
@ -1043,15 +1033,15 @@ static void do_read_read_rcs(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = buffers->count; i--; )
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef ^ i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef ^ i);
for (i = 0; i < buffers->count; i++) {
do_copy_func(buffers->dst[i], buffers->src[i]);
render_copy_bo(buffers->spare, buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
render_copy_bo(buffers, buffers->spare, buffers->src[i]);
}
buffers->mode->cmp_bo(buffers->spare, 0xdeadbeef^(buffers->count-1), width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->spare, 0xdeadbeef^(buffers->count-1));
hang = do_hang_func();
for (i = buffers->count; i--; )
buffers->mode->cmp_bo(buffers->dst[i], 0xdeadbeef ^ i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], 0xdeadbeef ^ i);
igt_post_hang_ring(fd, hang);
}
@ -1064,14 +1054,14 @@ static void do_write_read_rcs(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = buffers->count; i--; )
buffers->mode->set_bo(buffers->src[i], 0xdeadbeef ^ i, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xdeadbeef ^ i);
for (i = 0; i < buffers->count; i++) {
render_copy_bo(buffers->spare, buffers->src[i]);
do_copy_func(buffers->dst[i], buffers->spare);
render_copy_bo(buffers, buffers->spare, buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->spare);
}
hang = do_hang_func();
for (i = buffers->count; i--; )
buffers->mode->cmp_bo(buffers->dst[i], 0xdeadbeef ^ i, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], 0xdeadbeef ^ i);
igt_post_hang_ring(fd, hang);
}
@ -1084,14 +1074,14 @@ static void do_gpu_read_after_write(struct buffers *buffers,
gem_quiescent_gpu(fd);
for (i = buffers->count; i--; )
buffers->mode->set_bo(buffers->src[i], 0xabcdabcd, width, height);
buffers->mode->set_bo(buffers, buffers->src[i], 0xabcdabcd);
for (i = 0; i < buffers->count; i++)
do_copy_func(buffers->dst[i], buffers->src[i]);
do_copy_func(buffers, buffers->dst[i], buffers->src[i]);
for (i = buffers->count; i--; )
do_copy_func(buffers->dummy, buffers->dst[i]);
do_copy_func(buffers, buffers->spare, buffers->dst[i]);
hang = do_hang_func();
for (i = buffers->count; i--; )
buffers->mode->cmp_bo(buffers->dst[i], 0xabcdabcd, width, height, buffers->dummy);
buffers->mode->cmp_bo(buffers, buffers->dst[i], 0xabcdabcd);
igt_post_hang_ring(fd, hang);
}
@ -1144,7 +1134,6 @@ static void run_child(struct buffers *buffers,
intel_batchbuffer_free(batch);
drm_intel_bufmgr_destroy(buffers->bufmgr);
}
igt_waitchildren();
igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
}
@ -1166,7 +1155,9 @@ static void __run_forked(struct buffers *buffers,
buffers->count = 0;
fd = drm_open_driver(DRIVER_INTEL);
batch = buffers_init(buffers, buffers->mode, fd);
batch = buffers_init(buffers, buffers->mode,
buffers->width, buffers->height,
fd);
buffers_create(buffers, num_buffers);
for (pass = 0; pass < loops; pass++)
@ -1279,7 +1270,8 @@ run_basic_modes(const char *prefix,
struct buffers buffers;
igt_fixture
batch = buffers_init(&buffers, mode, fd);
batch = buffers_init(&buffers, mode,
512, 512, fd);
igt_subtest_f("%s-%s-%s-sanitycheck0%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) {
p->require();