gallium: Always map for READ flag when DISCARD is not set.
This prevents the driver from discarding a buffer when the whole buffer is mapped for writing, but only a portion is effectively written. This is a temporary fix, because WRITE shouldn't imply DISCARD. The full fix implies using PIPE_BUFFER_USAGE_DISCARD, throughout the code, and will go only into master.
This commit is contained in:
@@ -63,6 +63,13 @@ pipe_buffer_map(struct pipe_screen *screen,
|
||||
if(screen->buffer_map_range) {
|
||||
unsigned offset = 0;
|
||||
unsigned length = buf->size;
|
||||
|
||||
/* XXX: Actually we should be using/detecting DISCARD
|
||||
* instead of assuming that WRITE implies discard */
|
||||
if((usage & PIPE_BUFFER_USAGE_CPU_WRITE) &&
|
||||
!(usage & PIPE_BUFFER_USAGE_DISCARD))
|
||||
usage |= PIPE_BUFFER_USAGE_CPU_READ;
|
||||
|
||||
return screen->buffer_map_range(screen, buf, offset, length, usage);
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user