我一直在使用Vulkan,但我刚刚学会了专业化常数.规范说:
例如,专用常量对于允许计算着色器在运行时由其更改其本地工作组大小非常有用.
整齐!我想做的几乎就是这样,我也希望将这些变化的常量用于其他目的.但Vulkan规范(目前版本1.0.34)中给出的特化常量的例子似乎都在SPIR-V中,而不是GLSL,我的着色器都是用GLSL编写的.所以我想我可能无法使用这个不错的功能.:(
我对吗?或者有没有办法通过GLSL使用特化常量,作为工作组大小常量,或作为任意常量变量值,还是以其他方式?
Sas*_*ems 14
当然,根据GL_KHR_Vulkan,特殊常量可以与Vulkan中的GLSL一起使用.
这是一个特殊的布局限定符,因此您的GLSL特化常量将如下所示:
layout (constant_id = 0) const int SSAO_KERNEL_SIZE = 64;
然后,在管道创建时使用管道创建信息中使用的着色器阶段创建信息的pSpecializationInfo成员指定这些常量的值.
这也适用于例如计算着色器工作组大小.