drm/i915: Use cpu relocations if the object is in the GTT but not mappable
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 23 Aug 2012 12:12:52 +0000 (13:12 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 24 Aug 2012 00:29:16 +0000 (02:29 +0200)
This prevents the case of unbinding the object in order to process the
relocations through the GTT and then rebinding it only to then proceed
to use cpu relocations as the object is now in the CPU write domain. By
choosing to use cpu relocations up front, we can therefore avoid the
rebind penalty.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem_execbuffer.c

index f7346d87655129863d0af297063f25f7c281b4e3..dc87563440f92c8149130bdb030cf63b52ec8bfa 100644 (file)
@@ -95,6 +95,7 @@ eb_destroy(struct eb_objects *eb)
 static inline int use_cpu_reloc(struct drm_i915_gem_object *obj)
 {
        return (obj->base.write_domain == I915_GEM_DOMAIN_CPU ||
+               !obj->map_and_fenceable ||
                obj->cache_level != I915_CACHE_NONE);
 }