public static VkResult vkCreateTypedSemaphore(VkDevice device, VkSemaphoreType type, ulong initialValue, out VkSemaphore semaphore) { VkSemaphoreTypeCreateInfo typeCreateiInfo = new VkSemaphoreTypeCreateInfo { sType = VkStructureType.SemaphoreTypeCreateInfo, pNext = null, semaphoreType = type, initialValue = initialValue }; VkSemaphoreCreateInfo createInfo = new VkSemaphoreCreateInfo { sType = VkStructureType.SemaphoreCreateInfo, pNext = &typeCreateiInfo, flags = VkSemaphoreCreateFlags.None }; return(vkCreateSemaphore(device, &createInfo, null, out semaphore)); }
public void Build(int deviceIndex, bool timeline, ulong value) { if (!locked) { unsafe { IntPtr semaphorePtr_l = IntPtr.Zero; this.timeline = timeline; if (timeline) { var semaphoreTypeInfo = new VkSemaphoreTypeCreateInfo() { sType = VkStructureType.StructureTypeSemaphoreTypeCreateInfo, semaphoreType = VkSemaphoreType.SemaphoreTypeTimeline, initialValue = value }; var semaphoreTypeInfo_ptr = semaphoreTypeInfo.Pointer(); var semaphoreInfo = new VkSemaphoreCreateInfo() { sType = VkStructureType.StructureTypeSemaphoreCreateInfo, pNext = semaphoreTypeInfo_ptr }; if (vkCreateSemaphore(GraphicsDevice.GetDeviceInfo(deviceIndex).Device, semaphoreInfo.Pointer(), null, &semaphorePtr_l) != VkResult.Success) { throw new Exception("Failed to create semaphore."); } } else { var semaphoreInfo = new VkSemaphoreCreateInfo() { sType = VkStructureType.StructureTypeSemaphoreCreateInfo, }; if (vkCreateSemaphore(GraphicsDevice.GetDeviceInfo(deviceIndex).Device, semaphoreInfo.Pointer(), null, &semaphorePtr_l) != VkResult.Success) { throw new Exception("Failed to create semaphore."); } } hndl = semaphorePtr_l; devID = deviceIndex; if (GraphicsDevice.EnableValidation && Name != null) { var objName = new VkDebugUtilsObjectNameInfoEXT() { sType = VkStructureType.StructureTypeDebugUtilsObjectNameInfoExt, pObjectName = Name, objectType = VkObjectType.ObjectTypeSemaphore, objectHandle = (ulong)hndl }; GraphicsDevice.SetDebugUtilsObjectNameEXT(GraphicsDevice.GetDeviceInfo(deviceIndex).Device, objName.Pointer()); } } locked = true; } else { throw new Exception("GpuSemaphore is locked."); } }