This allows us to replace the backing storage for a buffer, which
means we'd have an idle buffer and thus could do an unsynchronized
mapping where we otherwise wouldn't.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19209>
if (res->base.is_user_ptr)
usage |= PIPE_MAP_PERSISTENT;
+ /* Promote discarding a range to discarding the entire buffer where
+ * possible. This may allow us to replace the backing storage entirely
+ * and let us do an unsynchronized map when we otherwise wouldn't.
+ */
+ if (resource->target == PIPE_BUFFER &&
+ (usage & PIPE_MAP_DISCARD_RANGE) &&
+ box->x == 0 && box->width == resource->width0) {
+ usage |= PIPE_MAP_DISCARD_WHOLE_RESOURCE;
+ }
+
if (usage & PIPE_MAP_DISCARD_WHOLE_RESOURCE) {
/* Replace the backing storage with a fresh buffer for non-async maps */
if (!(usage & (PIPE_MAP_UNSYNCHRONIZED |