virgl: also destroy all read-transfers
For texture write-transfers, we either free them on the transfer-queue
or right away. But for read-transfers, we currently only destroy them in
case they used a temp-resource. This leads to occasional resource-leaks.
Let's add a call to virgl_resource_destroy_transfer in the missing case.
Do the same thing for buffers as well, but the logic is a bit easier to
follow there.
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Fixes: f0e71b1088
("virgl: use transfer queue")
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
This commit is contained in:
parent
4c332a1f9f
commit
b85ca86c1e
|
@ -90,7 +90,8 @@ static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
|
|||
|
||||
vctx->num_transfers++;
|
||||
virgl_transfer_queue_unmap(&vctx->queue, trans);
|
||||
}
|
||||
} else
|
||||
virgl_resource_destroy_transfer(&vctx->transfer_pool, trans);
|
||||
}
|
||||
|
||||
static void virgl_buffer_transfer_flush_region(struct pipe_context *ctx,
|
||||
|
|
|
@ -181,7 +181,8 @@ static void virgl_texture_transfer_unmap(struct pipe_context *ctx,
|
|||
if (trans->resolve_tmp) {
|
||||
pipe_resource_reference((struct pipe_resource **)&trans->resolve_tmp, NULL);
|
||||
virgl_resource_destroy_transfer(&vctx->transfer_pool, trans);
|
||||
}
|
||||
} else if (!(trans->base.usage & PIPE_TRANSFER_WRITE))
|
||||
virgl_resource_destroy_transfer(&vctx->transfer_pool, trans);
|
||||
}
|
||||
|
||||
static const struct u_resource_vtbl virgl_texture_vtbl =
|
||||
|
|
Loading…
Reference in New Issue