What are the best options when initializing Vulkan?

Hi. I am not advanced Vulkan user and i would be thankful if someone could give some good tips on initializing Vulkan. I mean there are many options for craeting stuff: you can assign structs to “pNext” variable(in some cases there are many possible structs that can be assigned to this variable),
you can put values in “flags” variable and there are extensions and limits of physical devices.
What is best way of choosing all these stuff? Go without unnecessary things or check for all of them and choose best options for given machine?

There are no “best options”. The options exist to allow each individual user to decide for themselves what options they need or what to make use of in order to achieve their goals.

Vulkan is not an API of right answers. It’s an API meant to give people the power to decide for themselves what the right answers are. With great power…

Possible steps for Vulkan’s initialisation:

  1. Creating Vulkan instance:
  • choice Vulkan version what you want
  • setup validation layers
  • setup some instance extensions
  1. Create device:
  • select physical device
  • create logical device:
    – get device queues (compute, graphics, transfer)
    – get device properties/features
    – setup of enabled’s extension, it is depended of Vulkan’s version, some extension already exists in core,
    – get extension’s data using pNext;
    – enable/disable features VkPhysicalDeviceVulkan12Features/VkPhysicalDeviceFeatures;
  1. Create swapchain/Surface
  2. Create depth buffers
  3. Get Swapchain images