[Intel-gfx] [PATCH 4/6] drm/i915: Add bind/unbind object functions to VM
Chris Wilson
chris at chris-wilson.co.uk
Mon Sep 16 11:25:28 CEST 2013
On Sat, Sep 14, 2013 at 03:03:17PM -0700, Ben Widawsky wrote:
> +static void gen6_ggtt_bind_vma(struct i915_vma *vma,
> + enum i915_cache_level cache_level,
> + u32 flags)
> +{
> + struct drm_device *dev = vma->vm->dev;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> + struct drm_i915_gem_object *obj = vma->obj;
> + const unsigned long entry = vma->node.start >> PAGE_SHIFT;
> +
> + /* If there is an aliasing PPGTT, and the user didn't explicitly ask for
> + * the global, just use aliasing */
> + if (!dev_priv->mm.aliasing_ppgtt || flags & GLOBAL_BIND) {
> + /* If the object is unbound, or we're change the cache bits */
> + if (!obj->has_global_gtt_mapping ||
> + (cache_level != obj->cache_level)) {
> + gen6_ggtt_insert_entries(vma->vm, obj->pages, entry,
> + cache_level);
> + obj->has_global_gtt_mapping = 1;
> + }
> + }
> +
> + /* If put the mapping in the aliasing PPGTT as well as Global if we have
> + * aliasing, but the user requested global. */
Why? As a proponent of full-ppgtt I thought you would be envisoning a
future where the aliasing_ppgtt was used far less (i.e. never), and the
ggtt would only continue to be used for the truly global entries such as
scanouts, contexts, pdes, execlists etc.
> + if (dev_priv->mm.aliasing_ppgtt &&
> + (!obj->has_aliasing_ppgtt_mapping ||
> + (cache_level != obj->cache_level))) {
> + gen6_ppgtt_insert_entries(&dev_priv->mm.aliasing_ppgtt->base,
> + vma->obj->pages, entry, cache_level);
> + vma->obj->has_aliasing_ppgtt_mapping = 1;
> + }
> +}
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list