{"record":{"id":"dc00d67becbb1d51","repo":"stride3d/stride","slug":"vulkan-timeline-semaphores-are-not-supported-by-this-device","errorCode":null,"errorMessage":"Vulkan: Timeline semaphores are not supported by this device, but are required by Stride.","messagePattern":"Vulkan: Timeline semaphores are not supported by this device, but are required by Stride\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs","lineNumber":571,"sourceCode":"                sType = VkStructureType.PhysicalDeviceVulkan11Features,\n                pNext = &supportedVulkan12Features,\n            };\n            // Portability subset features (MoltenVK only) — queried so we can forward the device-reported\n            // capabilities verbatim to vkCreateDevice, which is what the portability spec requires.\n            var portabilitySubsetFeatures = new VkPhysicalDevicePortabilitySubsetFeaturesKHR\n            {\n                sType = VkStructureType.PhysicalDevicePortabilitySubsetFeaturesKHR,\n                pNext = &supportedVulkan11Features,\n            };\n            var physicalDeviceFeatures2 = new VkPhysicalDeviceFeatures2\n            {\n                sType = VkStructureType.PhysicalDeviceFeatures2,\n                pNext = isPortabilitySubsetDevice ? (void*)&portabilitySubsetFeatures : &supportedVulkan11Features,\n            };\n            NativeInstanceApi.vkGetPhysicalDeviceFeatures2(NativePhysicalDevice, &physicalDeviceFeatures2);\n\n            if (!supportedVulkan12Features.timelineSemaphore)\n                throw new InvalidOperationException(\"Vulkan: Timeline semaphores are not supported by this device, but are required by Stride.\");\n\n            // Dynamic rendering is required: the backend renders with vkCmdBeginRendering and\n            // creates no render pass objects. Synchronization2 is required for vkQueueSubmit2.\n            if (!supportedVulkan13Features.dynamicRendering || !supportedVulkan13Features.synchronization2)\n                throw new NotSupportedException(\"Vulkan: Dynamic rendering and synchronization2 are not supported by this device, but are required by Stride.\");\n\n            var enabledVulkan13Features = new VkPhysicalDeviceVulkan13Features\n            {\n                sType = VkStructureType.PhysicalDeviceVulkan13Features,\n                dynamicRendering = VkBool32.True,\n                synchronization2 = VkBool32.True,\n            };\n            var enabledVulkan12Features = new VkPhysicalDeviceVulkan12Features\n            {\n                sType = VkStructureType.PhysicalDeviceVulkan12Features,\n                pNext = &enabledVulkan13Features,\n                timelineSemaphore = VkBool32.True,\n                uniformBufferStandardLayout = VkBool32.True,","sourceCodeStart":553,"sourceCodeEnd":589,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs#L553-L589","documentation":"Timeline semaphores (Vulkan 1.2 core feature) are mandatory for Stride's synchronization model. During device creation Stride queries vkGetPhysicalDeviceFeatures2 and throws InvalidOperationException if supportedVulkan12Features.timelineSemaphore is false.","triggerScenarios":"Creating a GraphicsDevice on a device/driver whose physical device features report timelineSemaphore == VK_FALSE, even if the device claims Vulkan 1.2+.","commonSituations":"Drivers that advertise Vulkan 1.2 but disable timeline semaphores (some older mobile/Android drivers); MoltenVK or portability layers with incomplete feature sets; virtualized GPUs (VM GPU drivers) lacking the feature.","solutions":["Update the GPU driver to one that supports timeline semaphores","Choose a different physical device via GraphicsAdapterFactory","For MoltenVK, update to a recent MoltenVK version with timeline semaphore support","Avoid virtual/para-virtual GPUs that mask this feature"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"var features = adapter.QueryVulkan12Features();\nif (!features.timelineSemaphore)\n    Logger.Error(\"Adapter lacks timeline semaphores; cannot use Stride Vulkan backend.\");","typeGuard":"static bool SupportsTimelineSemaphores(GraphicsAdapter a) =>\n    a.QueryVulkan12Features().timelineSemaphore;","tryCatchPattern":"try\n{\n    var device = new GraphicsDevice(adapter, ...);\n}\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"Timeline semaphores\"))\n{\n    Logger.Error(ex, \"Selecting another adapter.\");\n    TryNextAdapter();\n}","preventionTips":["Check physical device features before device creation","Update MoltenVK/portability runtimes on Apple platforms","Avoid GPU-paravirtualization environments that strip Vulkan 1.2 features","Include feature checks in your pre-flight system requirements tool"],"tags":["vulkan","timeline-semaphore","feature-unsupported"],"backgroundTag":"operation-not-supported","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}