为 Vulkan 自动编译 OpenGL 着色器
Automatically compile OpenGL Shaders for Vulkan
有什么方法可以为 Vulkan 自动编译 OpenGL 着色器吗?问题出在制服上。
'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
我试过为 OpenGL 编译,然后用 --vulkan-semantics
的 spirv-cross 反编译,但它仍然有非不透明制服。
spirv-cross 似乎只有为 OpenGL 编译 Vulkan 着色器的工具。
[--glsl-emit-push-constant-as-ubo]
[--glsl-emit-ubo-as-plain-uniforms]
用于 OpenGL 使用的着色器无法在 Vulkan 上运行。即使忽略他们对制服的看法不同,他们也有非常不同的资源模型。 Vulkan 使用描述符集和绑定点,所有资源都使用相同的绑定索引(设置+绑定)。相比之下,OpenGL 为每种资源提供了自己独特的一组索引。因此,用于 OpenGL 使用的 GLSL 着色器可能会将纹理统一和统一块分配给相同的绑定索引。但是您不能在用于 Vulkan 的 GLSL 着色器中执行此操作,除非这两个资源位于不同的描述符集中。
如果你想共享着色器,你将需要使用预处理器技巧来确保着色器为编译着色器的特定目标分配资源(包括它如何分配制服) .
有什么方法可以为 Vulkan 自动编译 OpenGL 着色器吗?问题出在制服上。
'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
我试过为 OpenGL 编译,然后用 --vulkan-semantics
的 spirv-cross 反编译,但它仍然有非不透明制服。
spirv-cross 似乎只有为 OpenGL 编译 Vulkan 着色器的工具。
[--glsl-emit-push-constant-as-ubo]
[--glsl-emit-ubo-as-plain-uniforms]
用于 OpenGL 使用的着色器无法在 Vulkan 上运行。即使忽略他们对制服的看法不同,他们也有非常不同的资源模型。 Vulkan 使用描述符集和绑定点,所有资源都使用相同的绑定索引(设置+绑定)。相比之下,OpenGL 为每种资源提供了自己独特的一组索引。因此,用于 OpenGL 使用的 GLSL 着色器可能会将纹理统一和统一块分配给相同的绑定索引。但是您不能在用于 Vulkan 的 GLSL 着色器中执行此操作,除非这两个资源位于不同的描述符集中。
如果你想共享着色器,你将需要使用预处理器技巧来确保着色器为编译着色器的特定目标分配资源(包括它如何分配制服) .