Example #1
0
        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));
        }
Example #2
0
        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.");
            }
        }