/// <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> /// /// </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(); } }
/// <summary> /// /// </summary> public PushConstantRange(SharpVk.ShaderStageFlags stageFlags, uint offset, uint size) { this.StageFlags = stageFlags; this.Offset = offset; this.Size = size; }
public static extern void vkCmdPushConstants(SharpVk.Interop.CommandBuffer commandBuffer, SharpVk.Interop.PipelineLayout layout, SharpVk.ShaderStageFlags stageFlags, uint offset, uint size, void *values);