mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-11 01:46:14 +00:00
igt/gem_streaming_writes: Map the whole batch for CPU accesses
The llc cpu path only partially mapped the batch buffer so confused the CS when attempting to execute an empty batch. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90809 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
0d16473df4
commit
9777300846
@ -228,7 +228,7 @@ static void test_streaming(int fd, int mode, int sync)
|
||||
gem_close(fd, dst);
|
||||
}
|
||||
|
||||
static void test_batch(int fd, int mode)
|
||||
static void test_batch(int fd, int mode, int reverse)
|
||||
{
|
||||
const int has_64bit_reloc = intel_gen(intel_get_drm_devid(fd)) >= 8;
|
||||
struct drm_i915_gem_execbuffer2 execbuf;
|
||||
@ -236,6 +236,7 @@ static void test_batch(int fd, int mode)
|
||||
struct drm_i915_gem_relocation_entry reloc[2];
|
||||
uint32_t tmp[] = { MI_BATCH_BUFFER_END };
|
||||
uint64_t __src_offset, __dst_offset;
|
||||
uint64_t batch_size;
|
||||
uint32_t *s, *d;
|
||||
uint32_t *base;
|
||||
uint32_t offset;
|
||||
@ -272,20 +273,21 @@ static void test_batch(int fd, int mode)
|
||||
reloc[1].read_domains = I915_GEM_DOMAIN_RENDER;
|
||||
reloc[1].write_domain = 0;
|
||||
|
||||
batch_size = ALIGN(OBJECT_SIZE / CHUNK_SIZE * 128, 4096);
|
||||
exec[2].relocs_ptr = (uintptr_t)reloc;
|
||||
exec[2].relocation_count = 2;
|
||||
exec[2].handle = gem_create(fd, OBJECT_SIZE / CHUNK_SIZE * 128);
|
||||
exec[2].handle = gem_create(fd, batch_size);
|
||||
|
||||
switch (mode) {
|
||||
case 0: /* cpu/snoop */
|
||||
igt_require(gem_has_llc(fd));
|
||||
base = gem_mmap__cpu(fd, exec[2].handle, 0, OBJECT_SIZE, PROT_READ | PROT_WRITE);
|
||||
base = gem_mmap__cpu(fd, exec[2].handle, 0, batch_size, PROT_READ | PROT_WRITE);
|
||||
break;
|
||||
case 1: /* gtt */
|
||||
base = gem_mmap__gtt(fd, exec[2].handle, OBJECT_SIZE / CHUNK_SIZE * 128, PROT_READ | PROT_WRITE);
|
||||
base = gem_mmap__gtt(fd, exec[2].handle, batch_size, PROT_READ | PROT_WRITE);
|
||||
break;
|
||||
case 2: /* wc */
|
||||
base = gem_mmap__wc(fd, exec[2].handle, 0, OBJECT_SIZE / CHUNK_SIZE * 128, PROT_READ | PROT_WRITE);
|
||||
base = gem_mmap__wc(fd, exec[2].handle, 0, batch_size, PROT_READ | PROT_WRITE);
|
||||
break;
|
||||
}
|
||||
igt_assert(base);
|
||||
@ -322,6 +324,10 @@ static void test_batch(int fd, int mode)
|
||||
|
||||
execbuf.batch_start_offset = 128 * offset;
|
||||
execbuf.batch_start_offset += 8 * (pass & 7);
|
||||
igt_assert(execbuf.batch_start_offset <= batch_size - 64);
|
||||
if (reverse)
|
||||
execbuf.batch_start_offset = batch_size - execbuf.batch_start_offset - 64;
|
||||
igt_assert(execbuf.batch_start_offset <= batch_size - 64);
|
||||
k = execbuf.batch_start_offset / 4;
|
||||
|
||||
base[k] = COPY_BLT_CMD | BLT_WRITE_ARGB;
|
||||
@ -377,11 +383,17 @@ igt_main
|
||||
}
|
||||
|
||||
igt_subtest("batch-cpu")
|
||||
test_batch(fd, 0);
|
||||
test_batch(fd, 0, 0);
|
||||
igt_subtest("batch-gtt")
|
||||
test_batch(fd, 1);
|
||||
test_batch(fd, 1, 0);
|
||||
igt_subtest("batch-wc")
|
||||
test_batch(fd, 2);
|
||||
test_batch(fd, 2, 0);
|
||||
igt_subtest("batch-reverse-cpu")
|
||||
test_batch(fd, 0, 1);
|
||||
igt_subtest("batch-reverse-gtt")
|
||||
test_batch(fd, 1, 1);
|
||||
igt_subtest("batch-reverse-wc")
|
||||
test_batch(fd, 2, 1);
|
||||
|
||||
igt_fixture
|
||||
close(fd);
|
||||
|
Loading…
x
Reference in New Issue
Block a user