gallium: Add pipe_buffer_write/read inlines.
Saves code, and will simplify future interface changes.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -417,17 +417,11 @@ setup_bitmap_vertex_data(struct st_context *st,
|
||||
}
|
||||
|
||||
/* put vertex data into vbuf */
|
||||
{
|
||||
char *buf = pipe_buffer_map(pipe->screen,
|
||||
pipe_buffer_write(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);
|
||||
}
|
||||
st->bitmap.vbuf_slot * sizeof st->bitmap.vertices,
|
||||
sizeof st->bitmap.vertices,
|
||||
st->bitmap.vertices);
|
||||
|
||||
return st->bitmap.vbuf_slot++ * sizeof st->bitmap.vertices;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user