Skip to content

virgl: Use buffer copy transfers to avoid waiting when mapping

We typically need to wait for a buffer to become ready before mapping, so that we don't write new contents while the host is still using the old contents. However, if we are allowed to discard the contents of the mapped buffer range, then we can avoid waiting by using a staging buffer range which we guarantee to never be busy, copying from the staging buffer range to the target buffer in the host.

This commit implements this optimization by utilizing a dedicated u_upload_mgr for the staging buffer.

Performance results: Twilight Struggle (Steam/Proton), qemu before: 7 FPS after: 25 FPS glmark2 ubo 6 quads, qemu before: 38 FPS after: 331 FPS

The host side implementation is: virgl/virglrenderer!237 (merged)

Signed-off-by: Alexandros Frantzis alexandros.frantzis@collabora.com Suggested-by: Gurchetan Singh gurchetansingh@chromium.org

Edited by Alexandros Frantzis

Merge request reports