From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeon/r600_buffer_common.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c 
b/src/gallium/drivers/radeon/r600_buffer_common.c
index 4132858..5d984ea 100644
--- a/src/gallium/drivers/radeon/r600_buffer_common.c
+++ b/src/gallium/drivers/radeon/r600_buffer_common.c
@@ -347,35 +347,37 @@ static void *r600_buffer_transfer_map(struct pipe_context 
*ctx,
         *        virtual mapping of that memory, although the same physical
         *        page will be used.
         *
         * So don't ever use staging buffers.
         */
        if (rscreen->ws->buffer_is_user_ptr(rbuffer->buf))
                usage |= PIPE_TRANSFER_PERSISTENT;
 
        /* See if the buffer range being mapped has never been initialized,
         * in which case it can be mapped unsynchronized. */
-       if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED) &&
+       if (!(usage & (PIPE_TRANSFER_UNSYNCHRONIZED |
+                      TC_TRANSFER_MAP_IGNORE_VALID_RANGE)) &&
            usage & PIPE_TRANSFER_WRITE &&
            !rbuffer->is_shared &&
            !util_ranges_intersect(&rbuffer->valid_buffer_range, box->x, box->x 
+ box->width)) {
                usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
        }
 
        /* If discarding the entire range, discard the whole resource instead. 
*/
        if (usage & PIPE_TRANSFER_DISCARD_RANGE &&
            box->x == 0 && box->width == resource->width0) {
                usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
        }
 
        if (usage & PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE &&
-           !(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) {
+           !(usage & (PIPE_TRANSFER_UNSYNCHRONIZED |
+                      TC_TRANSFER_MAP_NO_INVALIDATE))) {
                assert(usage & PIPE_TRANSFER_WRITE);
 
                if (r600_invalidate_buffer(rctx, rbuffer)) {
                        /* At this point, the buffer is always idle. */
                        usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
                } else {
                        /* Fall back to a temporary buffer. */
                        usage |= PIPE_TRANSFER_DISCARD_RANGE;
                }
        }
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to