Beispiel #1
0
 /// <summary>
 ///
 /// </summary>
 public unsafe void PushConstants(SharpVk.PipelineLayout layout, SharpVk.ShaderStageFlags stageFlags, uint offset, byte[] values)
 {
     try
     {
         byte *marshalledValues = default(byte *);
         if (values != null)
         {
             var fieldPointer = (byte *)(Interop.HeapUtil.AllocateAndClear <byte>(values.Length).ToPointer());
             for (int index = 0; index < (uint)(values.Length); index++)
             {
                 fieldPointer[index] = values[index];
             }
             marshalledValues = fieldPointer;
         }
         else
         {
             marshalledValues = null;
         }
         Interop.Commands.vkCmdPushConstants(this.handle, layout?.handle ?? default(SharpVk.Interop.PipelineLayout), stageFlags, offset, (uint)(values?.Length ?? 0), marshalledValues);
     }
     finally
     {
         Interop.HeapUtil.FreeAll();
     }
 }
 /// <summary>
 /// Pushes descriptor updates into a command buffer using a descriptor
 /// update template.
 /// </summary>
 /// <param name="extendedHandle">
 /// The CommandBuffer handle to extend.
 /// </param>
 /// <param name="descriptorUpdateTemplate">
 /// </param>
 /// <param name="layout">
 /// </param>
 /// <param name="set">
 /// </param>
 /// <param name="data">
 /// </param>
 public static unsafe void PushDescriptorSetWithTemplate(this SharpVk.CommandBuffer extendedHandle, SharpVk.DescriptorUpdateTemplate descriptorUpdateTemplate, SharpVk.PipelineLayout layout, uint set, IntPtr data)
 {
     try
     {
         CommandCache commandCache = default(CommandCache);
         commandCache = extendedHandle.commandCache;
         SharpVk.Interop.Khronos.VkCommandBufferPushDescriptorSetWithTemplateDelegate commandDelegate = commandCache.Cache.vkCmdPushDescriptorSetWithTemplateKHR;
         commandDelegate(extendedHandle.handle, descriptorUpdateTemplate?.handle ?? default(SharpVk.Interop.DescriptorUpdateTemplate), layout?.handle ?? default(SharpVk.Interop.PipelineLayout), set, data.ToPointer());
     }
     finally
     {
         Interop.HeapUtil.FreeAll();
     }
 }
 /// <summary>
 /// Pushes descriptor updates into a command buffer.
 /// </summary>
 /// <param name="extendedHandle">
 /// The CommandBuffer handle to extend.
 /// </param>
 /// <param name="pipelineBindPoint">
 /// </param>
 /// <param name="layout">
 /// </param>
 /// <param name="set">
 /// </param>
 /// <param name="descriptorWrites">
 /// </param>
 public static unsafe void PushDescriptorSet(this SharpVk.CommandBuffer extendedHandle, SharpVk.PipelineBindPoint pipelineBindPoint, SharpVk.PipelineLayout layout, uint set, ArrayProxy <SharpVk.WriteDescriptorSet>?descriptorWrites)
 {
     try
     {
         CommandCache commandCache = default(CommandCache);
         SharpVk.Interop.WriteDescriptorSet *marshalledDescriptorWrites = default(SharpVk.Interop.WriteDescriptorSet *);
         commandCache = extendedHandle.commandCache;
         if (descriptorWrites.IsNull())
         {
             marshalledDescriptorWrites = null;
         }
         else
         {
             if (descriptorWrites.Value.Contents == ProxyContents.Single)
             {
                 marshalledDescriptorWrites = (SharpVk.Interop.WriteDescriptorSet *)(Interop.HeapUtil.Allocate <SharpVk.Interop.WriteDescriptorSet>());
                 descriptorWrites.Value.GetSingleValue().MarshalTo(&*(SharpVk.Interop.WriteDescriptorSet *)(marshalledDescriptorWrites));
             }
             else
             {
                 var fieldPointer = (SharpVk.Interop.WriteDescriptorSet *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.WriteDescriptorSet>(Interop.HeapUtil.GetLength(descriptorWrites.Value)).ToPointer());
                 for (int index = 0; index < (uint)(Interop.HeapUtil.GetLength(descriptorWrites.Value)); index++)
                 {
                     descriptorWrites.Value[index].MarshalTo(&fieldPointer[index]);
                 }
                 marshalledDescriptorWrites = fieldPointer;
             }
         }
         SharpVk.Interop.Khronos.VkCommandBufferPushDescriptorSetDelegate commandDelegate = commandCache.Cache.vkCmdPushDescriptorSetKHR;
         commandDelegate(extendedHandle.handle, pipelineBindPoint, layout?.handle ?? default(SharpVk.Interop.PipelineLayout), set, (uint)(Interop.HeapUtil.GetLength(descriptorWrites)), marshalledDescriptorWrites);
     }
     finally
     {
         Interop.HeapUtil.FreeAll();
     }
 }
