diff options
Diffstat (limited to 'src/gallium/include/pipe/p_inlines.h')
-rw-r--r-- | src/gallium/include/pipe/p_inlines.h | 78 |
1 files changed, 26 insertions, 52 deletions
diff --git a/src/gallium/include/pipe/p_inlines.h b/src/gallium/include/pipe/p_inlines.h index a7ce0c2c277..1f19867bdf9 100644 --- a/src/gallium/include/pipe/p_inlines.h +++ b/src/gallium/include/pipe/p_inlines.h @@ -152,13 +152,9 @@ pipe_buffer_map(struct pipe_screen *screen, unsigned usage) { if(screen->buffer_map_range) { - struct pipe_buffer_range read; - struct pipe_buffer_range write; - read.offset = 0; - read.size = usage & PIPE_BUFFER_USAGE_CPU_READ ? buf->size : 0; - write.offset = 0; - write.size = usage & PIPE_BUFFER_USAGE_CPU_WRITE ? buf->size : 0; - return screen->buffer_map_range(screen, buf, read, write, usage); + unsigned offset = 0; + unsigned length = buf->size; + return screen->buffer_map_range(screen, buf, offset, length, usage); } else return screen->buffer_map(screen, buf, usage); @@ -168,42 +164,33 @@ static INLINE void pipe_buffer_unmap(struct pipe_screen *screen, struct pipe_buffer *buf) { - if(screen->buffer_unmap_range) { - struct pipe_buffer_range written; - written.offset = 0; - written.size = buf->size; - screen->buffer_unmap_range(screen, buf, written); - } - else - screen->buffer_unmap(screen, buf); + screen->buffer_unmap(screen, buf); } static INLINE void * pipe_buffer_map_range(struct pipe_screen *screen, struct pipe_buffer *buf, - struct pipe_buffer_range read, - struct pipe_buffer_range write) + unsigned offset, + unsigned length, + unsigned usage) { - unsigned usage = 0; - if(read.size) - usage |= PIPE_BUFFER_USAGE_CPU_READ; - if(write.size) - usage |= PIPE_BUFFER_USAGE_CPU_WRITE; if(screen->buffer_map_range) - return screen->buffer_map_range(screen, buf, read, write, usage); - else - return screen->buffer_map(screen, buf, usage); + return screen->buffer_map_range(screen, buf, offset, length, usage); + else { + uint8_t *map; + map = screen->buffer_map(screen, buf, usage); + return map ? map + offset : NULL; + } } static INLINE void -pipe_buffer_unmap_range(struct pipe_screen *screen, - struct pipe_buffer *buf, - struct pipe_buffer_range written) +pipe_buffer_flush_mapped_range(struct pipe_screen *screen, + struct pipe_buffer *buf, + unsigned offset, + unsigned length) { - if(screen->buffer_unmap_range) - screen->buffer_unmap_range(screen, buf, written); - else - screen->buffer_unmap(screen, buf); + if(screen->buffer_flush_mapped_range) + screen->buffer_flush_mapped_range(screen, buf, offset, length); } static INLINE void @@ -212,23 +199,17 @@ pipe_buffer_write(struct pipe_screen *screen, unsigned offset, unsigned size, const void *data) { - struct pipe_buffer_range read; - struct pipe_buffer_range write; uint8_t *map; assert(offset < buf->size); assert(offset + size <= buf->size); - read.offset = 0; - read.size = 0; - write.offset = offset; - write.size = size; - - map = pipe_buffer_map_range(screen, buf, read, write); + map = pipe_buffer_map_range(screen, buf, offset, size, PIPE_BUFFER_USAGE_CPU_WRITE); assert(map); if(map) { - memcpy(map + offset, data, size); - pipe_buffer_unmap_range(screen, buf, write); + memcpy(map, data, size); + pipe_buffer_flush_mapped_range(screen, buf, offset, size); + pipe_buffer_unmap(screen, buf); } } @@ -238,23 +219,16 @@ pipe_buffer_read(struct pipe_screen *screen, unsigned offset, unsigned size, void *data) { - struct pipe_buffer_range read; - struct pipe_buffer_range write; uint8_t *map; assert(offset < buf->size); assert(offset + size <= buf->size); - read.offset = offset; - read.size = size; - write.offset = 0; - write.size = 0; - - map = pipe_buffer_map_range(screen, buf, read, write); + map = pipe_buffer_map_range(screen, buf, offset, size, PIPE_BUFFER_USAGE_CPU_READ); assert(map); if(map) { - memcpy(data, map + offset, size); - pipe_buffer_unmap_range(screen, buf, write); + memcpy(data, map, size); + pipe_buffer_unmap(screen, buf); } } |