Ejemplo n.º 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();
     }
 }
Ejemplo n.º 2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="extendedHandle">
 /// The Pipeline handle to extend.
 /// </param>
 public static unsafe byte[] GetShaderInfo(this SharpVk.Pipeline extendedHandle, SharpVk.ShaderStageFlags shaderStage, SharpVk.Amd.ShaderInfoType infoType)
 {
     try
     {
         byte[]       result         = default(byte[]);
         HostSize     infoSize       = default(HostSize);
         CommandCache commandCache   = default(CommandCache);
         byte *       marshalledInfo = default(byte *);
         commandCache = extendedHandle.commandCache;
         SharpVk.Interop.Amd.VkPipelineGetShaderInfoDelegate commandDelegate = commandCache.Cache.vkGetShaderInfoAMD;
         Result methodResult = commandDelegate(extendedHandle.parent.handle, extendedHandle.handle, shaderStage, infoType, &infoSize, marshalledInfo);
         if (SharpVkException.IsError(methodResult))
         {
             throw SharpVkException.Create(methodResult);
         }
         marshalledInfo = (byte *)(Interop.HeapUtil.Allocate <byte>((uint)(infoSize)));
         commandDelegate(extendedHandle.parent.handle, extendedHandle.handle, shaderStage, infoType, &infoSize, marshalledInfo);
         if (marshalledInfo != null)
         {
             var fieldPointer = new byte[(uint)(infoSize)];
             for (int index = 0; index < (uint)(infoSize); index++)
             {
                 fieldPointer[index] = marshalledInfo[index];
             }
             result = fieldPointer;
         }
         else
         {
             result = null;
         }
         return(result);
     }
     finally
     {
         Interop.HeapUtil.FreeAll();
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 ///
 /// </summary>
 public PushConstantRange(SharpVk.ShaderStageFlags stageFlags, uint offset, uint size)
 {
     this.StageFlags = stageFlags;
     this.Offset     = offset;
     this.Size       = size;
 }
Ejemplo n.º 4
0
 public static extern void vkCmdPushConstants(SharpVk.Interop.CommandBuffer commandBuffer, SharpVk.Interop.PipelineLayout layout, SharpVk.ShaderStageFlags stageFlags, uint offset, uint size, void *values);