private void RecreateDescriptorSets() { Graphics.Device.WaitIdle(); // Clean up foreach (var set in GraphicsDescriptorSets.Values) { set.Dispose(); } GraphicsDescriptorSets.Clear(); foreach (var set in ComputeDescriptorSets.Values) { set.Dispose(); } ComputeDescriptorSets.Clear(); // Create sets foreach (var keyList in InstanceLists) { var(texture, animation) = ((Texture2D, Animation))keyList.Key; var list = keyList.Value; // Graphics set var set = GraphicsDescriptorPool.AllocateSets(new DescriptorSetAllocateInfo( 1, GraphicsDescriptorSetLayout ))[0]; GraphicsDescriptorPool.UpdateSets( new WriteDescriptorSet[] { new WriteDescriptorSet( set, 0, 0, 1, DescriptorType.UniformBuffer, bufferInfo: new DescriptorBufferInfo[] { new DescriptorBufferInfo(CameraUniform.Buffer) } ), new WriteDescriptorSet( set, 1, 0, 1, DescriptorType.CombinedImageSampler, imageInfo: new DescriptorImageInfo[] { new DescriptorImageInfo( TextureSampler, texture.Image.ImageView, ImageLayout.ShaderReadOnlyOptimal ) } ), new WriteDescriptorSet( set, 2, 0, 1, DescriptorType.UniformBuffer, bufferInfo: new DescriptorBufferInfo[] { new DescriptorBufferInfo(TimeUniform.Buffer) } ) } ); GraphicsDescriptorSets.Add(list, set); // Compute set set = ComputeDescriptorPool.AllocateSets(new DescriptorSetAllocateInfo( 1, ComputeDescriptorSetLayout ))[0]; ComputeDescriptorPool.UpdateSets( new WriteDescriptorSet[] { new WriteDescriptorSet( set, 0, 0, 1, DescriptorType.StorageBuffer, bufferInfo: new DescriptorBufferInfo[] { new DescriptorBufferInfo(ComputeInstanceBuffers[list].Buffer) } ), new WriteDescriptorSet( set, 1, 0, 1, DescriptorType.StorageBuffer, bufferInfo: new DescriptorBufferInfo[] { new DescriptorBufferInfo(VertexInstanceBuffers[list].Buffer) } ), new WriteDescriptorSet( set, 2, 0, 1, DescriptorType.UniformBuffer, bufferInfo: new DescriptorBufferInfo[] { new DescriptorBufferInfo(TimeUniform.Buffer) } ), new WriteDescriptorSet( set, 3, 0, 1, DescriptorType.UniformBuffer, bufferInfo: new DescriptorBufferInfo[] { new DescriptorBufferInfo(AnimationUniform.Buffer) } ) } ); ComputeDescriptorSets.Add(list, set); } }