summaryrefslogtreecommitdiff
path: root/tests/i915/gem_blits.c
diff options
context:
space:
mode:
authorAshutosh Dixit <ashutosh.dixit@intel.com>2020-02-05 22:45:11 -0800
committerChris Wilson <chris@chris-wilson.co.uk>2020-02-06 09:50:54 +0000
commitc23ad05a354145b3959a4ae2e06f8c65dd229022 (patch)
treee02390e23c96adf16d716fa095e020f8090965e3 /tests/i915/gem_blits.c
parent497e13d2b4c1053bcd01bd15739fef55e7694a03 (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.c20
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,