intel: Compute in-aperture size for relaxed fenced objects
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 22 Nov 2010 09:50:06 +0000 (09:50 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 22 Nov 2010 09:54:47 +0000 (09:54 +0000)
For relaxed fencing the object may only consume the small set of active
pages, but still requires a fence region once bound into the aperture.
This is the size we need to use when computing the maximum possible
aperture space that could be used by a single batchbuffer and so avoid
hitting ENOSPC.

Reported-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
intel/intel_bufmgr_gem.c

index aea7bdb..20fe075 100644 (file)
@@ -467,8 +467,23 @@ drm_intel_bo_gem_set_in_aperture_size(drm_intel_bufmgr_gem *bufmgr_gem,
         * aperture. Optimal packing is for wimps.
         */
        size = bo_gem->bo.size;
-       if (bufmgr_gem->gen < 4 && bo_gem->tiling_mode != I915_TILING_NONE)
-               size *= 2;
+       if (bufmgr_gem->gen < 4 && bo_gem->tiling_mode != I915_TILING_NONE) {
+               int min_size;
+
+               if (bufmgr_gem->has_relaxed_fencing) {
+                       if (bufmgr_gem->gen == 3)
+                               min_size = 1024*1024;
+                       else
+                               min_size = 512*1024;
+
+                       while (min_size < size)
+                               min_size *= 2;
+               } else
+                       min_size = size;
+
+               /* Account for worst-case alignment. */
+               size = 2 * min_size;
+       }
 
        bo_gem->reloc_tree_size = size;
 }