Example #1
0
        public DescriptorSet(DescriptorSetLayout resLayout)
        {
            resLayout.Build();

            descriptorPool = Graphics.DescriptorPoolManager.GetPool(ref resLayout.descriptorResourceCounts, Swapchain.IMAGE_COUNT);
            resourceLayout = resLayout;

            unsafe
            {
                var setLayouts = stackalloc VkDescriptorSetLayout[3] {
                    resLayout.Handle, resLayout.Handle, resLayout.Handle
                };

                var descriptorSetAllocateInfo = new VkDescriptorSetAllocateInfo
                {
                    sType              = VkStructureType.DescriptorSetAllocateInfo,
                    descriptorPool     = descriptorPool,
                    pSetLayouts        = setLayouts,
                    descriptorSetCount = Swapchain.IMAGE_COUNT
                };

                Device.AllocateDescriptorSets(ref descriptorSetAllocateInfo, (VkDescriptorSet *)descriptorSet.Data);
            }

            bindedRes = new IBindableResource[resLayout.NumBindings];

            for (int i = 0; i < Swapchain.IMAGE_COUNT; i++)
            {
                writeDescriptorSets[i] = new VkWriteDescriptorSet[resLayout.NumBindings];
            }
        }
Example #2
0
        public DescriptorSet(DescriptorSetLayout resLayout, params IBindableResource[] bindables)
        {
            resLayout.Build();

            descriptorPool = Graphics.DescriptorPoolManager.GetPool(ref resLayout.descriptorResourceCounts, Swapchain.IMAGE_COUNT);
            resourceLayout = resLayout;

            unsafe
            {
                var setLayouts = stackalloc VkDescriptorSetLayout[3] {
                    resLayout.Handle, resLayout.Handle, resLayout.Handle
                };
                var descriptorSetAllocateInfo = new VkDescriptorSetAllocateInfo
                {
                    sType              = VkStructureType.DescriptorSetAllocateInfo,
                    descriptorPool     = descriptorPool,
                    pSetLayouts        = setLayouts,
                    descriptorSetCount = Swapchain.IMAGE_COUNT
                };

                Device.AllocateDescriptorSets(ref descriptorSetAllocateInfo, (VkDescriptorSet *)descriptorSet.Data);
            }

            bindedRes = new IBindableResource[resLayout.NumBindings];

            System.Diagnostics.Debug.Assert(bindables.Length == resLayout.NumBindings);

            for (int i = 0; i < Swapchain.IMAGE_COUNT; i++)
            {
                writeDescriptorSets[i] = new VkWriteDescriptorSet[resLayout.NumBindings];
            }

            for (uint i = 0; i < resLayout.NumBindings; i++)
            {
                BindResource(i, bindables[i]);
            }

            UpdateSets();
        }
Example #3
0
 public static void vkUpdateDescriptorSets(VkDevice device, VkWriteDescriptorSet writeDescriptorSet, VkCopyDescriptorSet copyDescriptorSet)
 {
     vkUpdateDescriptorSets(device, 1, &writeDescriptorSet, 1, &copyDescriptorSet);
 }
Example #4
0
 public static void UpdateDescriptorSets(uint descriptorWriteCount, ref VkWriteDescriptorSet pDescriptorWrites, uint descriptorCopyCount, IntPtr pDescriptorCopies)
 {
     vkUpdateDescriptorSets(device, descriptorWriteCount, Utilities.AsPtr(ref pDescriptorWrites), descriptorCopyCount, (VkCopyDescriptorSet *)pDescriptorCopies);
 }
Example #5
0
 public static void vkUpdateDescriptorSets(VkDevice device, VkWriteDescriptorSet writeDescriptorSet)
 {
     vkUpdateDescriptorSets(device, 1, &writeDescriptorSet, 0, null);
 }