internal VulkanCommandBufferPool.VulkanCommandBuffer StartPresentation() { _nextImage = 0; while (true) { var acquireResult = _swapchainExtension.AcquireNextImage( _device.InternalHandle, _swapchain, ulong.MaxValue, _semaphorePair.ImageAvailableSemaphore, new Fence(), ref _nextImage); if (acquireResult == Result.ErrorOutOfDateKhr || acquireResult == Result.SuboptimalKhr) { Recreate(); } else { acquireResult.ThrowOnError(); break; } } var commandBuffer = CommandBufferPool.CreateCommandBuffer(); commandBuffer.BeginRecording(); VulkanMemoryHelper.TransitionLayout(_device, commandBuffer.InternalHandle, _swapchainImages[_nextImage], ImageLayout.Undefined, AccessFlags.AccessNoneKhr, ImageLayout.TransferDstOptimal, AccessFlags.AccessTransferWriteBit, 1); return(commandBuffer); }