diff options
author | Marek Olšák <[email protected]> | 2012-05-11 22:56:08 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2012-05-13 14:32:57 +0200 |
commit | ed9955dc29cb948c5516c9179ccd2c8656ba9f04 (patch) | |
tree | 764cabf1a95fdd80d28064ba10f908a0e95411b3 /src/gallium/drivers/radeonsi | |
parent | 05ea705c7c6212d16fcc9bcf04619ffd4311bb03 (diff) |
radeonsi: remove slab allocator for pipe_resource (used mainly for user buffers)
Diffstat (limited to 'src/gallium/drivers/radeonsi')
-rw-r--r-- | src/gallium/drivers/radeonsi/r600_buffer.c | 6 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/radeonsi_pipe.c | 33 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/radeonsi_pipe.h | 5 |
3 files changed, 3 insertions, 41 deletions
diff --git a/src/gallium/drivers/radeonsi/r600_buffer.c b/src/gallium/drivers/radeonsi/r600_buffer.c index 8fd7e277431..15bff912e13 100644 --- a/src/gallium/drivers/radeonsi/r600_buffer.c +++ b/src/gallium/drivers/radeonsi/r600_buffer.c @@ -43,7 +43,7 @@ static void r600_buffer_destroy(struct pipe_screen *screen, struct r600_resource *rbuffer = r600_resource(buf); pb_reference(&rbuffer->buf, NULL); - util_slab_free(&rscreen->pool_buffers, rbuffer); + FREE(rbuffer); } static struct pipe_transfer *r600_get_transfer(struct pipe_context *ctx, @@ -164,7 +164,7 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen *screen, /* XXX We probably want a different alignment for buffers and textures. */ unsigned alignment = 4096; - rbuffer = util_slab_alloc(&rscreen->pool_buffers); + rbuffer = MALLOC_STRUCT(r600_resource); rbuffer->b.b = *templ; pipe_reference_init(&rbuffer->b.b.reference, 1); @@ -172,7 +172,7 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen *screen, rbuffer->b.vtbl = &r600_buffer_vtbl; if (!r600_init_resource(rscreen, rbuffer, templ->width0, alignment, templ->bind, templ->usage)) { - util_slab_free(&rscreen->pool_buffers, rbuffer); + FREE(rbuffer); return NULL; } return &rbuffer->b.b; diff --git a/src/gallium/drivers/radeonsi/radeonsi_pipe.c b/src/gallium/drivers/radeonsi/radeonsi_pipe.c index aec5af277c5..5653048fe6d 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_pipe.c +++ b/src/gallium/drivers/radeonsi/radeonsi_pipe.c @@ -167,25 +167,6 @@ static void r600_flush_from_winsys(void *ctx, unsigned flags) radeonsi_flush((struct pipe_context*)ctx, NULL, flags); } -static void r600_update_num_contexts(struct r600_screen *rscreen, int diff) -{ - pipe_mutex_lock(rscreen->mutex_num_contexts); - if (diff > 0) { - rscreen->num_contexts++; - - if (rscreen->num_contexts > 1) - util_slab_set_thread_safety(&rscreen->pool_buffers, - UTIL_SLAB_MULTITHREADED); - } else { - rscreen->num_contexts--; - - if (rscreen->num_contexts <= 1) - util_slab_set_thread_safety(&rscreen->pool_buffers, - UTIL_SLAB_SINGLETHREADED); - } - pipe_mutex_unlock(rscreen->mutex_num_contexts); -} - static void r600_destroy_context(struct pipe_context *context) { struct r600_context *rctx = (struct r600_context *)context; @@ -205,9 +186,6 @@ static void r600_destroy_context(struct pipe_context *context) u_upload_destroy(rctx->uploader); } util_slab_destroy(&rctx->pool_transfers); - - r600_update_num_contexts(rctx->screen, -1); - FREE(rctx); } @@ -219,8 +197,6 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void if (rctx == NULL) return NULL; - r600_update_num_contexts(rscreen, 1); - rctx->context.screen = screen; rctx->context.priv = priv; rctx->context.destroy = r600_destroy_context; @@ -527,9 +503,6 @@ static void r600_destroy_screen(struct pipe_screen* pscreen) pipe_mutex_destroy(rscreen->fences.mutex); rscreen->ws->destroy(rscreen->ws); - - util_slab_destroy(&rscreen->pool_buffers); - pipe_mutex_destroy(rscreen->mutex_num_contexts); FREE(rscreen); } @@ -722,12 +695,6 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws) util_format_s3tc_init(); - util_slab_create(&rscreen->pool_buffers, - sizeof(struct r600_resource), 64, - UTIL_SLAB_SINGLETHREADED); - - pipe_mutex_init(rscreen->mutex_num_contexts); - rscreen->fences.bo = NULL; rscreen->fences.data = NULL; rscreen->fences.next_index = 0; diff --git a/src/gallium/drivers/radeonsi/radeonsi_pipe.h b/src/gallium/drivers/radeonsi/radeonsi_pipe.h index b16ec1069c9..bcb5ec64d5c 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_pipe.h +++ b/src/gallium/drivers/radeonsi/radeonsi_pipe.h @@ -114,11 +114,6 @@ struct r600_screen { struct r600_tiling_info tiling_info; struct util_slab_mempool pool_buffers; struct r600_pipe_fences fences; - - unsigned num_contexts; - - /* for thread-safe write accessing to num_contexts */ - pipe_mutex mutex_num_contexts; }; struct si_pipe_sampler_view { |