diff options
Diffstat (limited to 'src/gallium/drivers/virgl/virgl_buffer.c')
-rw-r--r-- | src/gallium/drivers/virgl/virgl_buffer.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gallium/drivers/virgl/virgl_buffer.c b/src/gallium/drivers/virgl/virgl_buffer.c index 039a45f539a..8085839e150 100644 --- a/src/gallium/drivers/virgl/virgl_buffer.c +++ b/src/gallium/drivers/virgl/virgl_buffer.c @@ -48,9 +48,12 @@ void virgl_buffer_transfer_unmap(struct pipe_context *ctx, trans->offset = transfer->box.x; } - if (trans->copy_src_hw_res) { + if (trans->copy_src_hw_res && trans->direction == VIRGL_TRANSFER_TO_HOST) { virgl_encode_copy_transfer(vctx, trans); virgl_resource_destroy_transfer(vctx, trans); + } else if (trans->copy_src_hw_res && trans->direction == VIRGL_TRANSFER_FROM_HOST) { + // if it is readback, then we have already encoded transfer + virgl_resource_destroy_transfer(vctx, trans); } else { virgl_transfer_queue_unmap(&vctx->queue, trans); } |