blob: 57d4a1297dd41505aa8b5dab3f60237bad8dabb1 [file] [log] [blame] [view]
# frameworks/native/vulkan
This subdirectory contains Android's Vulkan loader, as well as some Vulkan-related tools useful to platform developers.
## Documentation
The former contents of doc/implementors_guide/ are now at https://source.android.com/devices/graphics/implement-vulkan.
## Coding Style
We follow the [Chromium coding style](https://www.chromium.org/developers/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.
## Code Generation
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.
### Run The Code Generator
Install Python3 (if not already installed) and execute below:
`$ ./scripts/code_generator.py`
### Vulkan EDI Pipeline Update Guide
This guide outlines the three main parts for updating the Vulkan EDI pipeline.
## Part 1: Update `vk.py` and `vkjson_*.cc` files
- **Location**: Android repository : `$ANDROID_BUILD_TOP/frameworks/native/vulkan`
- **Command**:
`python3 scripts/vkjson_codegen.py`
## Part 2: Update Vulkan Device Info Collector (cts Repository)
- **Location**: Android repository: `$ANDROID_BUILD_TOP/cts`
- **Command**:
`python3 common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/scripts/code_generator.py`
## Part 3: Update the Protobuf Schemas (in google3)
# A. Generate `VulkanDeviceInfo.deviceinfo.json
- **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
```
# B. Generate Final Protobuf Files
Next, move to your `google3` workspace to update the source files and run the final proto generator script.
1. **Update `vk.py`**: Copy the `vk.py` from `$ANDROID_BUILD_TOP`/frameworks/native/vulkan/scripts file to `wireless/android/partner/adl/proto/scripts/`.
- In the copied `vk.py` file, add a comment in the file to disable lint errors - `# pylint: disable=all`
2. **Update `VulkanDeviceInfo.deviceinfo.json`**: Copy the JSON file generated in the previous step (**A**) to `javatests/com/google/wireless/android/partner/adl/pipeline/extendeddeviceinfo/`.
3. **Run Generator**: Execute the following command to update the `.proto` files, `apfe.sdl`, and the `ExtendedDeviceInfoTest.java` test file.
- **Location**: `google3`
- **Command**:
`python3 wireless/android/partner/adl/proto/scripts/vulkan_proto_gen.py`