add fence interfaces and buffer create flags to pipe_winsys

This commit is contained in:
keithw
2007-11-19 20:05:38 +00:00
committed by José Fonseca
parent f83d4e7bde
commit cd1eefee84
6 changed files with 42 additions and 20 deletions

View File

@@ -99,7 +99,7 @@ i915_vbuf_render_allocate_vertices( struct vbuf_render *render,
/* FIXME: handle failure */ /* FIXME: handle failure */
assert(!i915->vbo); assert(!i915->vbo);
i915->vbo = winsys->buffer_create(winsys, 64); i915->vbo = winsys->buffer_create(winsys, 64, 0, 0);
winsys->buffer_data( winsys, i915->vbo, winsys->buffer_data( winsys, i915->vbo,
size, NULL, size, NULL,
I915_BUFFER_USAGE_LIT_VERTEX ); I915_BUFFER_USAGE_LIT_VERTEX );

View File

@@ -170,8 +170,12 @@
/** /**
* Buffer access flags * Buffer access flags
*/ */
#define PIPE_BUFFER_FLAG_READ 0x1 #define PIPE_BUFFER_FLAG_READ 0x1
#define PIPE_BUFFER_FLAG_WRITE 0x2 #define PIPE_BUFFER_FLAG_WRITE 0x2
#define PIPE_BUFFER_FLAG_MEM_LOCAL 0x4
#define PIPE_BUFFER_FLAG_CACHED 0x8
#define PIPE_BUFFER_FLAG_CUSTOM (1<<16)
/** /**

View File

@@ -59,6 +59,7 @@ struct pipe_surface;
/** Opaque type */ /** Opaque type */
struct pipe_buffer_handle; struct pipe_buffer_handle;
struct pipe_fence_handle;
struct pipe_winsys struct pipe_winsys
{ {
@@ -104,8 +105,10 @@ struct pipe_winsys
* systems must then implement that interface (rather than the * systems must then implement that interface (rather than the
* other way around...). * other way around...).
*/ */
struct pipe_buffer_handle *(*buffer_create)(struct pipe_winsys *sws, struct pipe_buffer_handle *(*buffer_create)( struct pipe_winsys *sws,
unsigned alignment ); unsigned alignment,
unsigned flags,
unsigned hint );
/** Create a buffer that wraps user-space data */ /** Create a buffer that wraps user-space data */
struct pipe_buffer_handle *(*user_buffer_create)(struct pipe_winsys *sws, struct pipe_buffer_handle *(*user_buffer_create)(struct pipe_winsys *sws,
@@ -136,24 +139,39 @@ struct pipe_winsys
* usage argument is only an optimization hint, not a guarantee, therefore * usage argument is only an optimization hint, not a guarantee, therefore
* proper behavior must be observed in all circumstances. * proper behavior must be observed in all circumstances.
*/ */
void (*buffer_data)(struct pipe_winsys *sws, int (*buffer_data)(struct pipe_winsys *sws,
struct pipe_buffer_handle *buf, struct pipe_buffer_handle *buf,
unsigned size, const void *data, unsigned size, const void *data,
unsigned usage); unsigned usage);
/** Modify some or all of the data contained in a buffer's data store */ /** Modify some or all of the data contained in a buffer's data store */
void (*buffer_subdata)(struct pipe_winsys *sws, int (*buffer_subdata)(struct pipe_winsys *sws,
struct pipe_buffer_handle *buf, struct pipe_buffer_handle *buf,
unsigned long offset, unsigned long offset,
unsigned long size, unsigned long size,
const void *data); const void *data);
/** Query some or all of the data contained in a buffer's data store */ /** Query some or all of the data contained in a buffer's data store */
void (*buffer_get_subdata)(struct pipe_winsys *sws, int (*buffer_get_subdata)(struct pipe_winsys *sws,
struct pipe_buffer_handle *buf, struct pipe_buffer_handle *buf,
unsigned long offset, unsigned long offset,
unsigned long size, unsigned long size,
void *data); void *data);
void (*fence_reference)( struct pipe_winsys *sws,
struct pipe_fence_handle **ptr,
struct pipe_fence_handle *fence );
int (*fence_signalled)( struct pipe_winsys *sws,
struct pipe_fence_handle *fence,
unsigned flag );
int (*fence_finish)( struct pipe_winsys *sws,
struct pipe_fence_handle *fence,
unsigned flag );
}; };

View File

@@ -70,7 +70,7 @@ void st_upload_constants( struct st_context *st,
_mesa_load_state_parameters(st->ctx, params); _mesa_load_state_parameters(st->ctx, params);
if (!cbuf->buffer) if (!cbuf->buffer)
cbuf->buffer = ws->buffer_create(ws, 1); cbuf->buffer = ws->buffer_create(ws, 1, 0, 0);
if (0) if (0)
{ {

View File

@@ -63,7 +63,7 @@ st_bufferobj_alloc(GLcontext *ctx, GLuint name, GLenum target)
_mesa_initialize_buffer_object(&st_obj->Base, name, target); _mesa_initialize_buffer_object(&st_obj->Base, name, target);
st_obj->buffer = st->pipe->winsys->buffer_create( st->pipe->winsys, 32 ); st_obj->buffer = st->pipe->winsys->buffer_create( st->pipe->winsys, 32, 0, 0 );
return &st_obj->Base; return &st_obj->Base;
} }

View File

@@ -95,7 +95,7 @@ static void
create_default_attribs_buffer(struct st_context *st) create_default_attribs_buffer(struct st_context *st)
{ {
struct pipe_context *pipe = st->pipe; struct pipe_context *pipe = st->pipe;
st->default_attrib_buffer = pipe->winsys->buffer_create( pipe->winsys, 32 ); st->default_attrib_buffer = pipe->winsys->buffer_create( pipe->winsys, 32, 0, 0 );
} }
@@ -288,7 +288,7 @@ st_draw_vertices(GLcontext *ctx, unsigned prim,
} }
/* XXX create one-time */ /* XXX create one-time */
vbuf = pipe->winsys->buffer_create(pipe->winsys, 32); vbuf = pipe->winsys->buffer_create(pipe->winsys, 32, 0, 0);
pipe->winsys->buffer_data(pipe->winsys, vbuf, pipe->winsys->buffer_data(pipe->winsys, vbuf,
vertex_bytes, verts, vertex_bytes, verts,
PIPE_BUFFER_USAGE_VERTEX); PIPE_BUFFER_USAGE_VERTEX);