This change provides a route to the host side "cross domain" allocator, which is specialized for resource sharing across domain boundaries. It uses the upcoming CONTEXT_INIT ioctl to initialize the backend when available, and multiple timelines to perform metadata queries. While it would be awesome to use the revolutionary Address Space Graphics (ASG) algorithm for metadata queries, it would be non-trivial to pull off in minigbm. Key aspects of the cross-domain allocator are: * Intelligently falls back to OpenGL texture allocation host-side when external memory is not available. The fallback path is named "virgl", even though it encompasses gfxstream and 2D mode. More refactorings will be added in the future for further clarity. * Uses host Vulkan or minigbm to perform metadata query, and uses a cache to minimize vmexits. * No shadow memory. Only zero-copy blobs will be supported if the blob is mappable. Shareable blobs may be compressed or tiled if not mappable. * A commitment to sharing code across Google projects and cross-platform GPU virtualization. The main goal here is to enable faster interation/testing, so this code is just a prototype. It should be fine to merge via minigbm, since the project has a very chill philosophy and even proudly accepts code that doesn't make any sense (crrev.com/c/2583188) [so long as existing users are not broken]. BUG=b:173630595 TEST=launch virtual machine with 2D mode TEST=launch virtual machine with 3D mode Change-Id: Ie33a46f19e5cdd82a2ac03bcf2351f4a8f294970 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/2691716 Reviewed-by: Lingfeng Yang <lfy@google.com> Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: Gurchetan Singh <gurchetansingh@chromium.org> |
||
|---|---|---|
| .. | ||
| i915_drm.h | ||
| virgl_hw.h | ||
| virgl_protocol.h | ||
| virtgpu_cross_domain_protocol.h | ||
| virtgpu_drm.h | ||