summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/i915/i915_resource_buffer.c
diff options
context:
space:
mode:
authorJakob Bornecrantz <wallbraker@gmail.com>2010-12-03 19:42:45 +0100
committerJakob Bornecrantz <wallbraker@gmail.com>2011-01-21 20:53:29 +0100
commit7287964f944d7e2bcf409b758163ab75c61b0f8e (patch)
treed5a9c1a26bacb968e5df8c87a15368206af80b35 /src/gallium/drivers/i915/i915_resource_buffer.c
parent484edfc8151ddf63d3e0e7be3b4c8fa3906a0ec9 (diff)
i915g: Use slab allocator for transfers
Also remove unused i915_transfer struct
Diffstat (limited to 'src/gallium/drivers/i915/i915_resource_buffer.c')
-rw-r--r--src/gallium/drivers/i915/i915_resource_buffer.c36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/gallium/drivers/i915/i915_resource_buffer.c b/src/gallium/drivers/i915/i915_resource_buffer.c
index 450203d60a..6e2b490f53 100644
--- a/src/gallium/drivers/i915/i915_resource_buffer.c
+++ b/src/gallium/drivers/i915/i915_resource_buffer.c
@@ -60,6 +60,38 @@ i915_buffer_destroy(struct pipe_screen *screen,
}
+static struct pipe_transfer *
+i915_get_transfer(struct pipe_context *pipe,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box)
+{
+ struct i915_context *i915 = i915_context(pipe);
+ struct pipe_transfer *transfer = util_slab_alloc(&i915->transfer_pool);
+
+ if (transfer == NULL)
+ return NULL;
+
+ transfer->resource = resource;
+ transfer->level = level;
+ transfer->usage = usage;
+ transfer->box = *box;
+
+ /* Note strides are zero, this is ok for buffers, but not for
+ * textures 2d & higher at least.
+ */
+ return transfer;
+}
+
+static void
+i915_transfer_destroy(struct pipe_context *pipe,
+ struct pipe_transfer *transfer)
+{
+ struct i915_context *i915 = i915_context(pipe);
+ util_slab_free(&i915->transfer_pool, transfer);
+}
+
static void *
i915_buffer_transfer_map( struct pipe_context *pipe,
struct pipe_transfer *transfer )
@@ -92,8 +124,8 @@ struct u_resource_vtbl i915_buffer_vtbl =
i915_buffer_get_handle, /* get_handle */
i915_buffer_destroy, /* resource_destroy */
NULL, /* is_resource_referenced */
- u_default_get_transfer, /* get_transfer */
- u_default_transfer_destroy, /* transfer_destroy */
+ i915_get_transfer, /* get_transfer */
+ i915_transfer_destroy, /* transfer_destroy */
i915_buffer_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
u_default_transfer_unmap, /* transfer_unmap */