summaryrefslogtreecommitdiff
path: root/src/gallium/include/pipe/p_inlines.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/include/pipe/p_inlines.h')
-rw-r--r--src/gallium/include/pipe/p_inlines.h78
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 a7ce0c2c27..1f19867bdf 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);
}
}