r600g: remove slab allocator for pipe_resource (used mainly for user buffers)
authorMarek Olšák <maraeo@gmail.com>
Fri, 11 May 2012 20:56:08 +0000 (22:56 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sun, 13 May 2012 12:32:57 +0000 (14:32 +0200)
src/gallium/drivers/r600/r600_buffer.c
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/r600/r600_pipe.h

index 2f7eb513d4e525959a019ec496d6eeb193332f67..3d7d1f04739beb677ae2edc9b9550a8517ed419e 100644 (file)
  */
 #include "r600_pipe.h"
 #include "util/u_upload_mgr.h"
+#include "util/u_memory.h"
 
 static void r600_buffer_destroy(struct pipe_screen *screen,
                                struct pipe_resource *buf)
 {
-       struct r600_screen *rscreen = (struct r600_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,
@@ -207,7 +207,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);
@@ -215,7 +215,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;
index bb2336a37e452e034c939d233cc2190221cf034c..cb13ca767c9a0d77390eb0184302a4c89069926c 100644 (file)
@@ -152,25 +152,6 @@ static void r600_flush_from_winsys(void *ctx, unsigned flags)
        r600_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;
@@ -197,8 +178,6 @@ static void r600_destroy_context(struct pipe_context *context)
        }
        util_slab_destroy(&rctx->pool_transfers);
 
-       r600_update_num_contexts(rctx->screen, -1);
-
        r600_release_command_buffer(&rctx->start_cs_cmd);
 
        if (rctx->cs) {
@@ -221,8 +200,6 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
                         sizeof(struct pipe_transfer), 64,
                         UTIL_SLAB_SINGLETHREADED);
 
-       r600_update_num_contexts(rscreen, 1);
-
        rctx->context.screen = screen;
        rctx->context.priv = priv;
        rctx->context.destroy = r600_destroy_context;
@@ -613,9 +590,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);
 }
 
@@ -873,12 +847,6 @@ struct pipe_screen *r600_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;
index d6a970776414589e13a778a6490aaf81ad829983..e5ba49c5ac5ffacf7be90a24cab1b6fce5b439d2 100644 (file)
@@ -119,15 +119,10 @@ struct r600_screen {
        enum chip_class                 chip_class;
        struct radeon_info              info;
        struct r600_tiling_info         tiling_info;
-       struct util_slab_mempool        pool_buffers;
        struct r600_pipe_fences         fences;
 
-       unsigned                        num_contexts;
        bool                            use_surface_alloc;
        int                             glsl_feature_level;
-
-       /* for thread-safe write accessing to num_contexts */
-       pipe_mutex                      mutex_num_contexts;
 };
 
 struct r600_pipe_sampler_view {