diff options
author | Ashutosh Dixit <ashutosh.dixit@intel.com> | 2020-02-05 22:45:11 -0800 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2020-02-06 09:50:54 +0000 |
commit | c23ad05a354145b3959a4ae2e06f8c65dd229022 (patch) | |
tree | e02390e23c96adf16d716fa095e020f8090965e3 /tests/i915/gem_blits.c | |
parent | 497e13d2b4c1053bcd01bd15739fef55e7694a03 (diff) |
i915/gem_blits: Fix for devices without mappable aperture
Skip using the gtt or applying tiling. Instead use the blitter for
detiling on devices without mappable aperture.
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/i915/gem_blits.c')
-rw-r--r-- | tests/i915/gem_blits.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/tests/i915/gem_blits.c b/tests/i915/gem_blits.c index f9cb12bb..3d3b9027 100644 --- a/tests/i915/gem_blits.c +++ b/tests/i915/gem_blits.c @@ -44,8 +44,9 @@ struct buffer { uint16_t height; uint16_t stride; uint32_t size; - unsigned int tiling; - unsigned int caching; + unsigned int caching : 3; + unsigned int tiling : 3; + unsigned int fenced : 1; uint64_t gtt_offset; uint32_t model[] __attribute__((aligned(16))); }; @@ -160,14 +161,12 @@ static void buffer_set_tiling(const struct device *device, memset(obj, 0, sizeof(obj)); obj[0].handle = gem_create(device->fd, size); - if (tiling) { + if (__gem_set_tiling(device->fd, obj[0].handle, tiling, stride) == 0) obj[0].flags = EXEC_OBJECT_NEEDS_FENCE; - gem_set_tiling(device->fd, obj[0].handle, tiling, stride); - } obj[1].handle = buffer->handle; obj[1].offset = buffer->gtt_offset; - if (buffer->tiling) + if (buffer->fenced) obj[1].flags = EXEC_OBJECT_NEEDS_FENCE; obj[2].handle = gem_create(device->fd, 4096); @@ -251,6 +250,7 @@ static void buffer_set_tiling(const struct device *device, buffer->gtt_offset = obj[0].offset; buffer->handle = obj[0].handle; + buffer->fenced = !!(obj[0].flags & EXEC_OBJECT_NEEDS_FENCE); buffer->tiling = tiling; buffer->stride = stride; buffer->size = size; @@ -381,6 +381,11 @@ static void *download(const struct device *device, igt_assert(posix_memalign(&linear, 4096, buffer->size) == 0); + if (buffer->tiling && !buffer->fenced) { + igt_assert(blit_to_linear(device, buffer, linear)); + return linear; + } + switch (mode) { case CPU: if (buffer->tiling) { @@ -755,6 +760,9 @@ igt_main buffer_set_tiling(&device, dst, dst_tiling); for (enum mode down = CPU; down <= WC; down++) { + if (down == GTT && !gem_has_mappable_ggtt(device.fd)) + continue; + igt_debug("Testing src_tiling=%d, dst_tiling=%d, down=%d at (%d, %d) x (%d, %d)\n", src_tiling, dst_tiling, |