Problem with instance.

Windows 7 64 bit service pack 1
AMD HD 7950 videocard.

Befor i use Vulkan spec. 1.0.5
And all work fine.
vkCreateWin32SurfaceKHR get me surface = address.

Then i install Vulkan spec. 1.0.17\Crimson Amd driver 16.6.1 and vkCreateWin32SurfaceKHR get me surface = NULL !
And vkCreateWin32SurfaceKHR get me error VK_ERROR_EXTENSION_NOT_PRESENT

Strange !
When i create instance with extension “VK_KHR_win32_surface”
Then vkCreateWin32SurfaceKHR create surface, and surface = address !
But if i create instance with extension “VK_KHR_surface”
vkCreateWin32SurfaceKHR get me error and surface = NULL
But Device create only with extension “VK_KHR_surface” !

in system vulkaninfo.exe
Get me three extensions:
“VK_KHR_surface”
“VK_KHR_win32_surface”
“VK_EXT_debug_report”

How correctly create instance ?

I programming Vulkan 32 bit.

BTW latest AMD software is 16.6.2 (e.g. introducing 1.0.13 Vulkan conformance)…

Correct way to enable WSI is:

  1. Usually: Link to vulkan-1.lib (no function loading for WSI extension commands should be necessary then)

  2. Define VK_USE_PLATFORM_X (in your case VK_USE_PLATFORM_WIN32_KHR) before first include of vulkan.h

  3. On instance creation enable "VK_KHR_surface" and “platform” surface (in your case "VK_KHR_win32_surface"). Better to use the macros (VK_KHR_SURFACE_EXTENSION_NAME and VK_KHR_WIN32_SURFACE_EXTENSION_NAME) to avoid typing errors.

  4. On device creation enable "VK_KHR_swapchain" (best by VK_KHR_SWAPCHAIN_EXTENSION_NAME)

  5. Should be ready for use

PS: I would guess 0 is a valid (albeit bit inappropriate) value for a surface handle. Just try to use it.
For comparison, my platform gave me surface==1