aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2018-12-31 22:03:35 -0800
committerKenneth Graunke <[email protected]>2019-02-21 10:26:11 -0800
commit8eda6f22885e7af66affec83a94ba5a087180842 (patch)
tree65ff3520c095a0cf228d79a7bbd8680fc25d0b5d /src/gallium
parentbacc722d1376e95003da9904be9afc979b2be332 (diff)
iris: Handle PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE somewhat
Various places in the transfer code need to know whether they must read the existing resource's values. Rather than checking both flags everywhere, just make PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE also flag PIPE_TRANSFER_DISCARD_RANGE - if we can discard everything, we can discard a subrange, too. Obviously, we can do better for PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE, but eventually u_threaded_context should handle swapping out buffers for new idle buffers, anyway. In the meantime, this is at least better.
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/iris/iris_resource.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c
index 48f348b643e..ca8832c5b34 100644
--- a/src/gallium/drivers/iris/iris_resource.c
+++ b/src/gallium/drivers/iris/iris_resource.c
@@ -824,6 +824,12 @@ iris_transfer_map(struct pipe_context *ctx,
struct iris_resource *res = (struct iris_resource *)resource;
struct isl_surf *surf = &res->surf;
+ /* If we can discard the whole resource, we can also discard the
+ * subrange being accessed.
+ */
+ if (usage & PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE)
+ usage |= PIPE_TRANSFER_DISCARD_RANGE;
+
if (surf->tiling != ISL_TILING_LINEAR &&
(usage & PIPE_TRANSFER_MAP_DIRECTLY))
return NULL;
@@ -841,9 +847,6 @@ iris_transfer_map(struct pipe_context *ctx,
struct iris_transfer *map = slab_alloc(&ice->transfer_pool);
struct pipe_transfer *xfer = &map->base;
- // PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE
- // PIPE_TRANSFER_DISCARD_RANGE
-
if (!map)
return NULL;