| commit | 63dddb4bc70202d60fe42d372850a268132ed1ad | [log] [tgz] |
|---|---|---|
| author | Android Build Coastguard Worker <[email protected]> | Tue Dec 10 00:44:18 2024 +0000 |
| committer | Android Build Coastguard Worker <[email protected]> | Tue Dec 10 00:44:18 2024 +0000 |
| tree | 23e23b7c6517d9b5720cc5fa3cbc729ac893a2d6 | |
| parent | 04ed0aaf65521c72b9beb70743be4f64a59aa2c0 [diff] | |
| parent | a04cd8a4b9cbb5a8ae9970d62e406c4cb3e965a9 [diff] |
Snap for 12770256 from a04cd8a4b9cbb5a8ae9970d62e406c4cb3e965a9 to 25Q1-release Change-Id: I5eb89f73994f58b220cca71096985ead61fd306d
Graphics Streaming Kit (colloquially known as Gfxstream) is a code generator that makes it easier to serialize and forward graphics API calls from one place to another:
The latest directions for the standalone Linux build are provided here.
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)
To re-generate both guest and Vulkan code, please run:
scripts/generate-gfxstream-vulkan.sh
First, build build/gfxstream-generic-apigen. Then run:
scripts/generate-apigen-source.sh
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%.
There are Android mock testa available, runnable on Linux. To build these tests, run:
m GfxstreamEnd2EndTests
The host renderer has optional support for Perfetto tracing which can be enabled by defining GFXSTREAM_BUILD_WITH_TRACING (enabled by default on Android builds).
The perfetto and traced tools from Perfetto should be installed. Please see the Perfetto Quickstart or follow these short form instructions:
cd <your Android repo>/external/perfetto ./tools/install-build-deps ./tools/gn gen --args='is_debug=false' out/linux ./tools/ninja -C out/linux traced perfetto
To capture a trace on Linux, start the Perfetto daemon:
./out/linux/traced
Then, run Gfxstream with Cuttlefish:
cvd start --gpu_mode=gfxstream_guest_angle_host_swiftshader
Next, start a trace capture with:
./out/linux/perfetto --txt -c gfxstream_trace.cfg -o gfxstream_trace.perfetto
with gfxstream_trace.cfg containing the following or similar:
buffers {
size_kb: 4096
}
data_sources {
config {
name: "track_event"
track_event_config {
}
}
}
Next, end the trace capture with Ctrl + C.
Finally, open https://ui.perfetto.dev/ in your webbrowser and use “Open trace file” to view the trace.
gfxstream vulkan is the most actively developed component. Some key commponents of the current design include:
struct gfxstream_vk_device and the gfxstream object goldfish_device both are internal representations of Vulkan opaque handle VkDevice. The Mesa object is used first, since Mesa provides dispatch. The Mesa object contains a key to the hash table to get a gfxstream internal object (for example, gfxstream_vk_device::internal_object). Eventually, gfxstream objects will be phased out and Mesa objects used exclusively.