• Home
Name Date Size #Lines LOC

..--

base/03-May-2024-17,68611,440

fake-android-guest/03-May-2024-43,37123,751

host-common/03-May-2024-33,93721,380

include/03-May-2024-193,809152,557

protocols/03-May-2024-218,731180,881

scripts/03-May-2024-11585

snapshot/03-May-2024-767495

stream-servers/03-May-2024-438,986385,517

testenvs/03-May-2024-

third-party/03-May-2024-1,242,7441,012,583

.gitignoreD03-May-20245.9 KiB293293

Android.bpD03-May-20243.6 KiB119113

BUILD.gnD03-May-20240

CMakeLists.txtD03-May-20243.3 KiB9971

METADATAD03-May-2024335 98

README.mdD03-May-20243.6 KiB10672

android.cmakeD03-May-202451.7 KiB1,3131,202

build-host.shD03-May-2024108 54

gtest.cmakeD03-May-20241.2 KiB3328

gtestdownloadCMakeLists.txt.inD03-May-2024442 1513

README.md

1# Graphics Streaming Kit (formerly: Vulkan Cereal)
2
3Graphics Streaming Kit is a code generator that makes it easier to serialize
4and forward graphics API calls from one place to another:
5
6- From a virtual machine guest to host for virtualized graphics
7- From one process to another for IPC graphics
8- From one computer to another via network sockets
9
10# Build: Linux
11
12Make sure the latest CMake is installed.
13Make sure the opengl lib is installed. Otherwise, sudo apt-get install
14libglu1-mesa-dev freeglut3-dev mesa-common-dev
15Make sure you are using Clang as your `CC` and clang++ as your`CXX`. Then
16
17    mkdir build
18    cd build
19    cmake . ../
20    make -j24
21
22Unit tests:
23
24    make test
25
26# Build: Windows
27
28Make sure the latest CMake is installed.  Make sure Visual Studio 2019 is
29installed on your system along with all the Clang C++ toolchain components.
30Then
31
32    mkdir build
33    cd build
34    cmake . ../ -A x64 -T ClangCL
35
36A solution file should be generated. Then open the solution file in Visual
37studio and build the `gfxstream_backend` target.
38
39# Build: Android for host
40
41Be in the Android build system. Then
42
43    m libgfxstream_backend
44
45It then ends up in `out/host`
46
47This also builds for Android on-device.
48
49# Output artifacts
50
51    libgfxstream_backend.(dll|so|dylib)
52
53# Regenerating Vulkan code
54
55    scripts/generate-vulkan-sources.sh
56
57If you're in an AOSP checkout, this will also modify contents of the guest Vulkan encoder in `../goldfish-opengl`.
58
59# Regenerating GLES/RenderControl code
60
61First, build `build/gfxstream-generic-apigen`. Then run
62
63    scripts/generate-apigen-source.sh
64
65# Tests
66
67## Linux Tests
68
69There 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`.
70
71## Windows Tests
72
73There 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%`.
74
75## Android Host Tests
76
77These are currently not built due to the dependency on system libEGL/libvulkan to run correctly.
78
79# Structure
80
81- `CMakeLists.txt`: specifies all host-side build targets. This includes all
82  backends along with client/server setups that live only on the host. Some
83  - Backend implementations
84  - Implementations of the host side of various transports
85  - Frontends used for host-side testing with a mock implementation of guest
86    graphics stack (mainly Android)
87  - Frontends that result in actual Linux/macOS/Windows gles/vk libraries
88    (isolation / fault tolerance use case)
89- `Android.bp`: specifies all guest-side build targets for Android:
90  - Implementations of the guest side of various transports (above the kernel)
91  - Frontends
92- `BUILD.gn`: specifies all guest-side build targets for Fuchsia
93  - Implementations of the guest side of various transports (above the kernel)
94  - Frontends
95- `base/`: common libraries that are built for both the guest and host.
96  Contains utility code related to synchronization, threading, and suballocation.
97- `protocols/`: implementations of protocols for various graphics APIs. May contain
98code generators to make it easy to regen the protocol based on certain things.
99- `host-common/`: implementations of host-side support code that makes it
100  easier to run the server in a variety of virtual device environments.
101  Contains concrete implementations of auxiliary virtual devices such as
102  Address Space Device and Goldfish Pipe.
103- `stream-servers/`: implementations of various backends for various graphics
104  APIs that consume protocol. `gfxstream-virtio-gpu-renderer.cpp` contains a
105  virtio-gpu backend implementation.
106