From 693fac8ae2e5812265222b1335695bd33b90bd8a Mon Sep 17 00:00:00 2001 From: José Fonseca Date: Tue, 24 Feb 2009 11:30:25 +0000 Subject: gallium: Add pipe_buffer_write/read inlines. Saves code, and will simplify future interface changes. --- src/gallium/auxiliary/util/u_blit.c | 18 +++---------- src/gallium/auxiliary/util/u_gen_mipmap.c | 9 ++----- src/gallium/include/pipe/p_inlines.h | 38 ++++++++++++++++++++++++++++ src/mesa/state_tracker/st_atom_constbuf.c | 10 +++----- src/mesa/state_tracker/st_cb_bitmap.c | 16 ++++-------- src/mesa/state_tracker/st_cb_bufferobjects.c | 10 ++------ src/mesa/state_tracker/st_cb_clear.c | 12 +++------ src/mesa/state_tracker/st_cb_drawpixels.c | 5 +--- 8 files changed, 60 insertions(+), 58 deletions(-) diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c index efc3a874cc..4cc720269d 100644 --- a/src/gallium/auxiliary/util/u_blit.c +++ b/src/gallium/auxiliary/util/u_blit.c @@ -199,7 +199,6 @@ static unsigned setup_vertex_data(struct blit_state *ctx, float x0, float y0, float x1, float y1, float z) { - void *buf; unsigned offset; ctx->vertices[0][0][0] = x0; @@ -228,12 +227,8 @@ setup_vertex_data(struct blit_state *ctx, offset = get_next_slot( ctx ); - buf = pipe_buffer_map(ctx->pipe->screen, ctx->vbuf, - PIPE_BUFFER_USAGE_CPU_WRITE); - - memcpy((char *)buf + offset, ctx->vertices, sizeof(ctx->vertices)); - - pipe_buffer_unmap(ctx->pipe->screen, ctx->vbuf); + pipe_buffer_write(ctx->pipe->screen, ctx->vbuf, + offset, sizeof(ctx->vertices), ctx->vertices); return offset; } @@ -249,7 +244,6 @@ setup_vertex_data_tex(struct blit_state *ctx, float s0, float t0, float s1, float t1, float z) { - void *buf; unsigned offset; ctx->vertices[0][0][0] = x0; @@ -278,12 +272,8 @@ setup_vertex_data_tex(struct blit_state *ctx, offset = get_next_slot( ctx ); - buf = pipe_buffer_map(ctx->pipe->screen, ctx->vbuf, - PIPE_BUFFER_USAGE_CPU_WRITE); - - memcpy((char *)buf + offset, ctx->vertices, sizeof(ctx->vertices)); - - pipe_buffer_unmap(ctx->pipe->screen, ctx->vbuf); + pipe_buffer_write(ctx->pipe->screen, ctx->vbuf, + offset, sizeof(ctx->vertices), ctx->vertices); return offset; } diff --git a/src/gallium/auxiliary/util/u_gen_mipmap.c b/src/gallium/auxiliary/util/u_gen_mipmap.c index 90483fcb21..1857a71dd8 100644 --- a/src/gallium/auxiliary/util/u_gen_mipmap.c +++ b/src/gallium/auxiliary/util/u_gen_mipmap.c @@ -1368,7 +1368,6 @@ get_next_slot(struct gen_mipmap_state *ctx) static unsigned set_vertex_data(struct gen_mipmap_state *ctx, float width, float height) { - void *buf; unsigned offset; ctx->vertices[0][0][0] = 0.0f; /*x*/ @@ -1393,12 +1392,8 @@ set_vertex_data(struct gen_mipmap_state *ctx, float width, float height) offset = get_next_slot( ctx ); - buf = pipe_buffer_map(ctx->pipe->screen, ctx->vbuf, - PIPE_BUFFER_USAGE_CPU_WRITE); - - memcpy((char *)buf + offset, ctx->vertices, sizeof(ctx->vertices)); - - pipe_buffer_unmap(ctx->pipe->screen, ctx->vbuf); + pipe_buffer_write(ctx->pipe->screen, ctx->vbuf, + offset, sizeof(ctx->vertices), ctx->vertices); return offset; } diff --git a/src/gallium/include/pipe/p_inlines.h b/src/gallium/include/pipe/p_inlines.h index ffbe2d7612..4eb928d882 100644 --- a/src/gallium/include/pipe/p_inlines.h +++ b/src/gallium/include/pipe/p_inlines.h @@ -161,6 +161,44 @@ pipe_buffer_unmap(struct pipe_screen *screen, screen->buffer_unmap(screen, buf); } +static INLINE void +pipe_buffer_write(struct pipe_screen *screen, + struct pipe_buffer *buf, + unsigned offset, unsigned size, + const void *data) +{ + uint8_t *map; + + assert(offset < buf->size); + assert(offset + size <= buf->size); + + map = pipe_buffer_map(screen, buf, PIPE_BUFFER_USAGE_CPU_WRITE); + assert(map); + if(map) { + memcpy(map + offset, data, size); + pipe_buffer_unmap(screen, buf); + } +} + +static INLINE void +pipe_buffer_read(struct pipe_screen *screen, + struct pipe_buffer *buf, + unsigned offset, unsigned size, + void *data) +{ + uint8_t *map; + + assert(offset < buf->size); + assert(offset + size <= buf->size); + + map = pipe_buffer_map(screen, buf, PIPE_BUFFER_USAGE_CPU_READ); + assert(map); + if(map) { + memcpy(data, map + offset, size); + pipe_buffer_unmap(screen, buf); + } +} + /* XXX: thread safety issues! */ static INLINE void diff --git a/src/mesa/state_tracker/st_atom_constbuf.c b/src/mesa/state_tracker/st_atom_constbuf.c index 514b10cd02..2df6fef210 100644 --- a/src/mesa/state_tracker/st_atom_constbuf.c +++ b/src/mesa/state_tracker/st_atom_constbuf.c @@ -85,12 +85,10 @@ void st_upload_constants( struct st_context *st, } /* load Mesa constants into the constant buffer */ - if (cbuf->buffer) { - void *map = pipe_buffer_map(pipe->screen, cbuf->buffer, - PIPE_BUFFER_USAGE_CPU_WRITE); - memcpy(map, params->ParameterValues, paramBytes); - pipe_buffer_unmap(pipe->screen, cbuf->buffer); - } + if (cbuf->buffer) + pipe_buffer_write(pipe->screen, cbuf->buffer, + 0, paramBytes, + params->ParameterValues); st->pipe->set_constant_buffer(st->pipe, id, 0, cbuf); } diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index ef44a08859..66d7cbf8e6 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -417,17 +417,11 @@ setup_bitmap_vertex_data(struct st_context *st, } /* put vertex data into vbuf */ - { - char *buf = pipe_buffer_map(pipe->screen, - st->bitmap.vbuf, - PIPE_BUFFER_USAGE_CPU_WRITE); - - memcpy(buf + st->bitmap.vbuf_slot * sizeof st->bitmap.vertices, - st->bitmap.vertices, - sizeof st->bitmap.vertices); - - pipe_buffer_unmap(pipe->screen, st->bitmap.vbuf); - } + pipe_buffer_write(pipe->screen, + st->bitmap.vbuf, + st->bitmap.vbuf_slot * sizeof st->bitmap.vertices, + sizeof st->bitmap.vertices, + st->bitmap.vertices); return st->bitmap.vbuf_slot++ * sizeof st->bitmap.vertices; } diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c index aba1cda932..562ac6c65c 100644 --- a/src/mesa/state_tracker/st_cb_bufferobjects.c +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c @@ -100,14 +100,11 @@ st_bufferobj_subdata(GLcontext *ctx, { struct pipe_context *pipe = st_context(ctx)->pipe; struct st_buffer_object *st_obj = st_buffer_object(obj); - char *map; if (offset >= st_obj->size || size > (st_obj->size - offset)) return; - map = pipe_buffer_map(pipe->screen, st_obj->buffer, PIPE_BUFFER_USAGE_CPU_WRITE); - memcpy(map + offset, data, size); - pipe_buffer_unmap(pipe->screen, st_obj->buffer); + pipe_buffer_write(pipe->screen, st_obj->buffer, offset, size, data); } @@ -123,14 +120,11 @@ st_bufferobj_get_subdata(GLcontext *ctx, { struct pipe_context *pipe = st_context(ctx)->pipe; struct st_buffer_object *st_obj = st_buffer_object(obj); - char *map; if (offset >= st_obj->size || size > (st_obj->size - offset)) return; - map = pipe_buffer_map(pipe->screen, st_obj->buffer, PIPE_BUFFER_USAGE_CPU_READ); - memcpy(data, map + offset, size); - pipe_buffer_unmap(pipe->screen, st_obj->buffer); + pipe_buffer_read(pipe->screen, st_obj->buffer, offset, size, data); } diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c index 20eaaa4ae7..c6fc7cec27 100644 --- a/src/mesa/state_tracker/st_cb_clear.c +++ b/src/mesa/state_tracker/st_cb_clear.c @@ -150,7 +150,6 @@ draw_quad(GLcontext *ctx, struct pipe_context *pipe = st->pipe; const GLuint max_slots = 1024 / sizeof(st->clear.vertices); GLuint i; - void *buf; if (st->clear.vbuf_slot >= max_slots) { pipe_buffer_reference(pipe->screen, &st->clear.vbuf, NULL); @@ -186,13 +185,10 @@ draw_quad(GLcontext *ctx, } /* put vertex data into vbuf */ - buf = pipe_buffer_map(pipe->screen, st->clear.vbuf, PIPE_BUFFER_USAGE_CPU_WRITE); - - memcpy((char *)buf + st->clear.vbuf_slot * sizeof(st->clear.vertices), - st->clear.vertices, - sizeof(st->clear.vertices)); - - pipe_buffer_unmap(pipe->screen, st->clear.vbuf); + pipe_buffer_write(pipe->screen, st->clear.vbuf, + st->clear.vbuf_slot * sizeof(st->clear.vertices), + sizeof(st->clear.vertices), + st->clear.vertices); /* draw */ util_draw_vertex_buffer(pipe, diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index 13307fc2c1..c73d0080ca 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -485,14 +485,11 @@ draw_quad(GLcontext *ctx, GLfloat x0, GLfloat y0, GLfloat z, { struct pipe_buffer *buf; - ubyte *map; /* allocate/load buffer object with vertex data */ buf = pipe_buffer_create(pipe->screen, 32, PIPE_BUFFER_USAGE_VERTEX, sizeof(verts)); - map = pipe_buffer_map(pipe->screen, buf, PIPE_BUFFER_USAGE_CPU_WRITE); - memcpy(map, verts, sizeof(verts)); - pipe_buffer_unmap(pipe->screen, buf); + pipe_buffer_write(pipe->screen, buf, 0, sizeof(verts), verts); util_draw_vertex_buffer(pipe, buf, 0, PIPE_PRIM_QUADS, -- cgit v1.2.3