summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2016-09-27 19:09:24 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2016-10-05 15:42:20 +0200
commit2a83036fe29262c8761812c65d6e81c7198da54e (patch)
tree8712ec0026e00dc11d0f6b55cb56763858f10474
parent0334ba150f429b7d6b0bdc003c4301e0ad5fa21d (diff)
vc4: use the new parent/child pools for transfers
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
-rw-r--r--src/gallium/drivers/vc4/vc4_context.c5
-rw-r--r--src/gallium/drivers/vc4/vc4_context.h2
-rw-r--r--src/gallium/drivers/vc4/vc4_resource.c4
-rw-r--r--src/gallium/drivers/vc4/vc4_screen.c3
-rw-r--r--src/gallium/drivers/vc4/vc4_screen.h3
5 files changed, 11 insertions, 6 deletions
diff --git a/src/gallium/drivers/vc4/vc4_context.c b/src/gallium/drivers/vc4/vc4_context.c
index 3863e4432a..b780b13c90 100644
--- a/src/gallium/drivers/vc4/vc4_context.c
+++ b/src/gallium/drivers/vc4/vc4_context.c
@@ -96,7 +96,7 @@ vc4_context_destroy(struct pipe_context *pctx)
if (vc4->uploader)
u_upload_destroy(vc4->uploader);
- slab_destroy(&vc4->transfer_pool);
+ slab_destroy_child(&vc4->transfer_pool);
pipe_surface_reference(&vc4->framebuffer.cbufs[0], NULL);
pipe_surface_reference(&vc4->framebuffer.zsbuf, NULL);
@@ -139,8 +139,7 @@ vc4_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
vc4->fd = screen->fd;
- slab_create(&vc4->transfer_pool, sizeof(struct vc4_transfer),
- 16);
+ slab_create_child(&vc4->transfer_pool, &screen->transfer_pool);
vc4->blitter = util_blitter_create(pctx);
if (!vc4->blitter)
goto fail;
diff --git a/src/gallium/drivers/vc4/vc4_context.h b/src/gallium/drivers/vc4/vc4_context.h
index 87d8c79241..0d6b8d0e21 100644
--- a/src/gallium/drivers/vc4/vc4_context.h
+++ b/src/gallium/drivers/vc4/vc4_context.h
@@ -297,7 +297,7 @@ struct vc4_context {
*/
struct hash_table *write_jobs;
- struct slab_mempool transfer_pool;
+ struct slab_child_pool transfer_pool;
struct blitter_context *blitter;
/** bitfield of VC4_DIRTY_* */
diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c
index bfa8f40ba1..9932bb3043 100644
--- a/src/gallium/drivers/vc4/vc4_resource.c
+++ b/src/gallium/drivers/vc4/vc4_resource.c
@@ -120,7 +120,7 @@ vc4_resource_transfer_unmap(struct pipe_context *pctx,
}
pipe_resource_reference(&ptrans->resource, NULL);
- slab_free_st(&vc4->transfer_pool, ptrans);
+ slab_free(&vc4->transfer_pool, ptrans);
}
static struct pipe_resource *
@@ -196,7 +196,7 @@ vc4_resource_transfer_map(struct pipe_context *pctx,
if (usage & PIPE_TRANSFER_WRITE)
rsc->writes++;
- trans = slab_alloc_st(&vc4->transfer_pool);
+ trans = slab_alloc(&vc4->transfer_pool);
if (!trans)
return NULL;
diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c
index 3dc85d5e57..64bff5dc22 100644
--- a/src/gallium/drivers/vc4/vc4_screen.c
+++ b/src/gallium/drivers/vc4/vc4_screen.c
@@ -98,6 +98,7 @@ vc4_screen_destroy(struct pipe_screen *pscreen)
util_hash_table_destroy(screen->bo_handles);
vc4_bufmgr_destroy(pscreen);
+ slab_destroy_parent(&screen->transfer_pool);
close(screen->fd);
ralloc_free(pscreen);
}
@@ -614,6 +615,8 @@ vc4_screen_create(int fd)
if (!vc4_get_chip_info(screen))
goto fail;
+ slab_create_parent(&screen->transfer_pool, sizeof(struct vc4_transfer), 16);
+
vc4_fence_init(screen);
vc4_debug = debug_get_option_vc4_debug();
diff --git a/src/gallium/drivers/vc4/vc4_screen.h b/src/gallium/drivers/vc4/vc4_screen.h
index 36fe1c74e9..16003cfccf 100644
--- a/src/gallium/drivers/vc4/vc4_screen.h
+++ b/src/gallium/drivers/vc4/vc4_screen.h
@@ -28,6 +28,7 @@
#include "os/os_thread.h"
#include "state_tracker/drm_driver.h"
#include "util/list.h"
+#include "util/slab.h"
struct vc4_bo;
@@ -64,6 +65,8 @@ struct vc4_screen {
*/
uint64_t finished_seqno;
+ struct slab_parent_pool transfer_pool;
+
struct vc4_bo_cache {
/** List of struct vc4_bo freed, by age. */
struct list_head time_list;