summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/rbug
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2012-10-08 04:06:42 +0200
committerMarek Olšák <[email protected]>2012-10-11 21:12:16 +0200
commit369e46888904c6d379b8b477d9242cff1608e30e (patch)
tree528b10f900f23af3acd22a0edcf50fde0eeee86e /src/gallium/drivers/rbug
parentec4c74a9dc10039d97ad24c4f16bd2400517991d (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.c60
-rw-r--r--src/gallium/drivers/rbug/rbug_core.c11
-rw-r--r--src/gallium/drivers/rbug/rbug_objects.c4
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);
}