为什么多个顶点缓冲区绑定应该是连续的?

Why multiple vertex buffer bindings should be consecutive?

我为它们创建了几个顶点缓冲区和绑定:

VkVertexInputBindingDescription binding1{0, stride1, VK_VERTEX_INPUT_RATE_VERTEX};
VkVertexInputBindingDescription binding2{1, stride2, VK_VERTEX_INPUT_RATE_VERTEX};

这里可以看到连续的0和1绑定索引。

接下来我记录一个命令缓冲区:

vkCmdBindVertexBuffers(commandBuffer, 0, 1, &buffer1, &offset);
vkCmdBindVertexBuffers(commandBuffer, 1, 1, &buffer2, &offset);

一个电话就可以完成,我知道,但请耐心等待。

现在我正在尝试非连续绑定:

VkVertexInputBindingDescription binding1{0, stride1, VK_VERTEX_INPUT_RATE_VERTEX};
VkVertexInputBindingDescription binding2{2, stride2, VK_VERTEX_INPUT_RATE_VERTEX};

vkCmdBindVertexBuffers(commandBuffer, 0, 1, &buffer1, &offset);
vkCmdBindVertexBuffers(commandBuffer, 2, 1, &buffer2, &offset);

注意 0 和 2 非连续绑定索引。

渲染的模型在这两种情况下确实是正确的,但在第二种情况下,我收到 validation layer: Cannot submit cmd buffer using deleted buffer 0x0. 警告。为什么?

这看起来像是验证层中的错误。他们通过已设置的最高绑定跟踪绑定零中当前绑定的缓冲区,并且在提交命令缓冲区时,他们只是检查所有这些绑定是否都绑定了有效的缓冲区。但是规范只要求顶点输入变量实际引用的绑定具有有效的缓冲区绑定。如果您可以在 https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers.

提交错误,那就太好了