{"record":{"id":"34c4483c25d035ca","repo":"stride3d/stride","slug":"required-extension-encoding-utf8-getstring-vk-khr-win32","errorCode":null,"errorMessage":"Required extension {Encoding.UTF8.GetString(VK_KHR_WIN32_SURFACE_EXTENSION_NAME)} is not available","messagePattern":"Required extension (.+?) is not available","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapterFactory.Vulkan.cs","lineNumber":332,"sourceCode":"                var name = new VkUtf8String(extensionProperty.extensionName).Span;\n                var indexOfExtensionName = supportedExtensionNames.IndexOf(name);\n\n                if (indexOfExtensionName >= 0)\n                    availableExtensionNames.Add(supportedExtensionNames[indexOfExtensionName]);\n            }\n\n            return availableExtensionNames;\n        }\n\n        private static void ValidateSurfaceExtensionNamesAvailability(HashSet<VkUtf8String> availableExtensionNames)\n        {\n            if (!availableExtensionNames.Contains(VK_KHR_SURFACE_EXTENSION_NAME))\n                throw new InvalidOperationException($\"Required extension {Encoding.UTF8.GetString(VK_KHR_SURFACE_EXTENSION_NAME)} is not available\");\n\n            if (Platform.Type == PlatformType.Windows)\n            {\n                if (!availableExtensionNames.Contains(VK_KHR_WIN32_SURFACE_EXTENSION_NAME))\n                    throw new InvalidOperationException($\"Required extension {Encoding.UTF8.GetString(VK_KHR_WIN32_SURFACE_EXTENSION_NAME)} is not available\");\n            }\n            else if (Platform.Type == PlatformType.Android)\n            {\n                if (!availableExtensionNames.Contains(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME))\n                    throw new InvalidOperationException($\"Required extension {Encoding.UTF8.GetString(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME)} is not available\");\n            }\n            else if (Platform.Type == PlatformType.Linux)\n            {\n                if (!availableExtensionNames.Contains(VK_KHR_XLIB_SURFACE_EXTENSION_NAME)\n                    && !availableExtensionNames.Contains(VK_KHR_XCB_SURFACE_EXTENSION_NAME))\n                {\n                    throw new InvalidOperationException(\"None of the supported surface extensions VK_KHR_xcb_surface or VK_KHR_xlib_surface is available\");\n                }\n            }\n            else if (Platform.Type == PlatformType.macOS || Platform.Type == PlatformType.iOS)\n            {\n                if (!availableExtensionNames.Contains(VK_EXT_METAL_SURFACE_EXTENSION_NAME))\n                    throw new InvalidOperationException($\"Required extension {Encoding.UTF8.GetString(VK_EXT_METAL_SURFACE_EXTENSION_NAME)} is not available\");","sourceCodeStart":314,"sourceCodeEnd":350,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.Graphics/Vulkan/GraphicsAdapterFactory.Vulkan.cs#L314-L350","documentation":"On Windows, after VK_KHR_surface is confirmed, Stride also requires the platform extension VK_KHR_win32_surface to create a Win32 presentation surface. If the driver does not advertise it, adapter initialization throws InvalidOperationException.","triggerScenarios":"Enumerating graphics adapters on Windows when the Vulkan driver's vkEnumerateInstanceExtensionProperties omits VK_KHR_win32_surface.","commonSituations":"Generic/broken driver installs (e.g. Microsoft Basic Display Adapter without vendor driver); remote-desktop or VM environments with limited Vulkan support; corrupted ICD registry entries under HKLM\\SOFTWARE\\Khronos\\Vulkan.","solutions":["Install the latest vendor GPU driver (NVIDIA/AMD/Intel) for Windows","Reinstall the Vulkan Runtime/Loader","Check with `vulkaninfo` that VK_KHR_win32_surface appears in instance extensions","If running in a VM/remote session, enable GPU passthrough or fall back to DirectX backend"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"var exts = VulkanExtensions.EnumerateInstanceExtensions();\nif (OperatingSystem.IsWindows() && !exts.Contains(\"VK_KHR_win32_surface\"))\n    Logger.Error(\"VK_KHR_win32_surface missing; reinstall vendor GPU driver.\");","typeGuard":null,"tryCatchPattern":"try\n{\n    GraphicsAdapterFactory.Initialize();\n}\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"VK_KHR_win32_surface\"))\n{\n    Diagnostics.ReportDriverProblem(ex);\n    UseDirectXBackend();\n}","preventionTips":["Verify driver install in Device Manager (no Basic Display Adapter)","Check vulkaninfo lists win32_surface before shipping","Handle remote-desktop/VM scenarios with a fallback backend"],"tags":["vulkan","windows","missing-extension"],"backgroundTag":"missing-dependency","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}