VkResult radv_AllocateDescriptorSets( VkDevice _device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) { RADV_FROM_HANDLE(radv_device, device, _device); RADV_FROM_HANDLE(radv_descriptor_pool, pool, pAllocateInfo->descriptorPool); VkResult result = VK_SUCCESS; uint32_t i; struct radv_descriptor_set *set; /* allocate a set of buffers for each shader to contain descriptors */ for (i = 0; i < pAllocateInfo->descriptorSetCount; i++) { RADV_FROM_HANDLE(radv_descriptor_set_layout, layout, pAllocateInfo->pSetLayouts[i]); assert(!(layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR)); result = radv_descriptor_set_create(device, pool, layout, &set); if (result != VK_SUCCESS) break; pDescriptorSets[i] = radv_descriptor_set_to_handle(set); } if (result != VK_SUCCESS) radv_FreeDescriptorSets(_device, pAllocateInfo->descriptorPool, i, pDescriptorSets); return result; }
VkResult radv_temp_descriptor_set_create(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer, VkDescriptorSetLayout _layout, VkDescriptorSet *_set) { RADV_FROM_HANDLE(radv_descriptor_set_layout, layout, _layout); struct radv_descriptor_set *set; VkResult ret; ret = radv_descriptor_set_create(device, NULL, cmd_buffer, layout, &set); *_set = radv_descriptor_set_to_handle(set); return ret; }