Esempio n. 1
0
        public VkResult Submit(int submitCount, VkSubmitInfo[] pSubmits, VkFence fence)
        {
            for (int i = 0; i < submitCount; i++)
            {
                var submit = pSubmits[i];

                if (submit.waitSemaphoreCount > 0)
                {
                    SoftwareSemaphore.WaitAll(submit.waitSemaphoreCount, submit.pWaitSemaphores);
                }

                for (int cmdIndex = 0; cmdIndex < submit.commandBufferCount; cmdIndex++)
                {
                    var cmdBuffer = (SoftwareCommandBuffer)submit.pCommandBuffers[cmdIndex];
                    cmdBuffer.Execute();
                }

                if (submit.signalSemaphoreCount > 0)
                {
                    SoftwareSemaphore.SignalAll(submit.signalSemaphoreCount, submit.pSignalSemaphores);
                }
            }

            ((SoftwareFence)fence)?.Signal();

            return(VkResult.VK_SUCCESS);
        }
Esempio n. 2
0
        public VkResult Present(VkPresentInfoKHR pPresentInfo)
        {
            if (pPresentInfo.waitSemaphoreCount > 0)
            {
                SoftwareSemaphore.WaitAll(pPresentInfo.waitSemaphoreCount, pPresentInfo.pWaitSemaphores);
            }

            if (pPresentInfo.pResults == null)
            {
                pPresentInfo.pResults = new VkResult[] { }
            }
            ;

            while (pPresentInfo.pResults.Length < pPresentInfo.swapchainCount)
            {
                pPresentInfo.pResults = new VkResult[] { VkResult.VK_SUCCESS }
            }
            ;

            VkResult result = VkResult.VK_SUCCESS;

            for (int i = 0; i < pPresentInfo.swapchainCount; i++)
            {
                int      imageIndex = pPresentInfo.pImageIndices[i];
                var      swapChain  = (SoftwareSwapchain)pPresentInfo.pSwapchains[i];
                VkResult subResult  = swapChain.PresentImage(imageIndex);
                pPresentInfo.pResults[i] = subResult;
                if (subResult != VkResult.VK_SUCCESS)
                {
                    result = subResult;
                }
            }

            return(result);
        }