无法在 Android Studio 中使用 Vulkan 子组操作
Can not use Vulkan Subgroup operations in Android Studio
我正在 Android studio 中编写 Vulkan 计算着色器并在 Android phone 上启动它。接下来是我遇到的问题 - 我无法使用任何子组操作,如 subgroupAdd
和 subgroupElect
。当我尝试使用这些功能时,出现如下错误:
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 工具在这里:
我正在 Android studio 中编写 Vulkan 计算着色器并在 Android phone 上启动它。接下来是我遇到的问题 - 我无法使用任何子组操作,如 subgroupAdd
和 subgroupElect
。当我尝试使用这些功能时,出现如下错误:
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 工具在这里: