Mesa (master): r300g: mapping buffers for read should be unsynchronized
Marek Olšák
mareko at kemper.freedesktop.org
Sat Dec 24 20:36:28 UTC 2011
Module: Mesa
Branch: master
Commit: ec4851253bbf7fd7d11c5570f19f9733a885e471
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ec4851253bbf7fd7d11c5570f19f9733a885e471
Author: Marek Olšák <maraeo at gmail.com>
Date: Sat Dec 24 11:43:10 2011 +0100
r300g: mapping buffers for read should be unsynchronized
The GPU never uses them for write.
---
src/gallium/drivers/r300/r300_screen_buffer.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/src/gallium/drivers/r300/r300_screen_buffer.c b/src/gallium/drivers/r300/r300_screen_buffer.c
index a8392d2..2e9e7d7 100644
--- a/src/gallium/drivers/r300/r300_screen_buffer.c
+++ b/src/gallium/drivers/r300/r300_screen_buffer.c
@@ -107,13 +107,21 @@ r300_buffer_transfer_map( struct pipe_context *pipe,
struct radeon_winsys *rws = r300screen->rws;
struct r300_resource *rbuf = r300_resource(transfer->resource);
uint8_t *map;
+ enum pipe_transfer_usage usage;
if (rbuf->b.user_ptr)
return (uint8_t *) rbuf->b.user_ptr + transfer->box.x;
if (rbuf->constant_buffer)
return (uint8_t *) rbuf->constant_buffer + transfer->box.x;
- map = rws->buffer_map(rbuf->buf, r300->cs, transfer->usage);
+ /* Buffers are never used for write, therefore mapping for read can be
+ * unsynchronized. */
+ usage = transfer->usage;
+ if (!(usage & PIPE_TRANSFER_WRITE)) {
+ usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
+ }
+
+ map = rws->buffer_map(rbuf->buf, r300->cs, usage);
if (map == NULL)
return NULL;
More information about the mesa-commit
mailing list