diff options
author | Marek Olšák <[email protected]> | 2012-10-08 04:06:42 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2012-10-11 21:12:16 +0200 |
commit | 369e46888904c6d379b8b477d9242cff1608e30e (patch) | |
tree | 528b10f900f23af3acd22a0edcf50fde0eeee86e /src/gallium/drivers/rbug | |
parent | ec4c74a9dc10039d97ad24c4f16bd2400517991d (diff) |
gallium: unify transfer functions
"get_transfer + transfer_map" becomes "transfer_map".
"transfer_unmap + transfer_destroy" becomes "transfer_unmap".
transfer_map must create and return the transfer object and transfer_unmap
must destroy it.
transfer_map is successful if the returned buffer pointer is not NULL.
If transfer_map fails, the pointer to the transfer object remains unchanged
(i.e. doesn't have to be NULL).
Acked-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/gallium/drivers/rbug')
-rw-r--r-- | src/gallium/drivers/rbug/rbug_context.c | 60 | ||||
-rw-r--r-- | src/gallium/drivers/rbug/rbug_core.c | 11 | ||||
-rw-r--r-- | src/gallium/drivers/rbug/rbug_objects.c | 4 |
3 files changed, 19 insertions, 56 deletions
diff --git a/src/gallium/drivers/rbug/rbug_context.c b/src/gallium/drivers/rbug/rbug_context.c index 59d5af9590a..0b59a0121c2 100644 --- a/src/gallium/drivers/rbug/rbug_context.c +++ b/src/gallium/drivers/rbug/rbug_context.c @@ -1019,66 +1019,34 @@ rbug_context_surface_destroy(struct pipe_context *_pipe, -static struct pipe_transfer * -rbug_context_get_transfer(struct pipe_context *_context, +static void * +rbug_context_transfer_map(struct pipe_context *_context, struct pipe_resource *_resource, unsigned level, unsigned usage, - const struct pipe_box *box) + const struct pipe_box *box, + struct pipe_transfer **transfer) { struct rbug_context *rb_pipe = rbug_context(_context); struct rbug_resource *rb_resource = rbug_resource(_resource); struct pipe_context *context = rb_pipe->pipe; struct pipe_resource *resource = rb_resource->resource; struct pipe_transfer *result; + void *map; pipe_mutex_lock(rb_pipe->call_mutex); - result = context->get_transfer(context, - resource, - level, - usage, - box); + map = context->transfer_map(context, + resource, + level, + usage, + box, &result); pipe_mutex_unlock(rb_pipe->call_mutex); - if (result) - return rbug_transfer_create(rb_pipe, rb_resource, result); - return NULL; + *transfer = rbug_transfer_create(rb_pipe, rb_resource, result); + return *transfer ? map : NULL; } static void -rbug_context_transfer_destroy(struct pipe_context *_pipe, - struct pipe_transfer *_transfer) -{ - struct rbug_context *rb_pipe = rbug_context(_pipe); - struct rbug_transfer *rb_transfer =rbug_transfer(_transfer); - - pipe_mutex_lock(rb_pipe->call_mutex); - rbug_transfer_destroy(rb_pipe, - rb_transfer); - pipe_mutex_unlock(rb_pipe->call_mutex); -} - -static void * -rbug_context_transfer_map(struct pipe_context *_context, - struct pipe_transfer *_transfer) -{ - struct rbug_context *rb_pipe = rbug_context(_context); - struct rbug_transfer *rb_transfer = rbug_transfer(_transfer); - struct pipe_context *context = rb_pipe->pipe; - struct pipe_transfer *transfer = rb_transfer->transfer; - void *ret; - - pipe_mutex_lock(rb_pipe->call_mutex); - ret = context->transfer_map(context, - transfer); - pipe_mutex_unlock(rb_pipe->call_mutex); - - return ret; -} - - - -static void rbug_context_transfer_flush_region(struct pipe_context *_context, struct pipe_transfer *_transfer, const struct pipe_box *box) @@ -1108,6 +1076,8 @@ rbug_context_transfer_unmap(struct pipe_context *_context, pipe_mutex_lock(rb_pipe->call_mutex); context->transfer_unmap(context, transfer); + rbug_transfer_destroy(rb_pipe, + rb_transfer); pipe_mutex_unlock(rb_pipe->call_mutex); } @@ -1217,8 +1187,6 @@ rbug_context_create(struct pipe_screen *_screen, struct pipe_context *pipe) rb_pipe->base.sampler_view_destroy = rbug_context_sampler_view_destroy; rb_pipe->base.create_surface = rbug_context_create_surface; rb_pipe->base.surface_destroy = rbug_context_surface_destroy; - rb_pipe->base.get_transfer = rbug_context_get_transfer; - rb_pipe->base.transfer_destroy = rbug_context_transfer_destroy; rb_pipe->base.transfer_map = rbug_context_transfer_map; rb_pipe->base.transfer_unmap = rbug_context_transfer_unmap; rb_pipe->base.transfer_flush_region = rbug_context_transfer_flush_region; diff --git a/src/gallium/drivers/rbug/rbug_core.c b/src/gallium/drivers/rbug/rbug_core.c index 4608b884181..9cbc0e02f4a 100644 --- a/src/gallium/drivers/rbug/rbug_core.c +++ b/src/gallium/drivers/rbug/rbug_core.c @@ -266,12 +266,10 @@ rbug_texture_read(struct rbug_rbug *tr_rbug, struct rbug_header *header, uint32_ } tex = tr_tex->resource; - t = pipe_get_transfer(context, tex, - gptr->level, gptr->face + gptr->zslice, - PIPE_TRANSFER_READ, - gptr->x, gptr->y, gptr->w, gptr->h); - - map = context->transfer_map(context, t); + map = pipe_transfer_map(context, tex, + gptr->level, gptr->face + gptr->zslice, + PIPE_TRANSFER_READ, + gptr->x, gptr->y, gptr->w, gptr->h, &t); rbug_send_texture_read_reply(tr_rbug->con, serial, t->resource->format, @@ -285,7 +283,6 @@ rbug_texture_read(struct rbug_rbug *tr_rbug, struct rbug_header *header, uint32_ NULL); context->transfer_unmap(context, t); - context->transfer_destroy(context, t); pipe_mutex_unlock(rb_screen->list_mutex); diff --git a/src/gallium/drivers/rbug/rbug_objects.c b/src/gallium/drivers/rbug/rbug_objects.c index 15f5db40093..c64b14c1832 100644 --- a/src/gallium/drivers/rbug/rbug_objects.c +++ b/src/gallium/drivers/rbug/rbug_objects.c @@ -184,7 +184,7 @@ rbug_transfer_create(struct rbug_context *rb_context, return &rb_transfer->base; error: - rb_context->pipe->transfer_destroy(rb_context->pipe, transfer); + rb_context->pipe->transfer_unmap(rb_context->pipe, transfer); return NULL; } @@ -193,8 +193,6 @@ rbug_transfer_destroy(struct rbug_context *rb_context, struct rbug_transfer *rb_transfer) { pipe_resource_reference(&rb_transfer->base.resource, NULL); - rb_transfer->pipe->transfer_destroy(rb_context->pipe, - rb_transfer->transfer); FREE(rb_transfer); } |