summaryrefslogtreecommitdiff
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorJosé Fonseca <jrfonseca@tungstengraphics.com>2007-11-05 18:04:35 +0000
committerJosé Fonseca <jrfonseca@tungstengraphics.com>2007-11-06 14:49:38 +0000
commitfa1a66d7fc4fd7854de7958a48e4992edd154489 (patch)
treece48a896ebbef8b09ee363774cdfdf86dfb52da6 /src/mesa/state_tracker
parent4f79dbd5aa6b8a955ac9dcc43cf0852acd89a320 (diff)
Supply buffer usage hints to winsys.
Winsys driver needs some hints in order to allocate the appropriate kind of memory for the buffer.
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_atom_constbuf.c3
-rw-r--r--src/mesa/state_tracker/st_cb_bufferobjects.c20
-rw-r--r--src/mesa/state_tracker/st_cb_rasterpos.c7
-rw-r--r--src/mesa/state_tracker/st_draw.c4
4 files changed, 29 insertions, 5 deletions
diff --git a/src/mesa/state_tracker/st_atom_constbuf.c b/src/mesa/state_tracker/st_atom_constbuf.c
index 7da7136676..446250c226 100644
--- a/src/mesa/state_tracker/st_atom_constbuf.c
+++ b/src/mesa/state_tracker/st_atom_constbuf.c
@@ -80,7 +80,8 @@ void st_upload_constants( struct st_context *st,
}
/* load Mesa constants into the constant buffer */
- ws->buffer_data(ws, cbuf->buffer, paramBytes, params->ParameterValues);
+ ws->buffer_data(ws, cbuf->buffer, paramBytes, params->ParameterValues,
+ PIPE_BUFFER_USAGE_CONSTANT);
cbuf->size = paramBytes;
diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c
index a593bd74d1..99e1eb3c7a 100644
--- a/src/mesa/state_tracker/st_cb_bufferobjects.c
+++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
@@ -104,11 +104,29 @@ st_bufferobj_data(GLcontext *ctx,
{
struct pipe_context *pipe = st_context(ctx)->pipe;
struct st_buffer_object *st_obj = st_buffer_object(obj);
+ unsigned buffer_usage;
st_obj->Base.Size = size;
st_obj->Base.Usage = usage;
+
+ switch(target) {
+ case GL_PIXEL_PACK_BUFFER_ARB:
+ case GL_PIXEL_UNPACK_BUFFER_ARB:
+ buffer_usage = PIPE_BUFFER_USAGE_PIXEL;
+ break;
+ case GL_ARRAY_BUFFER_ARB:
+ buffer_usage = PIPE_BUFFER_USAGE_VERTEX;
+ break;
+ case GL_ELEMENT_ARRAY_BUFFER_ARB:
+ buffer_usage = PIPE_BUFFER_USAGE_INDEX;
+ break;
+ default:
+ buffer_usage = 0;
+ }
- pipe->winsys->buffer_data( pipe->winsys, st_obj->buffer, size, data );
+ pipe->winsys->buffer_data( pipe->winsys, st_obj->buffer,
+ size, data,
+ buffer_usage );
}
diff --git a/src/mesa/state_tracker/st_cb_rasterpos.c b/src/mesa/state_tracker/st_cb_rasterpos.c
index 40807fc05a..5b97c1ee34 100644
--- a/src/mesa/state_tracker/st_cb_rasterpos.c
+++ b/src/mesa/state_tracker/st_cb_rasterpos.c
@@ -282,7 +282,9 @@ st_RasterPos(GLcontext *ctx, const GLfloat v[4])
const unsigned size = sizeof(ctx->Current.Attrib);
const void *data = ctx->Current.Attrib;
/* colors, texcoords, etc */
- pipe->winsys->buffer_data(pipe->winsys, buf, size, data);
+ pipe->winsys->buffer_data(pipe->winsys, buf,
+ size, data,
+ PIPE_BUFFER_USAGE_VERTEX);
/* position */
pipe->winsys->buffer_subdata(pipe->winsys, buf,
0, /* offset */
@@ -301,7 +303,8 @@ st_RasterPos(GLcontext *ctx, const GLfloat v[4])
fb_buf.start_offset = 0;
pipe->winsys->buffer_data(pipe->winsys, fb_buf.buffer,
fb_buf.size,
- NULL); /* data */
+ NULL, /* data */
+ PIPE_BUFFER_USAGE_VERTEX);
if (pipe->set_feedback_buffer)
pipe->set_feedback_buffer(pipe, 0, &fb_buf);
}
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index c3f33a447e..3e2ed6cada 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -289,7 +289,9 @@ st_draw_vertices(GLcontext *ctx, unsigned prim,
/* XXX create one-time */
vbuf = pipe->winsys->buffer_create(pipe->winsys, 32);
- pipe->winsys->buffer_data(pipe->winsys, vbuf, vertex_bytes, verts);
+ pipe->winsys->buffer_data(pipe->winsys, vbuf,
+ vertex_bytes, verts,
+ PIPE_BUFFER_USAGE_VERTEX);
/* tell pipe about the vertex buffer */
vbuffer.buffer = vbuf;