Vulkan 专业化常量可以用 GLSL 表示吗?
Can Vulkan specialization constants be expressed in GLSL?
我使用 Vulkan 有一段时间了,但我现在才了解专业化常量。规范说:
Specialization constants are useful to allow a compute shader to have its local workgroup size changed at runtime by the user, for example.
整洁!我想做的几乎完全一样,我也想将这些变化的常量用于其他目的。但是Vulkan规范(目前版本1.0.34)中给出的专业化常量的例子似乎都是SPIR-V,而不是GLSL,我的着色器都是用GLSL写的。所以我想我可能无法使用这个不错的功能。 :(
我说的对吗?或者有没有办法通过 GLSL 使用专业化常量,作为工作组大小常量,或作为任意常量变量值,或以其他方式?
当然,根据 GL_KHR_Vulkan,专业化常量可以与 Vulkan 中的 GLSL 一起使用。
这是一个特殊的布局限定符,因此您的 GLSL 专业化常量将如下所示:
layout (constant_id = 0) const int SSAO_KERNEL_SIZE = 64;
然后在使用着色器阶段创建信息的 pSpecializationInfo 成员创建管道时指定这些常量的值,创建信息在管道创建信息中使用。
这也适用于例如计算着色器工作组大小。
我使用 Vulkan 有一段时间了,但我现在才了解专业化常量。规范说:
Specialization constants are useful to allow a compute shader to have its local workgroup size changed at runtime by the user, for example.
整洁!我想做的几乎完全一样,我也想将这些变化的常量用于其他目的。但是Vulkan规范(目前版本1.0.34)中给出的专业化常量的例子似乎都是SPIR-V,而不是GLSL,我的着色器都是用GLSL写的。所以我想我可能无法使用这个不错的功能。 :(
我说的对吗?或者有没有办法通过 GLSL 使用专业化常量,作为工作组大小常量,或作为任意常量变量值,或以其他方式?
当然,根据 GL_KHR_Vulkan,专业化常量可以与 Vulkan 中的 GLSL 一起使用。
这是一个特殊的布局限定符,因此您的 GLSL 专业化常量将如下所示:
layout (constant_id = 0) const int SSAO_KERNEL_SIZE = 64;
然后在使用着色器阶段创建信息的 pSpecializationInfo 成员创建管道时指定这些常量的值,创建信息在管道创建信息中使用。
这也适用于例如计算着色器工作组大小。