opengl - 为 Vulkan 自动编译 OpenGL 着色器
问题描述
有没有办法为 Vulkan 自动编译 OpenGL 着色器?问题出在制服上。
'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
我尝试过为 OpenGL 编译,然后用 spirv-cross 反编译--vulkan-semantics
,但它仍然有非透明的制服。
spirv-cross 似乎只有为 OpenGL 编译 Vulkan 着色器的工具。
[--glsl-emit-push-constant-as-ubo]
[--glsl-emit-ubo-as-plain-uniforms]
解决方案
用于 OpenGL 的着色器在 Vulkan 上不起作用。即使忽略他们对制服的看法的差异,他们也有非常不同的资源模型。Vulkan 使用描述符集和绑定点,所有资源都使用相同的绑定索引(set+binding)。相比之下,OpenGL 为每种资源提供了自己独特的索引集。因此,用于 OpenGL 消耗的 GLSL 着色器可能会将纹理统一和统一块分配给相同的绑定索引。但是您不能在用于 Vulkan 的 GLSL 着色器中执行此操作,除非这两个资源位于不同的描述符集中。
如果您想共享着色器,您将需要使用预处理器技巧来确保着色器为正在编译着色器的特定目标分配资源(包括它如何分配制服)。
推荐阅读
- swift - 无法从 firebase 收到通知 - swift 4
- sass - 使用 Config.json 自定义 Bootstrap 4
- php - 如何使用 update_user_meta() 删除帖子?
- python - NameError when using super() in enum constructor
- c++ - How to return QVariant type array
- javascript - 如何在 JavaScript 中的 forEach 循环的每一行上做一个数学函数?
- python-3.x - 从未使用过如此混乱的数据结构
- javascript - 尝试使用 IF 语句自动填充单元格
- react-native - ASP.NET WebAPI - 使用 FormData 上传文件没有所有表单数据字段
- android - 单击 VCS > Shelve Changes 后,我的 Android Studio 项目文件全部删除,我可以恢复它们吗?