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
VKJson* Files Code Generator Guidevk_parser.pyThis script parses the Vulkan XML registry (vk.xml) and generates vk.py, which contains Python representations of Vulkan structures and mappings. Key functions include:
vk.xml to extract Vulkan API constants, enums, handles, structs, and extensions.dataclasses for Vulkan structs and handles.gen_vk().vkjson_generator.pyThis 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(): Generates vkjson.h, which defines the C++ structs (VkJsonInstance, VkJsonDevice, etc.) for storing Vulkan properties.gen_cc(): Generates vkjson.cc, providing the JSON serialization and deserialization logic for the C++ structs.gen_instance_cc(): Generates vkjson_instance.cc, which implements functions to query a physical device and populate the C++ structs with its capabilities.vkjson_codegen.pyThis 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.
vk.py and vkjson_*.cc files$ANDROID_BUILD_TOP/frameworks/native/vulkanpython3 scripts/vkjson_codegen.py$ANDROID_BUILD_TOP/ctspython3 common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/scripts/code_generator.py$ANDROID_BUILD_TOP # 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 the vk.py from $ANDROID_BUILD_TOP/frameworks/native/vulkan/scripts file to wireless/android/partner/adl/proto/scripts/.
vk.py file, add a comment in the file to disable lint errors - # pylint: disable=allUpdate VulkanDeviceInfo.deviceinfo.json: Copy the JSON file generated in the previous step (A) to javatests/com/google/wireless/android/partner/adl/pipeline/extendeddeviceinfo/.
Run Generator: Execute the following command to update the .proto files, apfe.sdl, and the ExtendedDeviceInfoTest.java test file.
google3python3 wireless/android/partner/adl/proto/scripts/vulkan_proto_gen.py