Native VK Swapchain: add DisplayVk to orchestrate the CompositorVk and SwapChainStateVk DisplayVk is used to connect the compositor, swapchain and gfxstream renderer. Similar to FrameBuffer, DisplayVk also has a two stage initialization, first initialized by the constructor, then use the bindToSurface with a VkSurfaceKHR to complete the initialization. To draw a VkImage, first call importVkImage to specify an id to this image. Then call post with this id to draw. When using with FrameBuffer, the id is supposed to be the color buffer id. And post is supposed to be called in FrameBuffer::post() with the same id. DisplayVk::importVkImage and DisplayVk::releaseImport is supposed to track the lifetime of a VkImage backed ColorBuffer. In DisplayVk::post, a transform to stretch the ColorBuffer to fill the entire window is used. DisplayVk::post waits until the command buffer finishes execution. To change this function into an asynchronous function, add extra parameters to pass in sync objects, and signal those objects once the execution completes, but let the function returns once the command buffer is submitted. Test: DisplayVk_unittests Change-Id: I90c0e46947dfd3cd4c5c5c2c71ffbd987ca1c89d
Graphics Streaming Kit is a code generator that makes it easier to serialize and forward graphics API calls from one place to another:
Make sure the latest CMake is installed. Make sure you are using Clang as your CC and CXX. Then
mkdir build cd build cmake . ../ make -j24
Unit tests:
make test
Make sure the latest CMake is installed. Make sure Visual Studio 2019 is installed on your system along with all the Clang C++ toolchain components. Then
mkdir build cd build cmake . ../ -A x64 -T ClangCL
A solution file should be generated. Then open the solution file in Visual studio and build the gfxstream_backend target.
Be in the Android build system. Then
m libgfxstream_backend
It then ends up in out/host
This also builds for Android on-device.
libgfxstream_backend.(dll|so|dylib)
scripts/generate-vulkan-sources.sh
If you're in an AOSP checkout, this will also modify contents of the guest Vulkan encoder in ../goldfish-opengl.
First, build build/gfxstream-generic-apigen. Then run
scripts/generate-apigen-source.sh
There are a bunch of test executables generated. They require libEGL.so and libGLESv2.so and libvulkan.so to be available, possibly from your GPU vendor or ANGLE, in the $LD_LIBRARY_PATH.
There are a bunch of test executables generated. They require libEGL.dll and libGLESv2.dll and vulkan-1.dll to be available, possibly from your GPU vendor or ANGLE, in the %PATH%.
These are currently not built due to the dependency on system libEGL/libvulkan to run correctly.
CMakeLists.txt: specifies all host-side build targets. This includes all backends along with client/server setups that live only on the host. SomeAndroid.bp: specifies all guest-side build targets for Android:BUILD.gn: specifies all guest-side build targets for Fuchsiabase/: common libraries that are built for both the guest and host. Contains utility code related to synchronization, threading, and suballocation.protocols/: implementations of protocols for various graphics APIs. May contain code generators to make it easy to regen the protocol based on certain things.host-common/: implementations of host-side support code that makes it easier to run the server in a variety of virtual device environments. Contains concrete implementations of auxiliary virtual devices such as Address Space Device and Goldfish Pipe.stream-servers/: implementations of various backends for various graphics APIs that consume protocol. gfxstream-virtio-gpu-renderer.cpp contains a virtio-gpu backend implementation.