跳到主要内容

:material-chevron-right-circle: vkCmdBindDescriptorSets

函数原型

void vkCmdBindDescriptorSets(
VkCommandBuffer commandBuffer,
VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet* pDescriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t* pDynamicOffsets);

描述

绑定 descriptor set(描述符集)到命令缓冲区。

参数

  • commandBuffer : 录制指令的命令缓冲区。
  • pipelineBindPoint : 是 graphics 还是 compute(VK_PIPELINE_BIND_POINT_GRAPHICS / VK_PIPELINE_BIND_POINT_COMPUTE)。
  • layout : 创建 pipeline 时用的 VkPipelineLayout,定义了 descriptor set 的布局。
  • firstSet : 要绑定的第一个 descriptor set 的索引(set = N)。
  • descriptorSetCount : 要绑定的 descriptor set 数量。
  • pDescriptorSets : 指向 descriptor sets 数组。
  • dynamicOffsetCount : 动态偏移数量(如果使用了 dynamic uniform/storage buffer)。
  • pDynamicOffsets : 指向动态偏移数组。

返回值

代码示例

VkDescriptorSet descriptorSet1;
VkDescriptorSet descriptorSet2;

// 创建descriptorSet
vkAllocateDescriptorSets(device, &allocInfo1, &descriptorSet1);
vkAllocateDescriptorSets(device, &allocInfo2, &descriptorSet2);


// 更新descriptorSet
VkWriteDescriptorSet descriptorWriteSet1 = {}
descriptorWriteSet1.dstSet = &descriptorSet1;
descriptorWriteSet1.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
descriptorWriteSet1.dstBinding = 0;
descriptorWriteSet1.pBufferInfo = buffer1;
descriptorWriteSet1.descriptorCount = 1;
vkUpdateDescriptorSets(device, 1, &descriptorWriteSet1, 0, nullptr);

VkWriteDescriptorSet descriptorWriteSet2 = {}
descriptorWriteSet1.dstSet = &descriptorSet2;
descriptorWriteSet1.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
descriptorWriteSet1.dstBinding = 0;
descriptorWriteSet1.pBufferInfo = buffer2;
descriptorWriteSet1.descriptorCount = 1;
vkUpdateDescriptorSets(device, 1, &descriptorWriteSet2, 0, nullptr);

// 绑定descriptorSet
uint32_t descSetsCount = 2;
VkDescriptorSet descriptorsets[] = {descriptorSet1, descriptorSet2};
uint32_t dynamicOffsetsCount = 2;
uint32_t pDynamicOffsets[] = {4132864, 4136960};
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout7723, 0, descSetsCount, descriptorsets, dynamicOffsetsCount, pDynamicOffsets);