Example #1
0
        //public static implicit operator VkSemaphoresPipelineStagesHandle(VkSemaphore v) {
        //    var result = new VkSemaphoresPipelineStagesHandle();
        //    result.Set(v);
        //    return result;
        //}

        //public static implicit operator VkSemaphoresPipelineStagesHandle(VkSemaphore[] v) {
        //    var result = new VkSemaphoresPipelineStagesHandle();
        //    result.Set(v);
        //    return result;
        //}

        public void Set(params VkPipelineStageFlagBits[] value)
        {
            IntPtr ptr = (IntPtr)this.waitDstStageMask;

            value.Set(ref ptr, ref this.count);
            this.waitDstStageMask = (VkPipelineStageFlagBits *)ptr;
        }
Example #2
0
        public void DrawFrame()
        {
            var result = VulkanNative.vkQueueWaitIdle(vkPresentQueue);

            Helpers.CheckErrors(result);

            uint imageIndex;

            result = VulkanNative.vkAcquireNextImageKHR(vkDevice, vkSwapChain, ulong.MaxValue, vkImageAvailableSemaphore, 0, &imageIndex);
            Helpers.CheckErrors(result);

            VkSemaphore *            waitSemaphores   = stackalloc VkSemaphore[] { vkImageAvailableSemaphore };
            VkPipelineStageFlagBits *waitStages       = stackalloc VkPipelineStageFlagBits[] { VkPipelineStageFlagBits.VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
            VkSemaphore *            signalSemaphores = stackalloc VkSemaphore[] { vkRenderFinishedSemaphore };
            VkCommandBuffer *        commandBuffers   = stackalloc VkCommandBuffer[] { vkCommandBuffers[imageIndex] };
            var submitInfo = new VkSubmitInfo()
            {
                sType                = VkStructureType.VK_STRUCTURE_TYPE_SUBMIT_INFO,
                pWaitSemaphores      = waitSemaphores,
                waitSemaphoreCount   = 1,
                pWaitDstStageMask    = waitStages,
                commandBufferCount   = 1,
                pCommandBuffers      = commandBuffers,
                signalSemaphoreCount = 1,
                pSignalSemaphores    = signalSemaphores,
            };

            result = VulkanNative.vkQueueSubmit(vkGraphicsQueue, 1, &submitInfo, 0);
            Helpers.CheckErrors(result);

            VkSwapchainKHR *swapChains  = stackalloc VkSwapchainKHR[] { vkSwapChain };
            var             presentInfo = new VkPresentInfoKHR()
            {
                sType = VkStructureType.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
                waitSemaphoreCount = 1,
                pWaitSemaphores    = signalSemaphores,
                swapchainCount     = 1,
                pSwapchains        = swapChains,
                pImageIndices      = &imageIndex,
            };

            result = VulkanNative.vkQueuePresentKHR(vkPresentQueue, &presentInfo);
            Helpers.CheckErrors(result);
        }
Example #3
0
        //public static implicit operator VkSemaphoresPipelineStagesHandle(VkPipelineStageFlagBits v) {
        //    var result = new VkSemaphoresPipelineStagesHandle();
        //    result.Set(v);
        //    return result;
        //}

        //public static implicit operator VkSemaphoresPipelineStagesHandle(VkPipelineStageFlagBits[] v) {
        //    var result = new VkSemaphoresPipelineStagesHandle();
        //    result.Set(v);
        //    return result;
        //}

        /// <summary>
        /// Free unmanaged memory and reset all members to 0.
        /// </summary>
        public void Reset()
        {
            if (this.waitSemaphores != null)
            {
                UInt32 count = this.count;
                IntPtr ptr   = (IntPtr)this.waitSemaphores;
                Helper.Set <VkSemaphore>(null, ref ptr, ref count);
                this.waitSemaphores = null;
            }

            if (this.waitDstStageMask != null)
            {
                UInt32 count = this.count;
                IntPtr ptr   = (IntPtr)this.waitDstStageMask;
                Helper.Set <VkPipelineStageFlagBits>(null, ref ptr, ref count);
                this.waitDstStageMask = null;
            }

            {
                this.count = 0;
            }
        }