无法在 Android Studio 中使用 Vulkan 子组操作

Can not use Vulkan Subgroup operations in Android Studio

我正在 Android studio 中编写 Vulkan 计算着色器并在 Android phone 上启动它。接下来是我遇到的问题 - 我无法使用任何子组操作,如 subgroupAddsubgroupElect。当我尝试使用这些功能时,出现如下错误:

reduce_vec.comp:35: error: 'subgroup op' : requires SPIR-V 1.3

我检查过 - 我的 Android phone 支持子组,我的着色器接受这样的扩展:

#extension GL_KHR_shader_subgroup_arithmetic: enable
#extension GL_KHR_shader_subgroup_basic: enable

问题很简单,我需要更新我的 SPIR-V。但是根据我的发现,Android studio 自动附带的 SPIR-V 不是我可以轻易更新的东西。

以前有人遇到过类似的问题吗?你的解决方案是什么?提前致谢!

Android解法

您可以在 Gradle DSL 中将参数传递给 Android shaderc 编译器:

https://developer.android.com/ndk/guides/graphics/shader-compilers

你需要 glslcArgs 来包含 --target-env=vulkan1.1

灵活的解决方案

构建您自己的编译管道以从源代码编译到 SPIR-V,然后将 SPIR-V 二进制文件直接包含到您的 Android 项目中。

有多种语言 front-ends 可以生成 SPIR-V,对于 GLSL,Khronos 工具在这里: