Esempio n. 1
0
        internal static void Update(DescriptorPool parent,
                                    WriteDescriptorSet[] descriptorWrites, CopyDescriptorSet[] descriptorCopies)
        {
            int descriptorWriteCount      = descriptorWrites?.Length ?? 0;
            var nativeDescriptorWritesPtr = stackalloc WriteDescriptorSet.Native[descriptorWriteCount];

            for (int i = 0; i < descriptorWriteCount; i++)
            {
                descriptorWrites[i].ToNative(&nativeDescriptorWritesPtr[i]);
            }

            int descriptorCopyCount = descriptorCopies?.Length ?? 0;

            for (int i = 0; i < descriptorCopyCount; i++)
            {
                descriptorCopies[i].Prepare();

                fixed(CopyDescriptorSet *descriptorCopiesPtr = descriptorCopies)
                {
                    vkUpdateDescriptorSets(
                        parent.Parent,
                        descriptorWriteCount,
                        nativeDescriptorWritesPtr,
                        descriptorCopyCount,
                        descriptorCopiesPtr);
                }

                for (int i = 0; i < descriptorWriteCount; i++)
                    nativeDescriptorWritesPtr[i].Free(); }
        }
Esempio n. 2
0
 internal void ToNative(out Native native, DescriptorPool pool, long *setLayouts)
 {
     native.Type               = StructureType.DescriptorSetAllocateInfo;
     native.Next               = IntPtr.Zero;
     native.DescriptorPool     = pool;
     native.DescriptorSetCount = DescriptorSetCount;
     native.SetLayouts         = setLayouts;
 }
Esempio n. 3
0
        internal static void Free(DescriptorPool parent, DescriptorSet[] descriptorSets)
        {
            int count             = descriptorSets?.Length ?? 0;
            var descriptorSetsPtr = stackalloc long[count];

            for (int i = 0; i < count; i++)
            {
                descriptorSetsPtr[i] = descriptorSets[i];
            }

            Result result = vkFreeDescriptorSets(parent.Parent, parent, count, descriptorSetsPtr);

            VulkanException.ThrowForInvalidResult(result);
        }
Esempio n. 4
0
        internal static DescriptorSet[] Allocate(DescriptorPool parent, ref DescriptorSetAllocateInfo createInfo)
        {
            fixed(long *setLayoutsPtr = createInfo.SetLayouts)
            {
                createInfo.ToNative(out DescriptorSetAllocateInfo.Native nativeCreateInfo, parent, setLayoutsPtr);

                int count = createInfo.SetLayouts?.Length ?? 0;

                var    descriptorSetsPtr = stackalloc long[count];
                Result result            = vkAllocateDescriptorSets(parent.Parent, &nativeCreateInfo, descriptorSetsPtr);

                VulkanException.ThrowForInvalidResult(result);

                var descriptorSets = new DescriptorSet[count];

                for (int i = 0; i < count; i++)
                {
                    descriptorSets[i] = new DescriptorSet(parent, descriptorSetsPtr[i]);
                }
                return(descriptorSets);
            }
        }
Esempio n. 5
0
 internal DescriptorSet(DescriptorPool parent, long handle)
 {
     Parent = parent;
     Handle = handle;
 }