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); }
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); }