自动为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]
yingq0072 回答:自动为Vulkan编译OpenGL着色器

供OpenGL使用的着色器在Vulkan上将不起作用。即使忽略他们在考虑制服方面的差异,他们的资源模型也大不相同。 Vulkan使用描述符集和绑定点,所有资源都使用相同的绑定索引(set + binding)。相比之下,OpenGL为每种资源提供了自己独特的索引集。因此,供OpenGL使用的GLSL着色器可以将纹理统一和统一块分配给相同的绑定索引。但是您不能在用于Vulkan的GLSL着色器中执行此操作,除非这两个资源位于不同的描述符集中。

如果要共享着色器,则将需要使用预处理器技巧,以确保着色器为要为其编译的特定目标分配资源(包括如何分配制服)。 / p>

本文链接:https://www.f2er.com/3044079.html

大家都在问