| 30 | 1 import ./vulkan | 
|  | 2 import ./vulkan_helpers | 
|  | 3 import ./math/vector | 
|  | 4 import ./math/matrix | 
|  | 5 import ./buffer | 
|  | 6 | 
|  | 7 type | 
|  | 8   DescriptorType = SomeNumber|Vec|Mat | 
|  | 9   Descriptor*[T:DescriptorType] = object | 
|  | 10     value*: T | 
|  | 11 | 
|  | 12 proc createUniformDescriptorLayout*(device: VkDevice, shaderStage: VkShaderStageFlags, binding: uint32): VkDescriptorSetLayout = | 
|  | 13   var | 
|  | 14     layoutbinding = VkDescriptorSetLayoutBinding( | 
|  | 15       binding: binding, | 
|  | 16       descriptorType: VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, | 
|  | 17       descriptorCount: 1, | 
|  | 18       stageFlags: shaderStage, | 
|  | 19       pImmutableSamplers: nil, | 
|  | 20     ) | 
|  | 21     layoutInfo = VkDescriptorSetLayoutCreateInfo( | 
|  | 22       sType: VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, | 
|  | 23       bindingCount: 1, | 
|  | 24       pBindings: addr(layoutbinding) | 
|  | 25     ) | 
|  | 26   checkVkResult device.vkCreateDescriptorSetLayout(addr(layoutInfo), nil, addr(result)) | 
|  | 27 | 
|  | 28 proc createUniformBuffers*[nBuffers: static int, T](device: VkDevice, physicalDevice: VkPhysicalDevice): array[nBuffers, Buffer] = | 
|  | 29   let size = sizeof(T) | 
|  | 30   for i in 0 ..< nBuffers: | 
|  | 31     var buffer = InitBuffer( | 
|  | 32       device, | 
|  | 33       physicalDevice, | 
|  | 34       uint64(size), | 
|  | 35       {UniformBuffer}, | 
|  | 36       {VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, VK_MEMORY_PROPERTY_HOST_COHERENT_BIT}, | 
|  | 37       persistentMapping=true, | 
|  | 38     ) | 
|  | 39     result[i] = buffer |