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

index de997962845b3d7e6bebaafc3f46ab3cc55418bd..2e63aebc72c2ad5b989b726430ae7aa0c7547b54 100644 (file)
@@ -62,7 +62,7 @@ static void *virgl_buffer_transfer_map(struct pipe_context *ctx,
    if (doflushwait)
       ctx->flush(ctx, NULL, 0);
 
-   trans = slab_alloc_st(&vctx->texture_transfer_pool);
+   trans = slab_alloc(&vctx->texture_transfer_pool);
    if (!trans)
       return NULL;
 
@@ -114,7 +114,7 @@ static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
       }
    }
 
-   slab_free_st(&vctx->texture_transfer_pool, trans);
+   slab_free(&vctx->texture_transfer_pool, trans);
 }
 
 static void virgl_buffer_transfer_flush_region(struct pipe_context *ctx,
index a6c059759865096f1fd49f2b9a76d68f26ae21c6..e693a733a8901a80890cc1e8146ba6c5b78c2d51 100644 (file)
@@ -862,7 +862,7 @@ virgl_context_destroy( struct pipe_context *ctx )
       u_upload_destroy(vctx->uploader);
    util_primconvert_destroy(vctx->primconvert);
 
-   slab_destroy(&vctx->texture_transfer_pool);
+   slab_destroy_child(&vctx->texture_transfer_pool);
    FREE(vctx);
 }
 
@@ -943,8 +943,7 @@ struct pipe_context *virgl_context_create(struct pipe_screen *pscreen,
    virgl_init_so_functions(vctx);
 
    list_inithead(&vctx->to_flush_bufs);
-   slab_create(&vctx->texture_transfer_pool, sizeof(struct virgl_transfer),
-                    16);
+   slab_create_child(&vctx->texture_transfer_pool, rs->texture_transfer_pool);
 
    vctx->primconvert = util_primconvert_create(&vctx->base, rs->caps.caps.v1.prim_mask);
    vctx->uploader = u_upload_create(&vctx->base, 1024 * 1024,
index 3b9901f7e11b6dfcc4f7834cc545f424874f7976..597ed49e34eab102ce7883c33f062a7562af580d 100644 (file)
@@ -56,7 +56,7 @@ struct virgl_context {
 
    struct pipe_framebuffer_state framebuffer;
 
-   struct slab_mempool texture_transfer_pool;
+   struct slab_child_pool texture_transfer_pool;
 
    struct pipe_index_buffer index_buffer;
    struct u_upload_mgr *uploader;
index dd135a789d74ce75484230ba1e08560360d2ee1e..5f9875418906204b389e3c5387fe11434b0c3958 100644 (file)
@@ -547,6 +547,8 @@ virgl_destroy_screen(struct pipe_screen *screen)
    struct virgl_screen *vscreen = virgl_screen(screen);
    struct virgl_winsys *vws = vscreen->vws;
 
+   slab_destroy_parent(&vscreen->texture_transfer_pool);
+
    if (vws)
       vws->destroy(vws);
    FREE(vscreen);
@@ -581,6 +583,8 @@ virgl_create_screen(struct virgl_winsys *vws)
 
    screen->refcnt = 1;
 
+   slab_create_parent(&screen->texture_transfer_pool, sizeof(struct virgl_transfer), 16);
+
    util_format_s3tc_init();
    return &screen->base;
 }
index 8cac38d7e96d5903209308c736c0a6e7a84a5747..dcf5816d60322925acb7110d4a0a1bba6e82575c 100644 (file)
@@ -24,6 +24,7 @@
 #define VIRGL_H
 
 #include "pipe/p_screen.h"
+#include "util/slab.h"
 #include "virgl_winsys.h"
 
 struct virgl_screen {
@@ -38,6 +39,8 @@ struct virgl_screen {
 
    struct virgl_drm_caps caps;
 
+   struct slab_parent_pool texture_transfer_pool;
+
    uint32_t sub_ctx_id;
 };
 
index 24bbc3ce60b0b91598553818aaf95da0bd96d2a6..150a5ebd8c7195a33c12bdbc042422f3069c998e 100644 (file)
@@ -145,7 +145,7 @@ static void *virgl_texture_transfer_map(struct pipe_context *ctx,
    if (doflushwait)
       ctx->flush(ctx, NULL, 0);
 
-   trans = slab_alloc_st(&vctx->texture_transfer_pool);
+   trans = slab_alloc(&vctx->texture_transfer_pool);
    if (!trans)
       return NULL;
 
@@ -235,7 +235,7 @@ static void virgl_texture_transfer_unmap(struct pipe_context *ctx,
    if (trans->resolve_tmp)
       pipe_resource_reference((struct pipe_resource **)&trans->resolve_tmp, NULL);
 
-   slab_free_st(&vctx->texture_transfer_pool, trans);
+   slab_free(&vctx->texture_transfer_pool, trans);
 }