vc4: use the new parent/child pools for transfers
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 27 Sep 2016 17:09:24 +0000 (19:09 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 5 Oct 2016 13:42:20 +0000 (15:42 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/vc4/vc4_context.c
src/gallium/drivers/vc4/vc4_context.h
src/gallium/drivers/vc4/vc4_resource.c
src/gallium/drivers/vc4/vc4_screen.c
src/gallium/drivers/vc4/vc4_screen.h

index 3863e4432a9837cb09ff6f3ebdd407bbe8da5172..b780b13c90f4a40531b4cff71a34a37114ee81ef 100644 (file)
@@ -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;
index 87d8c79241bf532e5e47b7911a41f8fae0f39742..0d6b8d0e21803a50ef7dbba441bf35dddb8b048d 100644 (file)
@@ -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_* */
index bfa8f40ba13f90a26be5fa32fb061efdbefd783b..9932bb304383b640724d91650c8e75e5142693aa 100644 (file)
@@ -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;
 
index 3dc85d5e573a700c0cd544e91b8f999a3e4b1cc6..64bff5dc227d921444bd3cd34dafa8990231aebb 100644 (file)
@@ -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();
index 36fe1c74e9548e7d1b82ffd5b7d1a243caf582b4..16003cfccf061ac0dde8d53a425ccca85d838350 100644 (file)
@@ -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;