Technical requirementsGetting to know the Vulkan APICalling API functionsGetting readyHow to do it…Learning about Vulkan objectsGetting readyHow to do it…Using Volk to load Vulkan functions and extensionsGetting readyHow to do it…Using Vulkan extensions correctlyGetting readyHow to do it…Using the Validation Layer for error checkingGetting readyHow to do it…Enumerating available instance layersGetting readyHow to do it…Enumerating available instance extensionsGetting readyHow to do it…Initializing the Vulkan instanceGetting readyHow to do it…Creating a surfaceGetting readyHow to do it…Enumerating Vulkan physical devicesGetting readyHow to do it…Caching the properties of queue familiesGetting readyHow to do it…Enumerating physical device extensionsGetting readyHow to do it…Reserving queue familiesGetting readyHow to do it…Creating a Vulkan logical deviceGetting readyHow to do it…Retrieving the queue object handleGetting readyHow to do it…Creating a command poolGetting readyHow to do it…Allocating, recording, and submitting commandsGetting readyHow to do it…Reusing command buffersGetting readyHow to do it…Creating render passesGetting readyHow to do it…Creating framebuffersGetting readyHow to do it…Creating image viewsGetting readyHow to do it…The Vulkan graphics pipelineHow to do it...Compiling shaders to SPIR-VGetting readyHow to do it…Dynamic statesGetting readyHow to do it…Creating a graphics pipelineGetting readyHow to do it…SwapchainGetting readyHow to do it…Understanding synchronization in the swapchain – fences and semaphoresGetting readyHow to do it…Populating submission information for presentationGetting readyHow to do it…Presenting imagesGetting readyHow to do it…Rendering a triangleGetting readyHow to do it…