mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
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.
This commit is contained in:
parent
bacc722d13
commit
8eda6f2288
1 changed files with 6 additions and 3 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue