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