vn_descriptor_set_layout_init(
struct vn_device *dev,
const VkDescriptorSetLayoutCreateInfo *create_info,
+ uint32_t last_binding,
struct vn_descriptor_set_layout *layout)
{
VkDevice dev_handle = vn_device_to_handle(dev);
VkDescriptorSetLayout layout_handle =
vn_descriptor_set_layout_to_handle(layout);
+ layout->last_binding = last_binding;
+
for (uint32_t i = 0; i < create_info->bindingCount; i++) {
const VkDescriptorSetLayoutBinding *binding_info =
&create_info->pBindings[i];
struct vn_descriptor_set_layout_binding *binding =
&layout->bindings[binding_info->binding];
+ binding->type = binding_info->descriptorType;
+ binding->count = binding_info->descriptorCount;
+
switch (binding_info->descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
const VkAllocationCallbacks *alloc =
pAllocator ? pAllocator : &dev->base.base.alloc;
- uint32_t max_binding = 0;
+ uint32_t last_binding = 0;
VkDescriptorSetLayoutBinding *local_bindings = NULL;
VkDescriptorSetLayoutCreateInfo local_create_info;
if (pCreateInfo->bindingCount) {
for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) {
VkDescriptorSetLayoutBinding *binding = &local_bindings[i];
- if (max_binding < binding->binding)
- max_binding = binding->binding;
+ if (last_binding < binding->binding)
+ last_binding = binding->binding;
switch (binding->descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER:
}
const size_t layout_size =
- offsetof(struct vn_descriptor_set_layout, bindings[max_binding + 1]);
+ offsetof(struct vn_descriptor_set_layout, bindings[last_binding + 1]);
struct vn_descriptor_set_layout *layout =
vk_zalloc(alloc, layout_size, VN_DEFAULT_ALIGN,
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
vn_object_base_init(&layout->base, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
&dev->base);
- vn_descriptor_set_layout_init(dev, pCreateInfo, layout);
+ vn_descriptor_set_layout_init(dev, pCreateInfo, last_binding, layout);
vk_free(alloc, local_bindings);