private unsafe PoolInfo CreateNewPool() { uint totalSets = 1000; uint descriptorCount = 100; uint poolSizeCount = 7; VkDescriptorPoolSize *sizes = stackalloc VkDescriptorPoolSize[(int)poolSizeCount]; sizes[0].type = VkDescriptorType.UniformBuffer; sizes[0].descriptorCount = descriptorCount; sizes[1].type = VkDescriptorType.SampledImage; sizes[1].descriptorCount = descriptorCount; sizes[2].type = VkDescriptorType.Sampler; sizes[2].descriptorCount = descriptorCount; sizes[3].type = VkDescriptorType.StorageBuffer; sizes[3].descriptorCount = descriptorCount; sizes[4].type = VkDescriptorType.StorageImage; sizes[4].descriptorCount = descriptorCount; sizes[5].type = VkDescriptorType.UniformBufferDynamic; sizes[5].descriptorCount = descriptorCount; sizes[6].type = VkDescriptorType.StorageBufferDynamic; sizes[6].descriptorCount = descriptorCount; VkDescriptorPoolCreateInfo poolCI = VkDescriptorPoolCreateInfo.New(); poolCI.flags = VkDescriptorPoolCreateFlags.FreeDescriptorSet; poolCI.maxSets = totalSets; poolCI.pPoolSizes = sizes; poolCI.poolSizeCount = poolSizeCount; VkResult result = vkCreateDescriptorPool(_gd.Device, ref poolCI, null, out VkDescriptorPool descriptorPool); VulkanUtil.CheckResult(result); return(new PoolInfo(descriptorPool, totalSets, descriptorCount)); }
public VkResourceCache(VkDevice device, VkSamplerState defaultSamplerState) { _device = device; _defaultSamplerState = defaultSamplerState; VkDescriptorPoolSize *sizes = stackalloc VkDescriptorPoolSize[3]; sizes[0].type = VkDescriptorType.UniformBuffer; sizes[0].descriptorCount = 50000; sizes[1].type = VkDescriptorType.SampledImage; sizes[1].descriptorCount = 15000; sizes[2].type = VkDescriptorType.Sampler; sizes[2].descriptorCount = 15000; VkDescriptorPoolCreateInfo descriptorPoolCI = VkDescriptorPoolCreateInfo.New(); descriptorPoolCI.flags = VkDescriptorPoolCreateFlags.FreeDescriptorSet; descriptorPoolCI.maxSets = 15000; descriptorPoolCI.pPoolSizes = sizes; descriptorPoolCI.poolSizeCount = 3; VkResult result = vkCreateDescriptorPool(_device, ref descriptorPoolCI, null, out _descriptorPool); CheckResult(result); }
private unsafe PoolInfo CreateNewPool() { uint totalSets = 1000; uint descriptorCount = 256; uint poolSizeCount = MAX_DESCRIPTOR_COUNT; VkDescriptorPoolSize *sizes = stackalloc VkDescriptorPoolSize[(int)poolSizeCount]; for (int i = 0; i < MAX_DESCRIPTOR_COUNT; i++) { sizes[i].type = descriptorTypes[i]; sizes[i].descriptorCount = descriptorCount; } VkDescriptorPoolInlineUniformBlockCreateInfoEXT descriptorPoolInlineUniformBlockCreateInfo = new VkDescriptorPoolInlineUniformBlockCreateInfoEXT { sType = VkStructureType.DescriptorPoolInlineUniformBlockCreateInfoEXT, maxInlineUniformBlockBindings = totalSets }; var poolCI = new VkDescriptorPoolCreateInfo { sType = VkStructureType.DescriptorPoolCreateInfo, flags = VkDescriptorPoolCreateFlags.FreeDescriptorSet, poolSizeCount = poolSizeCount, maxSets = totalSets, pPoolSizes = sizes, pNext = &descriptorPoolInlineUniformBlockCreateInfo }; var descriptorPool = Device.CreateDescriptorPool(ref poolCI); return(new PoolInfo(descriptorPool, totalSets, descriptorCount)); }
public void Set(params VkDescriptorPoolSize[] value) { IntPtr ptr = (IntPtr)this.pointer; value.Set(ref ptr, ref this.count); this.pointer = (VkDescriptorPoolSize *)ptr; }
private VkDescriptorPool CreateDescriptorPool() { VkDescriptorPoolSize *descriptorPoolSizePtr = stackalloc VkDescriptorPoolSize[2] { new VkDescriptorPoolSize { type = VkDescriptorType.UniformBuffer, descriptorCount = 1 }, new VkDescriptorPoolSize { type = VkDescriptorType.CombinedImageSampler, descriptorCount = 1 } }; var createInfo = new VkDescriptorPoolCreateInfo() { sType = VkStructureType.DescriptorPoolCreateInfo, pNext = null, poolSizeCount = 2, pPoolSizes = descriptorPoolSizePtr, maxSets = 2 }; VkDescriptorPool descriptorPool; vkCreateDescriptorPool(Context.Device, &createInfo, null, out descriptorPool).CheckResult(); return(descriptorPool); }
public VkDescriptorPoolSizeGroup(params VkDescriptorPoolSize[] value) { this.count = 0; this.pointer = null; if (value != null) { IntPtr ptr = IntPtr.Zero; value.Set(ref ptr, ref this.count); this.pointer = (VkDescriptorPoolSize *)ptr; } }
public static VkDescriptorPoolCreateInfo descriptorPoolCreateInfo( uint poolSizeCount, VkDescriptorPoolSize *pPoolSizes, uint maxSets) { VkDescriptorPoolCreateInfo descriptorPoolInfo = VkDescriptorPoolCreateInfo.New(); descriptorPoolInfo.poolSizeCount = poolSizeCount; descriptorPoolInfo.pPoolSizes = pPoolSizes; descriptorPoolInfo.maxSets = maxSets; return(descriptorPoolInfo); }
private void CreateDescriptorPool() { VkDescriptorPoolSize *sizes = stackalloc VkDescriptorPoolSize[3]; sizes[0].type = VkDescriptorType.UniformBuffer; sizes[0].descriptorCount = 5000; sizes[1].type = VkDescriptorType.SampledImage; sizes[1].descriptorCount = 5000; sizes[2].type = VkDescriptorType.Sampler; sizes[2].descriptorCount = 5000; VkDescriptorPoolCreateInfo descriptorPoolCI = VkDescriptorPoolCreateInfo.New(); descriptorPoolCI.flags = VkDescriptorPoolCreateFlags.FreeDescriptorSet; descriptorPoolCI.maxSets = 5000; descriptorPoolCI.pPoolSizes = sizes; descriptorPoolCI.poolSizeCount = 3; VkResult result = vkCreateDescriptorPool(_device, ref descriptorPoolCI, null, out _descriptorPool); CheckResult(result); }