i965: Assert that we don't use CPU write maps to non-coherent buffers.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 1 Jul 2017 08:55:52 +0000 (01:55 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 10 Jul 2017 22:55:34 +0000 (15:55 -0700)
Using CPU maps of non-coherent buffers can get us in a lot of trouble,
and WC maps are a reasonable alternative anyway.  Guard against shooting
ourselves in the foot by adding an assert, and comment.

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_bufmgr.c

index d9b37bfae34c91f12c0013246565e2b6af1a2ded..11251f15edc03a7bb142f0c553eeb536d0df1aa2 100644 (file)
@@ -669,6 +669,12 @@ brw_bo_map_cpu(struct brw_context *brw, struct brw_bo *bo, unsigned flags)
 {
    struct brw_bufmgr *bufmgr = bo->bufmgr;
 
+   /* We disallow CPU maps for writing to non-coherent buffers, as the
+    * CPU map can become invalidated when a batch is flushed out, which
+    * can happen at unpredictable times.  You should use WC maps instead.
+    */
+   assert(bo->cache_coherent || !(flags & MAP_WRITE));
+
    if (!bo->map_cpu) {
       struct drm_i915_gem_mmap mmap_arg;
       void *map;