4

2 つのフラグメント シェーダー (GLSL で記述) があり、どちらもサンプラーの配列を持っています。他のバインディングは同じですが、配列は 2 つの間でサイズが異なります。

layout (binding = 2) uniform sampler2D tex[2];

layout (binding = 2) uniform sampler2D tex[4];

VkDescriptorSetLayoutこのパラメーターにVkDescriptorSetLayoutBinding一致するを作成できます。

VkDescriptorSetLayoutBinding parameter;
memset(&parameter, 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(最初のシェーダーの配列の場合) 必要以上に大きくなるということですか? 余分に割り当てられた記述子は、大きなパフォーマンスやメモリの問題ですか?

4

0 に答える 0