From: Nicolai Hähnle <nicolai.haeh...@amd.com> --- src/gallium/drivers/vc4/vc4_context.c | 5 ++--- src/gallium/drivers/vc4/vc4_context.h | 2 +- src/gallium/drivers/vc4/vc4_resource.c | 4 ++-- src/gallium/drivers/vc4/vc4_screen.c | 3 +++ src/gallium/drivers/vc4/vc4_screen.h | 3 +++ 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 3863e44..b780b13 100644 --- a/src/gallium/drivers/vc4/vc4_context.c +++ b/src/gallium/drivers/vc4/vc4_context.c @@ -89,21 +89,21 @@ vc4_context_destroy(struct pipe_context *pctx) if (vc4->blitter) util_blitter_destroy(vc4->blitter); if (vc4->primconvert) util_primconvert_destroy(vc4->primconvert); 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); vc4_program_fini(pctx); ralloc_free(vc4); } struct pipe_context * @@ -132,22 +132,21 @@ vc4_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) vc4_draw_init(pctx); vc4_state_init(pctx); vc4_program_init(pctx); vc4_query_init(pctx); vc4_resource_context_init(pctx); vc4_job_init(vc4); 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; vc4->primconvert = util_primconvert_create(pctx, (1 << PIPE_PRIM_QUADS) - 1); if (!vc4->primconvert) goto fail; vc4->uploader = u_upload_create(pctx, 16 * 1024, diff --git a/src/gallium/drivers/vc4/vc4_context.h b/src/gallium/drivers/vc4/vc4_context.h index 87d8c79..0d6b8d0 100644 --- a/src/gallium/drivers/vc4/vc4_context.h +++ b/src/gallium/drivers/vc4/vc4_context.h @@ -290,21 +290,21 @@ struct vc4_context { struct hash_table *jobs; /** * Map from vc4_resource to a job writing to that resource. * * Primarily for flushing jobs rendering to textures that are now * being read from. */ struct hash_table *write_jobs; - struct slab_mempool transfer_pool; + struct slab_child_pool transfer_pool; struct blitter_context *blitter; /** bitfield of VC4_DIRTY_* */ uint32_t dirty; struct primconvert_context *primconvert; struct hash_table *fs_cache, *vs_cache; struct set *fs_inputs_set; uint32_t next_uncompiled_program_id; diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c index bfa8f40..9932bb3 100644 --- a/src/gallium/drivers/vc4/vc4_resource.c +++ b/src/gallium/drivers/vc4/vc4_resource.c @@ -113,21 +113,21 @@ vc4_resource_transfer_unmap(struct pipe_context *pctx, blit.mask = util_format_get_mask(ptrans->resource->format); blit.filter = PIPE_TEX_FILTER_NEAREST; pctx->blit(pctx, &blit); pipe_resource_reference(&trans->ss_resource, NULL); } pipe_resource_reference(&ptrans->resource, NULL); - slab_free_st(&vc4->transfer_pool, ptrans); + slab_free(&vc4->transfer_pool, ptrans); } static struct pipe_resource * vc4_get_temp_resource(struct pipe_context *pctx, struct pipe_resource *prsc, const struct pipe_box *box) { struct pipe_resource temp_setup; memset(&temp_setup, 0, sizeof(temp_setup)); @@ -189,21 +189,21 @@ vc4_resource_transfer_map(struct pipe_context *pctx, */ if (usage & PIPE_TRANSFER_WRITE) vc4_flush_jobs_reading_resource(vc4, prsc); else vc4_flush_jobs_writing_resource(vc4, prsc); } if (usage & PIPE_TRANSFER_WRITE) rsc->writes++; - trans = slab_alloc_st(&vc4->transfer_pool); + trans = slab_alloc(&vc4->transfer_pool); if (!trans) return NULL; /* XXX: Handle DONTBLOCK, DISCARD_RANGE, PERSISTENT, COHERENT. */ /* slab_alloc_st() doesn't zero: */ memset(trans, 0, sizeof(*trans)); ptrans = &trans->base; pipe_resource_reference(&ptrans->resource, prsc); diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c index 3dc85d5..64bff5d 100644 --- a/src/gallium/drivers/vc4/vc4_screen.c +++ b/src/gallium/drivers/vc4/vc4_screen.c @@ -91,20 +91,21 @@ vc4_screen_get_vendor(struct pipe_screen *pscreen) return "Broadcom"; } static void vc4_screen_destroy(struct pipe_screen *pscreen) { struct vc4_screen *screen = vc4_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); } static int vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) { switch (param) { /* Supported features (boolean caps). */ case PIPE_CAP_VERTEX_COLOR_CLAMPED: @@ -607,20 +608,22 @@ vc4_screen_create(int fd) list_inithead(&screen->bo_cache.time_list); pipe_mutex_init(screen->bo_handles_mutex); screen->bo_handles = util_hash_table_create(handle_hash, handle_compare); if (vc4_supports_branches(screen)) screen->has_control_flow = true; 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(); if (vc4_debug & VC4_DEBUG_SHADERDB) vc4_debug |= VC4_DEBUG_NORAST; #if USE_VC4_SIMULATOR vc4_simulator_init(screen); #endif diff --git a/src/gallium/drivers/vc4/vc4_screen.h b/src/gallium/drivers/vc4/vc4_screen.h index 36fe1c7..16003cf 100644 --- a/src/gallium/drivers/vc4/vc4_screen.h +++ b/src/gallium/drivers/vc4/vc4_screen.h @@ -21,20 +21,21 @@ * IN THE SOFTWARE. */ #ifndef VC4_SCREEN_H #define VC4_SCREEN_H #include "pipe/p_screen.h" #include "os/os_thread.h" #include "state_tracker/drm_driver.h" #include "util/list.h" +#include "util/slab.h" struct vc4_bo; #define VC4_DEBUG_CL 0x0001 #define VC4_DEBUG_QPU 0x0002 #define VC4_DEBUG_QIR 0x0004 #define VC4_DEBUG_TGSI 0x0008 #define VC4_DEBUG_SHADERDB 0x0010 #define VC4_DEBUG_PERF 0x0020 #define VC4_DEBUG_NORAST 0x0040 @@ -57,20 +58,22 @@ struct vc4_screen { void *simulator_mem_base; uint32_t simulator_mem_size; /** The last seqno we've completed a wait for. * * This lets us slightly optimize our waits by skipping wait syscalls * if we know the job's already done. */ 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; /** List of struct vc4_bo freed, per size, by age. */ struct list_head *size_list; uint32_t size_list_size; pipe_mutex lock; uint32_t bo_size; -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev