|
@@ -354,14 +354,15 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
|
|
/* We need to rebind the object if its current allocation
|
|
/* We need to rebind the object if its current allocation
|
|
* no longer meets the alignment restrictions for its new
|
|
* no longer meets the alignment restrictions for its new
|
|
* tiling mode. Otherwise we can just leave it alone, but
|
|
* tiling mode. Otherwise we can just leave it alone, but
|
|
- * need to ensure that any fence register is cleared.
|
|
|
|
|
|
+ * need to ensure that any fence register is updated before
|
|
|
|
+ * the next fenced (either through the GTT or by the BLT unit
|
|
|
|
+ * on older GPUs) access.
|
|
*
|
|
*
|
|
* After updating the tiling parameters, we then flag whether
|
|
* After updating the tiling parameters, we then flag whether
|
|
* we need to update an associated fence register. Note this
|
|
* we need to update an associated fence register. Note this
|
|
* has to also include the unfenced register the GPU uses
|
|
* has to also include the unfenced register the GPU uses
|
|
* whilst executing a fenced command for an untiled object.
|
|
* whilst executing a fenced command for an untiled object.
|
|
*/
|
|
*/
|
|
- i915_gem_release_mmap(obj);
|
|
|
|
|
|
|
|
obj->map_and_fenceable =
|
|
obj->map_and_fenceable =
|
|
obj->gtt_space == NULL ||
|
|
obj->gtt_space == NULL ||
|
|
@@ -385,6 +386,9 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
|
|
|
|
|
|
obj->tiling_mode = args->tiling_mode;
|
|
obj->tiling_mode = args->tiling_mode;
|
|
obj->stride = args->stride;
|
|
obj->stride = args->stride;
|
|
|
|
+
|
|
|
|
+ /* Force the fence to be reacquired for GTT access */
|
|
|
|
+ i915_gem_release_mmap(obj);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/* we have to maintain this existing ABI... */
|
|
/* we have to maintain this existing ABI... */
|