iris: Use streaming loads to read from tiled surfaces
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 22 Feb 2019 20:53:41 +0000 (20:53 +0000)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 13 Mar 2019 17:54:16 +0000 (10:54 -0700)
Always use the streaming load (since we know we have Broadwell+, all of
our target CPU support sse41) for reading back form the tiled surface
for mapping the resource. This means we hit the fast WC handling paths
on Atoms (without LLC), and for big Core (with LLC) using the streaming
load is no less efficient as we do not require the tiled buffer to be
pulled into the CPU cache.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/gallium/drivers/iris/iris_bufmgr.c
src/gallium/drivers/iris/iris_resource.c

index b20297fd94aab70a9d1d2de7c6b5decc7ad36902..ae335163d45e0499f33c1ef88b20cbde7a557646 100644 (file)
@@ -1186,8 +1186,11 @@ can_map_cpu(struct iris_bo *bo, unsigned flags)
     * most drawing while non-persistent mappings are active, we may still use
     * the GPU for blits or other operations, causing batches to happen at
     * inconvenient times.
+    *
+    * If RAW is set, we expect the caller to be able to handle a WC buffer
+    * more efficiently than the involuntary clflushes.
     */
-   if (flags & (MAP_PERSISTENT | MAP_COHERENT | MAP_ASYNC))
+   if (flags & (MAP_PERSISTENT | MAP_COHERENT | MAP_ASYNC | MAP_RAW))
       return false;
 
    return !(flags & MAP_WRITE);
index 155c8786d27dd87db5014ea5705839a485c08a27..acb19364a3b994f53b1d3192c51e3934f7c16cfb 100644 (file)
@@ -1143,7 +1143,7 @@ iris_map_tiled_memcpy(struct iris_transfer *map)
 
          isl_memcpy_tiled_to_linear(x1, x2, y1, y2, ptr, src, xfer->stride,
                                     surf->row_pitch_B, has_swizzling,
-                                    surf->tiling, ISL_MEMCPY);
+                                    surf->tiling, ISL_MEMCPY_STREAMING_LOAD);
          box.z++;
       }
    }