Beispiel #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="extendedHandle">
 /// The Device handle to extend.
 /// </param>
 /// <param name="pipelineCache">
 /// </param>
 /// <param name="flags">
 /// </param>
 /// <param name="stages">
 /// </param>
 /// <param name="groups">
 /// </param>
 /// <param name="maxRecursionDepth">
 /// </param>
 /// <param name="layout">
 /// </param>
 /// <param name="basePipelineHandle">
 /// </param>
 /// <param name="basePipelineIndex">
 /// </param>
 /// <param name="pipelineCreationFeedbackCreateInfoExt">
 /// Extension struct
 /// </param>
 /// <param name="allocator">
 /// </param>
 public static unsafe SharpVk.Pipeline CreateRayTracingPipeline(this SharpVk.Device extendedHandle, SharpVk.PipelineCache pipelineCache, ArrayProxy <SharpVk.PipelineShaderStageCreateInfo>?stages, ArrayProxy <SharpVk.NVidia.RayTracingShaderGroupCreateInfo>?groups, uint maxRecursionDepth, SharpVk.PipelineLayout layout, SharpVk.Pipeline basePipelineHandle, int basePipelineIndex, SharpVk.PipelineCreateFlags?flags = default(SharpVk.PipelineCreateFlags?), SharpVk.Multivendor.PipelineCreationFeedbackCreateInfo?pipelineCreationFeedbackCreateInfoExt = null, SharpVk.AllocationCallbacks?allocator = default(SharpVk.AllocationCallbacks?))
 {
     try
     {
         SharpVk.Pipeline result       = default(SharpVk.Pipeline);
         CommandCache     commandCache = default(CommandCache);
         uint             marshalledCreateInfoCount = default(uint);
         SharpVk.Interop.NVidia.RayTracingPipelineCreateInfo *marshalledCreateInfos = default(SharpVk.Interop.NVidia.RayTracingPipelineCreateInfo *);
         void *vkRayTracingPipelineCreateInfoNVNextPointer        = default(void *);
         SharpVk.Interop.AllocationCallbacks *marshalledAllocator = default(SharpVk.Interop.AllocationCallbacks *);
         SharpVk.Interop.Pipeline *           marshalledPipelines = default(SharpVk.Interop.Pipeline *);
         if (pipelineCreationFeedbackCreateInfoExt != null)
         {
             SharpVk.Interop.Multivendor.PipelineCreationFeedbackCreateInfo *extensionPointer = default(SharpVk.Interop.Multivendor.PipelineCreationFeedbackCreateInfo *);
             extensionPointer = (SharpVk.Interop.Multivendor.PipelineCreationFeedbackCreateInfo *)(Interop.HeapUtil.Allocate <SharpVk.Interop.Multivendor.PipelineCreationFeedbackCreateInfo>());
             pipelineCreationFeedbackCreateInfoExt.Value.MarshalTo(extensionPointer);
             extensionPointer->Next = vkRayTracingPipelineCreateInfoNVNextPointer;
             vkRayTracingPipelineCreateInfoNVNextPointer = extensionPointer;
         }
         commandCache = extendedHandle.commandCache;
         marshalledCreateInfoCount    = 1;
         marshalledCreateInfos        = (SharpVk.Interop.NVidia.RayTracingPipelineCreateInfo *)(Interop.HeapUtil.Allocate <SharpVk.Interop.NVidia.RayTracingPipelineCreateInfo>());
         marshalledCreateInfos->SType = StructureType.RayTracingPipelineCreateInfo;
         marshalledCreateInfos->Next  = vkRayTracingPipelineCreateInfoNVNextPointer;
         if (flags != null)
         {
             marshalledCreateInfos->Flags = flags.Value;
         }
         else
         {
             marshalledCreateInfos->Flags = default(SharpVk.PipelineCreateFlags);
         }
         marshalledCreateInfos->StageCount = (uint)(Interop.HeapUtil.GetLength(stages));
         if (stages.IsNull())
         {
             marshalledCreateInfos->Stages = null;
         }
         else
         {
             if (stages.Value.Contents == ProxyContents.Single)
             {
                 marshalledCreateInfos->Stages = (SharpVk.Interop.PipelineShaderStageCreateInfo *)(Interop.HeapUtil.Allocate <SharpVk.Interop.PipelineShaderStageCreateInfo>());
                 stages.Value.GetSingleValue().MarshalTo(&*(SharpVk.Interop.PipelineShaderStageCreateInfo *)(marshalledCreateInfos->Stages));
             }
             else
             {
                 var fieldPointer = (SharpVk.Interop.PipelineShaderStageCreateInfo *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.PipelineShaderStageCreateInfo>(Interop.HeapUtil.GetLength(stages.Value)).ToPointer());
                 for (int index = 0; index < (uint)(Interop.HeapUtil.GetLength(stages.Value)); index++)
                 {
                     stages.Value[index].MarshalTo(&fieldPointer[index]);
                 }
                 marshalledCreateInfos->Stages = fieldPointer;
             }
         }
         marshalledCreateInfos->GroupCount = (uint)(Interop.HeapUtil.GetLength(groups));
         if (groups.IsNull())
         {
             marshalledCreateInfos->Groups = null;
         }
         else
         {
             if (groups.Value.Contents == ProxyContents.Single)
             {
                 marshalledCreateInfos->Groups = (SharpVk.Interop.NVidia.RayTracingShaderGroupCreateInfo *)(Interop.HeapUtil.Allocate <SharpVk.Interop.NVidia.RayTracingShaderGroupCreateInfo>());
                 groups.Value.GetSingleValue().MarshalTo(&*(SharpVk.Interop.NVidia.RayTracingShaderGroupCreateInfo *)(marshalledCreateInfos->Groups));
             }
             else
             {
                 var fieldPointer = (SharpVk.Interop.NVidia.RayTracingShaderGroupCreateInfo *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.NVidia.RayTracingShaderGroupCreateInfo>(Interop.HeapUtil.GetLength(groups.Value)).ToPointer());
                 for (int index = 0; index < (uint)(Interop.HeapUtil.GetLength(groups.Value)); index++)
                 {
                     groups.Value[index].MarshalTo(&fieldPointer[index]);
                 }
                 marshalledCreateInfos->Groups = fieldPointer;
             }
         }
         marshalledCreateInfos->MaxRecursionDepth  = maxRecursionDepth;
         marshalledCreateInfos->Layout             = layout?.handle ?? default(SharpVk.Interop.PipelineLayout);
         marshalledCreateInfos->BasePipelineHandle = basePipelineHandle?.handle ?? default(SharpVk.Interop.Pipeline);
         marshalledCreateInfos->BasePipelineIndex  = basePipelineIndex;
         if (allocator != null)
         {
             marshalledAllocator = (SharpVk.Interop.AllocationCallbacks *)(Interop.HeapUtil.Allocate <SharpVk.Interop.AllocationCallbacks>());
             allocator.Value.MarshalTo(marshalledAllocator);
         }
         else
         {
             marshalledAllocator = default(SharpVk.Interop.AllocationCallbacks *);
         }
         marshalledPipelines = (SharpVk.Interop.Pipeline *)(Interop.HeapUtil.Allocate <SharpVk.Interop.Pipeline>(1));
         SharpVk.Interop.NVidia.VkDeviceCreateRayTracingPipelinesDelegate commandDelegate = commandCache.Cache.vkCreateRayTracingPipelinesNV;
         Result methodResult = commandDelegate(extendedHandle.handle, pipelineCache?.handle ?? default(SharpVk.Interop.PipelineCache), marshalledCreateInfoCount, marshalledCreateInfos, marshalledAllocator, marshalledPipelines);
         if (SharpVkException.IsError(methodResult))
         {
             throw SharpVkException.Create(methodResult);
         }
         result = new SharpVk.Pipeline(extendedHandle, *marshalledPipelines);
         return(result);
     }
     finally
     {
         Interop.HeapUtil.FreeAll();
     }
 }
 /// <summary>
 ///
 /// </summary>
 public static unsafe SharpVk.Khronos.DescriptorUpdateTemplate CreateDescriptorUpdateTemplate(this SharpVk.Device extendedHandle, SharpVk.Khronos.DescriptorUpdateTemplateEntry[] descriptorUpdateEntries, SharpVk.Khronos.DescriptorUpdateTemplateType templateType, SharpVk.DescriptorSetLayout descriptorSetLayout, SharpVk.PipelineLayout pipelineLayout, SharpVk.Khronos.DescriptorUpdateTemplateCreateFlags?flags = default(SharpVk.Khronos.DescriptorUpdateTemplateCreateFlags?), SharpVk.PipelineBindPoint?pipelineBindPoint = default(SharpVk.PipelineBindPoint?), uint?set = default(uint?), SharpVk.AllocationCallbacks?allocator = default(SharpVk.AllocationCallbacks?))
 {
     try
     {
         SharpVk.Khronos.DescriptorUpdateTemplate result = default(SharpVk.Khronos.DescriptorUpdateTemplate);
         CommandCache commandCache = default(CommandCache);
         SharpVk.Interop.Khronos.DescriptorUpdateTemplateCreateInfo *marshalledCreateInfo    = default(SharpVk.Interop.Khronos.DescriptorUpdateTemplateCreateInfo *);
         SharpVk.Interop.AllocationCallbacks *            marshalledAllocator                = default(SharpVk.Interop.AllocationCallbacks *);
         SharpVk.Interop.Khronos.DescriptorUpdateTemplate marshalledDescriptorUpdateTemplate = default(SharpVk.Interop.Khronos.DescriptorUpdateTemplate);
         commandCache                = extendedHandle.commandCache;
         marshalledCreateInfo        = (SharpVk.Interop.Khronos.DescriptorUpdateTemplateCreateInfo *)(Interop.HeapUtil.Allocate <SharpVk.Interop.Khronos.DescriptorUpdateTemplateCreateInfo>());
         marshalledCreateInfo->SType = StructureType.DescriptorUpdateTemplateCreateInfoKhr;
         marshalledCreateInfo->Next  = null;
         if (flags != null)
         {
             marshalledCreateInfo->Flags = flags.Value;
         }
         else
         {
             marshalledCreateInfo->Flags = default(SharpVk.Khronos.DescriptorUpdateTemplateCreateFlags);
         }
         marshalledCreateInfo->DescriptorUpdateEntryCount = (uint)(descriptorUpdateEntries?.Length ?? 0);
         if (descriptorUpdateEntries != null)
         {
             var fieldPointer = (SharpVk.Khronos.DescriptorUpdateTemplateEntry *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Khronos.DescriptorUpdateTemplateEntry>(descriptorUpdateEntries.Length).ToPointer());
             for (int index = 0; index < (uint)(descriptorUpdateEntries.Length); index++)
             {
                 fieldPointer[index] = descriptorUpdateEntries[index];
             }
             marshalledCreateInfo->DescriptorUpdateEntries = fieldPointer;
         }
         else
         {
             marshalledCreateInfo->DescriptorUpdateEntries = null;
         }
         marshalledCreateInfo->TemplateType        = templateType;
         marshalledCreateInfo->DescriptorSetLayout = descriptorSetLayout?.handle ?? default(SharpVk.Interop.DescriptorSetLayout);
         if (pipelineBindPoint != null)
         {
             marshalledCreateInfo->PipelineBindPoint = pipelineBindPoint.Value;
         }
         else
         {
             marshalledCreateInfo->PipelineBindPoint = default(SharpVk.PipelineBindPoint);
         }
         marshalledCreateInfo->PipelineLayout = pipelineLayout?.handle ?? default(SharpVk.Interop.PipelineLayout);
         if (set != null)
         {
             marshalledCreateInfo->Set = set.Value;
         }
         else
         {
             marshalledCreateInfo->Set = default(uint);
         }
         if (allocator != null)
         {
             marshalledAllocator = (SharpVk.Interop.AllocationCallbacks *)(Interop.HeapUtil.Allocate <SharpVk.Interop.AllocationCallbacks>());
             allocator.Value.MarshalTo(marshalledAllocator);
         }
         else
         {
             marshalledAllocator = default(SharpVk.Interop.AllocationCallbacks *);
         }
         SharpVk.Interop.Khronos.VkDeviceCreateDescriptorUpdateTemplateDelegate commandDelegate = commandCache.GetCommandDelegate <SharpVk.Interop.Khronos.VkDeviceCreateDescriptorUpdateTemplateDelegate>("vkCreateDescriptorUpdateTemplateKHR", "instance");
         Result methodResult = commandDelegate(extendedHandle.handle, marshalledCreateInfo, marshalledAllocator, &marshalledDescriptorUpdateTemplate);
         if (SharpVkException.IsError(methodResult))
         {
             throw SharpVkException.Create(methodResult);
         }
         result = new SharpVk.Khronos.DescriptorUpdateTemplate(extendedHandle, marshalledDescriptorUpdateTemplate);
         return(result);
     }
     finally
     {
         Interop.HeapUtil.FreeAll();
     }
 }
 /// <summary>
 ///
 /// </summary>
 public static unsafe void PushDescriptorSet(this SharpVk.CommandBuffer extendedHandle, SharpVk.PipelineBindPoint pipelineBindPoint, SharpVk.PipelineLayout layout, uint set, SharpVk.WriteDescriptorSet[] descriptorWrites)
 {
     try
     {
         CommandCache commandCache = default(CommandCache);
         SharpVk.Interop.WriteDescriptorSet *marshalledDescriptorWrites = default(SharpVk.Interop.WriteDescriptorSet *);
         commandCache = extendedHandle.commandCache;
         if (descriptorWrites != null)
         {
             var fieldPointer = (SharpVk.Interop.WriteDescriptorSet *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.WriteDescriptorSet>(descriptorWrites.Length).ToPointer());
             for (int index = 0; index < (uint)(descriptorWrites.Length); index++)
             {
                 descriptorWrites[index].MarshalTo(&fieldPointer[index]);
             }
             marshalledDescriptorWrites = fieldPointer;
         }
         else
         {
             marshalledDescriptorWrites = null;
         }
         SharpVk.Interop.Khronos.VkCommandBufferPushDescriptorSetDelegate commandDelegate = commandCache.GetCommandDelegate <SharpVk.Interop.Khronos.VkCommandBufferPushDescriptorSetDelegate>("vkCmdPushDescriptorSetKHR", "instance");
         commandDelegate(extendedHandle.handle, pipelineBindPoint, layout?.handle ?? default(SharpVk.Interop.PipelineLayout), set, (uint)(descriptorWrites?.Length ?? 0), marshalledDescriptorWrites);
     }
     finally
     {
         Interop.HeapUtil.FreeAll();
     }
 }
Beispiel #7
0
 /// <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();
     }
 }