This subdirectory contains Android's Vulkan loader, as well as some Vulkan-related tools useful to platform developers.
The former contents of doc/implementors_guide/ are now at https://source.android.com/devices/graphics/implement-vulkan.
We follow the Chromium coding style for naming and formatting, except with four-space indentation instead of two spaces. In general, any C++ features supported by the prebuilt platform toolchain are allowed.
Use "clang-format -style=file" to format all C/C++ code, except code imported verbatim from elsewhere. Setting up git-clang-format in your environment is recommended.
We generate several parts of the loader and tools directly from the Vulkan Registry (external/vulkan-headers/registry/vk.xml). Code generation must be done manually because the generator is not part of the platform toolchain (yet?). Files named foo_gen.* are generated by the code generator.
Install Python3 (if not already installed) and execute below:
$ ./scripts/code_generator.py
This script parses the Vulkan XML registry (vk.xml) and generates vk.py, which contains Python representations of Vulkan structures and mappings. Key functions include:
- Parsing
vk.xmlto extract Vulkan API constants, enums, handles, structs, and extensions. - Generating Python
dataclassesfor Vulkan structs and handles. - Creating mappings for features, extensions, and core versions to their corresponding structs.
- Handling C to Python type conversions and aliases.
- The main function is
gen_vk().
This script generates the C++ code for serializing Vulkan device capabilities into a JSON format. It uses vk.py as its source of truth for Vulkan API information.
gen_h(): Generatesvkjson.h, which defines the C++ structs (VkJsonInstance,VkJsonDevice, etc.) for storing Vulkan properties.gen_cc(): Generatesvkjson.cc, providing the JSON serialization and deserialization logic for the C++ structs.gen_instance_cc(): Generatesvkjson_instance.cc, which implements functions to query a physical device and populate the C++ structs with its capabilities.
This script serves as the primary entry point for regenerating all Vulkan JSON-related files. It performs the code generation process by calling the necessary functions from vk_parser.py and vkjson_generator.py in the correct order. Running this single script ensures that vk.py, vkjson.h, vkjson.cc, and vkjson_instance.cc are all updated based on the Vulkan XML registry.
This guide outlines the three main parts for updating the Vulkan EDI pipeline.
- Location: Android repository :
$ANDROID_BUILD_TOP/frameworks/native/vulkan - Command:
python3 scripts/vkjson_codegen.py
- Location: Android repository:
$ANDROID_BUILD_TOP/cts - Command:
python3 common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/scripts/code_generator.py
- Location: Android repository root:
$ANDROID_BUILD_TOP - Commands:
# Build the necessary CTS modules mmma cts/tools/cts-device-info/ cts/common/device-side/device-info # Install the collector APK. Note: The path depends on your lunch target. adb install -r -g out/target/product/<target_name>/testcases/CtsDeviceInfo/arm64/CtsDeviceInfo.apk # Run the instrumented test to generate the file on the device adb shell am instrument --no-isolated-storage -w \ -e class com.android.compatibility.common.deviceinfo.VulkanDeviceInfo \ com.android.compatibility.common.deviceinfo/androidx.test.runner.AndroidJUnitRunner # Pull the generated JSON from the device adb pull /sdcard/device-info-files/VulkanDeviceInfo.deviceinfo.json
Next, move to your google3 workspace to update the source files and run the final proto generator script.
-
Update
vk.py: Copy thevk.pyfrom$ANDROID_BUILD_TOP/frameworks/native/vulkan/scripts file towireless/android/partner/adl/proto/scripts/.- In the copied
vk.pyfile, add a comment in the file to disable lint errors -# pylint: disable=all
- In the copied
-
Update
VulkanDeviceInfo.deviceinfo.json: Copy the JSON file generated in the previous step (A) tojavatests/com/google/wireless/android/partner/adl/pipeline/extendeddeviceinfo/. -
Run Generator: Execute the following command to update the
.protofiles,apfe.sdl, and theExtendedDeviceInfoTest.javatest file.- Location:
google3 - Command:
python3 wireless/android/partner/adl/proto/scripts/vulkan_proto_gen.py
- Location: