1 文档介绍
此 guideline 提供步骤和注意事项,以帮助开发者编译 vulkan samples
(https://github.com/KhronosGroup/Vulkan-Samples), 并在天玑 9200 手机上运行和开发(包含支持 ray query 扩展
的 ray tracing 范例)
2 说明
1. 此 guideline 编译环境基于 windows 操作系统
2. linux 下编译类似,可结合参考 github 文档说明 https://github.com/KhronosGroup/Vulkan
Samples/blob/main/docs/build.md
3. Ray Tracing 的部分,天玑 9200 目前的软件版本主要支持 VK_KHR_ray_query,暂不支
持 VK_KHR_ray_tracing_pipeline, 所以可以运行 ray query 范例的演示,ray tracing basic, ray tracing reflection,
ray tracing extended 则无法正常运行
3 环境与资料
1. 天玑 9200 手机(需要打开开发者模式)
2. vulkan samples source code ,可从 https://github.com/KhronosGroup/Vulkan-Samples 下载
3. build 环境,以下有两种 build 方式,可择一进行,推荐使用 android studio
a. 使用 android studio
b. 使用 gradle build,需要配置环境变量
i. CMake v3.16+ 并设置环境变量(已验证版本 v3.22.1),可使用 android studio 提供的 SDK
tools 里的 CMake
ii. JDK 8+ 并设置环境变量 JAVA_HOME=<SYSTEM_DIR>/java
iii. Android NDK r23+ 并设置环境变量 ANDROID_NDK_HOME=<WORK_DIR>/android
ndk
iv. Android SDK 并设置环境变量 ANDROID_HOME=<WORK_DIR>/android-sdk
v. Gradle v5+ ~ v7+ 并设置环境变量 GRADLE_HOME=<WORK_DIR>/gradle(已验证版
本 v7.3)
4 步骤(android studio)
1. 下载 vulkan samples source code, 可以选用以下两种方式:
a. 使用 github git clone repo (git clone --recurse
submodules https://github.com/KhronosGroup/Vulkan-Samples.git)
b. 手动下载 repo 代码包,但要注意此 repo 包含外部 repo 链接,例如 assets 文件夹和 third_party 下
面的文件夹,需要也手动下载下来放到对应文件夹
2. 修改 PendingIntent Flag,此步骤是因为 Android S 之后,PendingIntent 会要求加上 FLAG_IMMUTABLE or
FLAG_MUTABLE,否则会出现 runtim exception
a. 打开 app\android\java\com\khronos\vulkan_samples\NativeSampleActivity.java,做如下修改
b.
3. 生成 android gradle script
a. 打开 cmd 窗口 cd 到代码目录
b. 执行 bldsys\scripts\generate_android_gradle.bat,完成后生成 build\android_gradle
4. 使用 android studio import build\android_gradle 生成 project
5. 对项目执行 Make Project
6. build success 后可连接天玑 9200 手机,使用 android studio “run ‘App‘” 在手机端安装和运行 APP
7. 在 APP 执行范例 ray queries,观察动态阴影范例,成功运行界面如下图
5 步骤(gradle build)
1. 下载 vulkan samples source code, 可以选用以下两种方式:
a. 使用 github git clone repo (git clone --recurse
submodules https://github.com/KhronosGroup/Vulkan-Samples.git)
b. 手动下载 repo 代码包,但要注意此 repo 包含外部 repo 链接,例如 assets 文件夹和 third_party 下
面的文件夹,需要也手动下载下来放到对应文件
2. 修改 PendingIntent Flag,此步骤是因为 Android S 之后,PendingIntent 会要求加上 FLAG_IMMUTABLE
or FLAG_MUTABLE,否则会出现 runtim exception
a. 打开 app\android\java\com\khronos\vulkan_samples\NativeSampleActivity.java,做如下修改
b.
3. 生成 android gradle script
a. 打开 cmd 窗口 cd 到代码目录
b. 执行 bldsys\scripts\generate_android_gradle.bat,完成后生成 build\android_gradle
4. cd 到 build/android_gradle
5. 执行 gradle build
gradle assembleRelease
如需 debug build: gradle assembleDebug
6. build success 后可连接天玑 9200 手机,安装 APK
a. adb install app/build/outputs/apk/release/vulkan_samples-release.apk
7. 重要:sync res 文件到手机端
a. adb push --sync assets /sdcard/com.khronos.vulkan_samples/
b. adb push --sync shaders /sdcard/com.khronos.vulkan_samples/
8. 在 APP 执行范例 ray queries,观察动态阴影范例,成功运行界面如下图
6 可能遇到的问题参考
1. 如果使用 gradle 8.0,build 会遇到报错“Cannot use @TaskAction annotation”, 原因是 proje 使用 TaskAction 在
gradle 8.0 已经移除,需要降低 gradle 版本到 v7.x 及以下
2. source code 包含外部 repo,在 third_party 文件夹下. 如果没有下载完全,会遇到下面的 cmake
error,需要检查 src code 里的外部 repo 代码是否有下载完全
CMake Error at third_party/CMakeLists.txt:244 (target_compile_options):
Cannot specify compile options for target "glslang" which is not built by
this project.
3. pendingIntent runtime error, 需要按照步骤的第 2 点修改
java.lang.IllegalArgumentException: com.khronos.vulkan_samples: Targeting S+ (version 31 and
above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a
PendingIntent.