# 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
