mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 09:00:10 +01:00
virgl: use the new parent/child pools for transfers
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
2a83036fe2
commit
8a943564fd
6 changed files with 14 additions and 8 deletions
|
|
@ -62,7 +62,7 @@ static void *virgl_buffer_transfer_map(struct pipe_context *ctx,
|
||||||
if (doflushwait)
|
if (doflushwait)
|
||||||
ctx->flush(ctx, NULL, 0);
|
ctx->flush(ctx, NULL, 0);
|
||||||
|
|
||||||
trans = slab_alloc_st(&vctx->texture_transfer_pool);
|
trans = slab_alloc(&vctx->texture_transfer_pool);
|
||||||
if (!trans)
|
if (!trans)
|
||||||
return NULL;
|
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,
|
static void virgl_buffer_transfer_flush_region(struct pipe_context *ctx,
|
||||||
|
|
|
||||||
|
|
@ -862,7 +862,7 @@ virgl_context_destroy( struct pipe_context *ctx )
|
||||||
u_upload_destroy(vctx->uploader);
|
u_upload_destroy(vctx->uploader);
|
||||||
util_primconvert_destroy(vctx->primconvert);
|
util_primconvert_destroy(vctx->primconvert);
|
||||||
|
|
||||||
slab_destroy(&vctx->texture_transfer_pool);
|
slab_destroy_child(&vctx->texture_transfer_pool);
|
||||||
FREE(vctx);
|
FREE(vctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -943,8 +943,7 @@ struct pipe_context *virgl_context_create(struct pipe_screen *pscreen,
|
||||||
virgl_init_so_functions(vctx);
|
virgl_init_so_functions(vctx);
|
||||||
|
|
||||||
list_inithead(&vctx->to_flush_bufs);
|
list_inithead(&vctx->to_flush_bufs);
|
||||||
slab_create(&vctx->texture_transfer_pool, sizeof(struct virgl_transfer),
|
slab_create_child(&vctx->texture_transfer_pool, rs->texture_transfer_pool);
|
||||||
16);
|
|
||||||
|
|
||||||
vctx->primconvert = util_primconvert_create(&vctx->base, rs->caps.caps.v1.prim_mask);
|
vctx->primconvert = util_primconvert_create(&vctx->base, rs->caps.caps.v1.prim_mask);
|
||||||
vctx->uploader = u_upload_create(&vctx->base, 1024 * 1024,
|
vctx->uploader = u_upload_create(&vctx->base, 1024 * 1024,
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ struct virgl_context {
|
||||||
|
|
||||||
struct pipe_framebuffer_state framebuffer;
|
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 pipe_index_buffer index_buffer;
|
||||||
struct u_upload_mgr *uploader;
|
struct u_upload_mgr *uploader;
|
||||||
|
|
|
||||||
|
|
@ -547,6 +547,8 @@ virgl_destroy_screen(struct pipe_screen *screen)
|
||||||
struct virgl_screen *vscreen = virgl_screen(screen);
|
struct virgl_screen *vscreen = virgl_screen(screen);
|
||||||
struct virgl_winsys *vws = vscreen->vws;
|
struct virgl_winsys *vws = vscreen->vws;
|
||||||
|
|
||||||
|
slab_destroy_parent(&vscreen->texture_transfer_pool);
|
||||||
|
|
||||||
if (vws)
|
if (vws)
|
||||||
vws->destroy(vws);
|
vws->destroy(vws);
|
||||||
FREE(vscreen);
|
FREE(vscreen);
|
||||||
|
|
@ -581,6 +583,8 @@ virgl_create_screen(struct virgl_winsys *vws)
|
||||||
|
|
||||||
screen->refcnt = 1;
|
screen->refcnt = 1;
|
||||||
|
|
||||||
|
slab_create_parent(&screen->texture_transfer_pool, sizeof(struct virgl_transfer), 16);
|
||||||
|
|
||||||
util_format_s3tc_init();
|
util_format_s3tc_init();
|
||||||
return &screen->base;
|
return &screen->base;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
#define VIRGL_H
|
#define VIRGL_H
|
||||||
|
|
||||||
#include "pipe/p_screen.h"
|
#include "pipe/p_screen.h"
|
||||||
|
#include "util/slab.h"
|
||||||
#include "virgl_winsys.h"
|
#include "virgl_winsys.h"
|
||||||
|
|
||||||
struct virgl_screen {
|
struct virgl_screen {
|
||||||
|
|
@ -38,6 +39,8 @@ struct virgl_screen {
|
||||||
|
|
||||||
struct virgl_drm_caps caps;
|
struct virgl_drm_caps caps;
|
||||||
|
|
||||||
|
struct slab_parent_pool texture_transfer_pool;
|
||||||
|
|
||||||
uint32_t sub_ctx_id;
|
uint32_t sub_ctx_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ static void *virgl_texture_transfer_map(struct pipe_context *ctx,
|
||||||
if (doflushwait)
|
if (doflushwait)
|
||||||
ctx->flush(ctx, NULL, 0);
|
ctx->flush(ctx, NULL, 0);
|
||||||
|
|
||||||
trans = slab_alloc_st(&vctx->texture_transfer_pool);
|
trans = slab_alloc(&vctx->texture_transfer_pool);
|
||||||
if (!trans)
|
if (!trans)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
@ -235,7 +235,7 @@ static void virgl_texture_transfer_unmap(struct pipe_context *ctx,
|
||||||
if (trans->resolve_tmp)
|
if (trans->resolve_tmp)
|
||||||
pipe_resource_reference((struct pipe_resource **)&trans->resolve_tmp, NULL);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue