有可能有一个专门化常量的数组,这样 glsl 代码看起来类似于以下内容:
layout(constant_id = 0) const vec2 arr[2] = vec2[] (
vec2(2.0f, 2.0f),
vec2(4.0f, 4.0f)
);
或者,或者:
layout(constant_id = 0) const float arr[4] = float[] (
2.0f, 2.0f,
4.0f, 4.0f
);
据我所知,可以使用的专业化常量的数量没有限制,所以感觉很奇怪,这是不可能的,但是当我尝试上述方法时,SPIR-V 编译器通知我“constant_id”只能应用于标量。目前我正在使用统一缓冲区来提供数据,但我想消除后备缓冲区以及在绘制之前绑定缓冲区的需要,并允许系统在可能的情况下在管道创建期间优化代码。