/// <summary> /// /// </summary> public unsafe void FreeDescriptorSets(SharpVk.DescriptorSet[] descriptorSets) { try { SharpVk.Interop.DescriptorSet *marshalledDescriptorSets = default(SharpVk.Interop.DescriptorSet *); if (descriptorSets != null) { var fieldPointer = (SharpVk.Interop.DescriptorSet *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.DescriptorSet>(descriptorSets.Length).ToPointer()); for (int index = 0; index < (uint)(descriptorSets.Length); index++) { fieldPointer[index] = descriptorSets[index]?.handle ?? default(SharpVk.Interop.DescriptorSet); } marshalledDescriptorSets = fieldPointer; } else { marshalledDescriptorSets = null; } Result methodResult = Interop.Commands.vkFreeDescriptorSets(this.parent.handle, this.handle, (uint)(descriptorSets?.Length ?? 0), marshalledDescriptorSets); if (SharpVkException.IsError(methodResult)) { throw SharpVkException.Create(methodResult); } } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// /// </summary> public unsafe void BindDescriptorSets(SharpVk.PipelineBindPoint pipelineBindPoint, SharpVk.PipelineLayout layout, uint firstSet, SharpVk.DescriptorSet[] descriptorSets, uint[] dynamicOffsets) { try { SharpVk.Interop.DescriptorSet *marshalledDescriptorSets = default(SharpVk.Interop.DescriptorSet *); uint *marshalledDynamicOffsets = default(uint *); if (descriptorSets != null) { var fieldPointer = (SharpVk.Interop.DescriptorSet *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.DescriptorSet>(descriptorSets.Length).ToPointer()); for (int index = 0; index < (uint)(descriptorSets.Length); index++) { fieldPointer[index] = descriptorSets[index]?.handle ?? default(SharpVk.Interop.DescriptorSet); } marshalledDescriptorSets = fieldPointer; } else { marshalledDescriptorSets = null; } if (dynamicOffsets != null) { var fieldPointer = (uint *)(Interop.HeapUtil.AllocateAndClear <uint>(dynamicOffsets.Length).ToPointer()); for (int index = 0; index < (uint)(dynamicOffsets.Length); index++) { fieldPointer[index] = dynamicOffsets[index]; } marshalledDynamicOffsets = fieldPointer; } else { marshalledDynamicOffsets = null; } Interop.Commands.vkCmdBindDescriptorSets(this.handle, pipelineBindPoint, layout?.handle ?? default(SharpVk.Interop.PipelineLayout), firstSet, (uint)(descriptorSets?.Length ?? 0), marshalledDescriptorSets, (uint)(dynamicOffsets?.Length ?? 0), marshalledDynamicOffsets); } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// Free one or more descriptor sets. /// </summary> /// <param name="descriptorSets"> /// </param> public unsafe void FreeDescriptorSets(ArrayProxy <SharpVk.DescriptorSet>?descriptorSets) { try { SharpVk.Interop.DescriptorSet *marshalledDescriptorSets = default(SharpVk.Interop.DescriptorSet *); if (descriptorSets.IsNull()) { marshalledDescriptorSets = null; } else { if (descriptorSets.Value.Contents == ProxyContents.Single) { marshalledDescriptorSets = (SharpVk.Interop.DescriptorSet *)(Interop.HeapUtil.Allocate <SharpVk.Interop.DescriptorSet>()); *(SharpVk.Interop.DescriptorSet *)(marshalledDescriptorSets) = descriptorSets.Value.GetSingleValue()?.handle ?? default(SharpVk.Interop.DescriptorSet); } else { var fieldPointer = (SharpVk.Interop.DescriptorSet *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.DescriptorSet>(Interop.HeapUtil.GetLength(descriptorSets.Value)).ToPointer()); for (int index = 0; index < (uint)(Interop.HeapUtil.GetLength(descriptorSets.Value)); index++) { fieldPointer[index] = descriptorSets.Value[index]?.handle ?? default(SharpVk.Interop.DescriptorSet); } marshalledDescriptorSets = fieldPointer; } } SharpVk.Interop.VkDescriptorPoolFreeDescriptorSetsDelegate commandDelegate = commandCache.GetCommandDelegate <SharpVk.Interop.VkDescriptorPoolFreeDescriptorSetsDelegate>("vkFreeDescriptorSets", ""); Result methodResult = commandDelegate(this.parent.handle, this.handle, (uint)(Interop.HeapUtil.GetLength(descriptorSets)), marshalledDescriptorSets); if (SharpVkException.IsError(methodResult)) { throw SharpVkException.Create(methodResult); } } finally { Interop.HeapUtil.FreeAll(); } }
public static extern void vkCmdBindDescriptorSets(SharpVk.Interop.CommandBuffer commandBuffer, SharpVk.PipelineBindPoint pipelineBindPoint, SharpVk.Interop.PipelineLayout layout, uint firstSet, uint descriptorSetCount, SharpVk.Interop.DescriptorSet *descriptorSets, uint dynamicOffsetCount, uint *dynamicOffsets);
public static extern SharpVk.Result vkFreeDescriptorSets(SharpVk.Interop.Device device, SharpVk.Interop.DescriptorPool descriptorPool, uint descriptorSetCount, SharpVk.Interop.DescriptorSet *descriptorSets);
public static extern SharpVk.Result vkAllocateDescriptorSets(SharpVk.Interop.Device device, SharpVk.Interop.DescriptorSetAllocateInfo *allocateInfo, SharpVk.Interop.DescriptorSet *descriptorSets);