gallium/radeon: reset valid_buffer_range on PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 11 Jan 2016 00:54:44 +0000 (19:54 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 14 Jan 2016 14:40:00 +0000 (09:40 -0500)
This accomodates a streaming pattern where the discard flag is set when the
application wraps back to the beginning of the buffer.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeon/r600_buffer_common.c

index 484f5c8d5b72d004df989261245542f5167c4e97..aeb9a20e2971d8bfdf1d73fa1a4f9e6e6b1fa144 100644 (file)
@@ -280,7 +280,10 @@ static void *r600_buffer_transfer_map(struct pipe_context *ctx,
                if (r600_rings_is_buffer_referenced(rctx, rbuffer->buf, RADEON_USAGE_READWRITE) ||
                    !rctx->ws->buffer_wait(rbuffer->buf, 0, RADEON_USAGE_READWRITE)) {
                        rctx->invalidate_buffer(&rctx->b, &rbuffer->b.b);
+               } else {
+                       util_range_set_empty(&rbuffer->valid_buffer_range);
                }
+
                /* At this point, the buffer is always idle. */
                usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
        }