virgl: init transfer queue from virgl_context

A pipe_transfer is a context object.  It is fine for
virgl_transfer_queue to have access to the context.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
This commit is contained in:
Chia-I Wu 2019-05-15 15:52:34 -07:00
parent 308ba2c0f9
commit 514e12b1b8
3 changed files with 11 additions and 10 deletions

View file

@ -1372,7 +1372,7 @@ struct pipe_context *virgl_context_create(struct pipe_screen *pscreen,
virgl_init_so_functions(vctx);
slab_create_child(&vctx->transfer_pool, &rs->transfer_pool);
virgl_transfer_queue_init(&vctx->queue, rs, &vctx->transfer_pool);
virgl_transfer_queue_init(&vctx->queue, vctx);
vctx->encoded_transfers = (rs->vws->supports_encoded_transfers &&
(rs->caps.caps.v2.capability_bits & VIRGL_CAP_TRANSFER));

View file

@ -25,6 +25,7 @@
#include "util/u_inlines.h"
#include "virgl_protocol.h"
#include "virgl_context.h"
#include "virgl_screen.h"
#include "virgl_encode.h"
#include "virgl_resource.h"
@ -122,7 +123,7 @@ static void remove_transfer(struct virgl_transfer_queue *queue,
struct pipe_resource *pres = queued->base.resource;
list_del(&queued->queue_link);
pipe_resource_reference(&pres, NULL);
virgl_resource_destroy_transfer(queue->pool, queued);
virgl_resource_destroy_transfer(&queue->vctx->transfer_pool, queued);
}
static void replace_unmapped_transfer(struct virgl_transfer_queue *queue,
@ -246,11 +247,12 @@ static void add_internal(struct virgl_transfer_queue *queue,
void virgl_transfer_queue_init(struct virgl_transfer_queue *queue,
struct virgl_screen *vs,
struct slab_child_pool *pool)
struct virgl_context *vctx)
{
struct virgl_screen *vs = virgl_screen(vctx->base.screen);
queue->vs = vs;
queue->pool = pool;
queue->vctx = vctx;
queue->num_dwords = 0;
for (uint32_t i = 0; i < MAX_LISTS; i++)
@ -282,7 +284,7 @@ void virgl_transfer_queue_fini(struct virgl_transfer_queue *queue)
vws->cmd_buf_destroy(queue->tbuf);
queue->vs = NULL;
queue->pool = NULL;
queue->vctx = NULL;
queue->tbuf = NULL;
queue->num_dwords = 0;
}

View file

@ -29,7 +29,7 @@
struct virgl_cmd_buf;
struct virgl_screen;
struct virgl_slab_child_pool;
struct virgl_context;
struct virgl_transfer;
enum virgl_transfer_queue_lists {
@ -41,14 +41,13 @@ enum virgl_transfer_queue_lists {
struct virgl_transfer_queue {
struct list_head lists[MAX_LISTS];
struct virgl_screen *vs;
struct slab_child_pool *pool;
struct virgl_context *vctx;
struct virgl_cmd_buf *tbuf;
uint32_t num_dwords;
};
void virgl_transfer_queue_init(struct virgl_transfer_queue *queue,
struct virgl_screen *vs,
struct slab_child_pool *pool);
struct virgl_context *vctx);
void virgl_transfer_queue_fini(struct virgl_transfer_queue *queue);