OSDN Git Service

GEM: Wait for existing rendering to complete before writing relocation data.
authorEric Anholt <eric@anholt.net>
Wed, 7 May 2008 21:10:04 +0000 (14:10 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 7 May 2008 21:10:04 +0000 (14:10 -0700)
This should already have been generally safe since we don't change contents
and put in new relocations between execbufs, so if we were writing in a new
relocation then we'd already waited rendering to complete when we moved
the target of the relocation.  However, doing the right thing will be required
if we do buffer reuse.

linux-core/i915_gem.c

index f3adf39..1d55eaa 100644 (file)
@@ -546,9 +546,18 @@ i915_gem_reloc_and_validate_object(struct drm_gem_object *obj,
                        return -EINVAL;
                }
 
+               /* If the relocation already has the right value in it, no
+                * more work needs to be done.
+                */
                if (target_obj_priv->gtt_offset == reloc.presumed_offset)
                        continue;
 
+               /* Now that we're going to actually write some data in,
+                * make sure that any rendering using this buffer's contents
+                * is completed.
+                */
+               i915_gem_object_wait_rendering(obj);
+
                /* Map the page containing the relocation we're going to
                 * perform.
                 */