@@ -1329,6 +1329,13 @@ struct drm_i915_gem_object {
unsigned long exec_handle;
struct drm_i915_gem_exec_object2 *exec_entry;
+ /**
+ * Current offset of the object in GTT space.
+ *
+ * This is the same as gtt_space->start
+ */
+ uint32_t gtt_offset;
+
struct intel_ring_buffer *ring;
/** Breadcrumb of last rendering to the buffer. */
@@ -2622,6 +2622,7 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj)
drm_mm_put_block(obj->gtt_space);
obj->gtt_space = NULL;
+ obj->gtt_offset = 0;
return 0;
}
@@ -3151,6 +3152,7 @@ search_free:
list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
obj->gtt_space = node;
+ obj->gtt_offset = node->start;
fenceable =
node->size == fence_size &&
@@ -400,6 +400,7 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
} else
obj->gtt_space->start = I915_GTT_RESERVED;
+ obj->gtt_offset = gtt_offset;
obj->has_global_gtt_mapping = 1;
list_add_tail(&obj->global_list, &dev_priv->mm.bound_list);