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,
|
setup_vertex_data(struct blit_state *ctx,
|
||||||
float x0, float y0, float x1, float y1, float z)
|
float x0, float y0, float x1, float y1, float z)
|
||||||
{
|
{
|
||||||
void *buf;
|
|
||||||
unsigned offset;
|
unsigned offset;
|
||||||
|
|
||||||
ctx->vertices[0][0][0] = x0;
|
ctx->vertices[0][0][0] = x0;
|
||||||
@@ -228,12 +227,8 @@ setup_vertex_data(struct blit_state *ctx,
|
|||||||
|
|
||||||
offset = get_next_slot( ctx );
|
offset = get_next_slot( ctx );
|
||||||
|
|
||||||
buf = pipe_buffer_map(ctx->pipe->screen, ctx->vbuf,
|
pipe_buffer_write(ctx->pipe->screen, ctx->vbuf,
|
||||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
offset, sizeof(ctx->vertices), ctx->vertices);
|
||||||
|
|
||||||
memcpy((char *)buf + offset, ctx->vertices, sizeof(ctx->vertices));
|
|
||||||
|
|
||||||
pipe_buffer_unmap(ctx->pipe->screen, ctx->vbuf);
|
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
@@ -249,7 +244,6 @@ setup_vertex_data_tex(struct blit_state *ctx,
|
|||||||
float s0, float t0, float s1, float t1,
|
float s0, float t0, float s1, float t1,
|
||||||
float z)
|
float z)
|
||||||
{
|
{
|
||||||
void *buf;
|
|
||||||
unsigned offset;
|
unsigned offset;
|
||||||
|
|
||||||
ctx->vertices[0][0][0] = x0;
|
ctx->vertices[0][0][0] = x0;
|
||||||
@@ -278,12 +272,8 @@ setup_vertex_data_tex(struct blit_state *ctx,
|
|||||||
|
|
||||||
offset = get_next_slot( ctx );
|
offset = get_next_slot( ctx );
|
||||||
|
|
||||||
buf = pipe_buffer_map(ctx->pipe->screen, ctx->vbuf,
|
pipe_buffer_write(ctx->pipe->screen, ctx->vbuf,
|
||||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
offset, sizeof(ctx->vertices), ctx->vertices);
|
||||||
|
|
||||||
memcpy((char *)buf + offset, ctx->vertices, sizeof(ctx->vertices));
|
|
||||||
|
|
||||||
pipe_buffer_unmap(ctx->pipe->screen, ctx->vbuf);
|
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
@@ -1368,7 +1368,6 @@ get_next_slot(struct gen_mipmap_state *ctx)
|
|||||||
static unsigned
|
static unsigned
|
||||||
set_vertex_data(struct gen_mipmap_state *ctx, float width, float height)
|
set_vertex_data(struct gen_mipmap_state *ctx, float width, float height)
|
||||||
{
|
{
|
||||||
void *buf;
|
|
||||||
unsigned offset;
|
unsigned offset;
|
||||||
|
|
||||||
ctx->vertices[0][0][0] = 0.0f; /*x*/
|
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 );
|
offset = get_next_slot( ctx );
|
||||||
|
|
||||||
buf = pipe_buffer_map(ctx->pipe->screen, ctx->vbuf,
|
pipe_buffer_write(ctx->pipe->screen, ctx->vbuf,
|
||||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
offset, sizeof(ctx->vertices), ctx->vertices);
|
||||||
|
|
||||||
memcpy((char *)buf + offset, ctx->vertices, sizeof(ctx->vertices));
|
|
||||||
|
|
||||||
pipe_buffer_unmap(ctx->pipe->screen, ctx->vbuf);
|
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
@@ -161,6 +161,44 @@ pipe_buffer_unmap(struct pipe_screen *screen,
|
|||||||
screen->buffer_unmap(screen, buf);
|
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!
|
/* XXX: thread safety issues!
|
||||||
*/
|
*/
|
||||||
static INLINE void
|
static INLINE void
|
||||||
|
@@ -85,12 +85,10 @@ void st_upload_constants( struct st_context *st,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* load Mesa constants into the constant buffer */
|
/* load Mesa constants into the constant buffer */
|
||||||
if (cbuf->buffer) {
|
if (cbuf->buffer)
|
||||||
void *map = pipe_buffer_map(pipe->screen, cbuf->buffer,
|
pipe_buffer_write(pipe->screen, cbuf->buffer,
|
||||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
0, paramBytes,
|
||||||
memcpy(map, params->ParameterValues, paramBytes);
|
params->ParameterValues);
|
||||||
pipe_buffer_unmap(pipe->screen, cbuf->buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
st->pipe->set_constant_buffer(st->pipe, id, 0, cbuf);
|
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 */
|
/* put vertex data into vbuf */
|
||||||
{
|
pipe_buffer_write(pipe->screen,
|
||||||
char *buf = pipe_buffer_map(pipe->screen,
|
st->bitmap.vbuf,
|
||||||
st->bitmap.vbuf,
|
st->bitmap.vbuf_slot * sizeof st->bitmap.vertices,
|
||||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
sizeof st->bitmap.vertices,
|
||||||
|
st->bitmap.vertices);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return st->bitmap.vbuf_slot++ * sizeof 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 pipe_context *pipe = st_context(ctx)->pipe;
|
||||||
struct st_buffer_object *st_obj = st_buffer_object(obj);
|
struct st_buffer_object *st_obj = st_buffer_object(obj);
|
||||||
char *map;
|
|
||||||
|
|
||||||
if (offset >= st_obj->size || size > (st_obj->size - offset))
|
if (offset >= st_obj->size || size > (st_obj->size - offset))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
map = pipe_buffer_map(pipe->screen, st_obj->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
|
pipe_buffer_write(pipe->screen, st_obj->buffer, offset, size, data);
|
||||||
memcpy(map + offset, data, size);
|
|
||||||
pipe_buffer_unmap(pipe->screen, st_obj->buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -123,14 +120,11 @@ st_bufferobj_get_subdata(GLcontext *ctx,
|
|||||||
{
|
{
|
||||||
struct pipe_context *pipe = st_context(ctx)->pipe;
|
struct pipe_context *pipe = st_context(ctx)->pipe;
|
||||||
struct st_buffer_object *st_obj = st_buffer_object(obj);
|
struct st_buffer_object *st_obj = st_buffer_object(obj);
|
||||||
char *map;
|
|
||||||
|
|
||||||
if (offset >= st_obj->size || size > (st_obj->size - offset))
|
if (offset >= st_obj->size || size > (st_obj->size - offset))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
map = pipe_buffer_map(pipe->screen, st_obj->buffer, PIPE_BUFFER_USAGE_CPU_READ);
|
pipe_buffer_read(pipe->screen, st_obj->buffer, offset, size, data);
|
||||||
memcpy(data, map + offset, size);
|
|
||||||
pipe_buffer_unmap(pipe->screen, st_obj->buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -150,7 +150,6 @@ draw_quad(GLcontext *ctx,
|
|||||||
struct pipe_context *pipe = st->pipe;
|
struct pipe_context *pipe = st->pipe;
|
||||||
const GLuint max_slots = 1024 / sizeof(st->clear.vertices);
|
const GLuint max_slots = 1024 / sizeof(st->clear.vertices);
|
||||||
GLuint i;
|
GLuint i;
|
||||||
void *buf;
|
|
||||||
|
|
||||||
if (st->clear.vbuf_slot >= max_slots) {
|
if (st->clear.vbuf_slot >= max_slots) {
|
||||||
pipe_buffer_reference(pipe->screen, &st->clear.vbuf, NULL);
|
pipe_buffer_reference(pipe->screen, &st->clear.vbuf, NULL);
|
||||||
@@ -186,13 +185,10 @@ draw_quad(GLcontext *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* put vertex data into vbuf */
|
/* put vertex data into vbuf */
|
||||||
buf = pipe_buffer_map(pipe->screen, st->clear.vbuf, PIPE_BUFFER_USAGE_CPU_WRITE);
|
pipe_buffer_write(pipe->screen, st->clear.vbuf,
|
||||||
|
st->clear.vbuf_slot * sizeof(st->clear.vertices),
|
||||||
memcpy((char *)buf + st->clear.vbuf_slot * sizeof(st->clear.vertices),
|
sizeof(st->clear.vertices),
|
||||||
st->clear.vertices,
|
st->clear.vertices);
|
||||||
sizeof(st->clear.vertices));
|
|
||||||
|
|
||||||
pipe_buffer_unmap(pipe->screen, st->clear.vbuf);
|
|
||||||
|
|
||||||
/* draw */
|
/* draw */
|
||||||
util_draw_vertex_buffer(pipe,
|
util_draw_vertex_buffer(pipe,
|
||||||
|
@@ -485,14 +485,11 @@ draw_quad(GLcontext *ctx, GLfloat x0, GLfloat y0, GLfloat z,
|
|||||||
|
|
||||||
{
|
{
|
||||||
struct pipe_buffer *buf;
|
struct pipe_buffer *buf;
|
||||||
ubyte *map;
|
|
||||||
|
|
||||||
/* allocate/load buffer object with vertex data */
|
/* allocate/load buffer object with vertex data */
|
||||||
buf = pipe_buffer_create(pipe->screen, 32, PIPE_BUFFER_USAGE_VERTEX,
|
buf = pipe_buffer_create(pipe->screen, 32, PIPE_BUFFER_USAGE_VERTEX,
|
||||||
sizeof(verts));
|
sizeof(verts));
|
||||||
map = pipe_buffer_map(pipe->screen, buf, PIPE_BUFFER_USAGE_CPU_WRITE);
|
pipe_buffer_write(pipe->screen, buf, 0, sizeof(verts), verts);
|
||||||
memcpy(map, verts, sizeof(verts));
|
|
||||||
pipe_buffer_unmap(pipe->screen, buf);
|
|
||||||
|
|
||||||
util_draw_vertex_buffer(pipe, buf, 0,
|
util_draw_vertex_buffer(pipe, buf, 0,
|
||||||
PIPE_PRIM_QUADS,
|
PIPE_PRIM_QUADS,
|
||||||
|
Reference in New Issue
Block a user