blob: a157678f1e9c70a1e21f554985aeea34cdb02cf2 [file] [log] [blame] [view]
# Graphics Streaming Kit (formerly: Vulkan Cereal)
Graphics Streaming Kit is a code generator that makes it easier to serialize
and forward graphics API calls from one place to another:
- From a virtual machine guest to host for virtualized graphics
- From one process to another for IPC graphics
- From one computer to another via network sockets
# Build
Run `./build-host.sh`, or:
mkdir build
cd build
cmake . ../ -DCMAKE_TOOLCHAIN_FILE=../toolchain/toolchain-linux-x86_64.cmake
# Or toolchain-darwin, or toolchain-windows_msvc depending on host platform
make -j24
To regenerate any autogenerated sources, run `./codegen.sh`.
TODO: guest build makefiles (Android.bp)
# Project layout and overall evolution plan
For fast iteration, to start with, this project will reference code from the
following projects:
device/generic/goldfish-opengl # master branch
platform/external/qemu/ # emu-master-dev branch
Once the minimum set of code dependencies is determined, they will be extracted
out to this project. We'll also use those to get the initial version of the
code working on both Cuttlefish and Goldfish.
After this extraction and verification step, all the needed code for gfx
streaming kit will be contained in this project, but the toolchain prebuilts
for host side still need to be included as other projects. Therefore, we're
looking at creating a new repo branch that encompasses this project and the
toolchain prebuilts (or any other relevant projects). Thus it's a good chance
to rename this project to something more appropriate like
`device/generic/gfxstream`.
Then, we add a new go/ab target that builds + runs any relevant tests.
# Structure
- `CMakeLists.txt`: specifies all host-side build targets. This includes all
backends along with client/server setups that live only on the host. Some
- Backend implementations
- Implementations of the host side of various transports
- Frontends used for host-side testing with a mock implementation of guest
graphics stack (mainly Android)
- Frontends that result in actual Linux/macOS/Windows gles/vk libraries
(isolation / fault tolerance use case)
- `Android.bp`: specifies all guest-side build targets for Android:
- Implementations of the guest side of various transports (above the kernel)
- Frontends
- `BUILD.gn`: specifies all guest-side build targets for Fuchsia
- Implementations of the guest side of various transports (above the kernel)
- Frontends
- `base/`: 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.
- `stream-clients/`: implementations of various frontends for various graphics
APIs that generate protocol.
- `stream-servers/`: implementations of various backends for various graphics
APIs that consume protocol.
- `toolchain/`: includes various CMake toolchain files for the host-side build
- `transports/`: libraries that live on both guest and host that implement
various transports. Does not care about what data is passed through, only
how.
- `testenvs/`: includes host-side mock implementations of guest graphics stacks,
incl. Android
- `tests/`: includes functional tests use a mock transport and test environment