2 つのフラグメント シェーダー (GLSL で記述) があり、どちらもサンプラーの配列を持っています。他のバインディングは同じですが、配列は 2 つの間でサイズが異なります。
layout (binding = 2) uniform sampler2D tex[2];
対
layout (binding = 2) uniform sampler2D tex[4];
VkDescriptorSetLayout
このパラメーターにVkDescriptorSetLayoutBinding
一致するを作成できます。
VkDescriptorSetLayoutBinding parameter;
memset(¶meter, 0, sizeof(VkDescriptorSetLayoutBinding));
parameter.binding = 2;
parameter.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
parameter.descriptorCount = 4;
parameter.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
// go on to call vkCreateDescriptorSetLayout with this VkDescriptorSetBinding (and others)
作成されたVkDescriptorSetLayout
は、両方のシェーダーにバインドするために正しく機能します。
2 つの質問:
未使用の記述子の唯一の意味は、VkDescriptorSet
(最初のシェーダーの配列の場合) 必要以上に大きくなるということですか? 余分に割り当てられた記述子は、大きなパフォーマンスやメモリの問題ですか?