stride3d/stride · critical · GraphicsDeviceException
D3D12 Enhanced Barriers are required but not supported by…
Error message
D3D12 Enhanced Barriers are required but not supported by this device/driver. Update to a recent GPU driver (NVIDIA 531.18+, AMD 23.5.2+, Intel 31.0.101.4032+) and run on Windows 10 21H2 or Windows 11.
What it means
The Direct3D12 backend now requires D3D12 Enhanced Barriers. At device creation it queries D3D12Options12; if the query fails or EnhancedBarriersSupported is false, it throws GraphicsDeviceException telling you to update drivers/OS. Old drivers or pre-21H2 Windows cannot run this backend at all.
Solutions
- Update the GPU driver to at least NVIDIA 531.18+, AMD 23.5.2+, or Intel 31.0.101.4032+.
- Update Windows to 10 21H2 or later (Windows 11 recommended).
- If hardware cannot be updated, fall back to a different graphics backend (e.g. Direct3D11 or Vulkan) in GraphicsDevice creation.
- Check support up front with a capability probe and show the user an actionable message instead of crashing.
Example fix
// before
var device = GraphicsDevice.New(null, DeviceInitializationFlags.None); // D3D12 default
// after
try { var device = GraphicsDevice.New(null, DeviceInitializationFlags.None); }
catch (GraphicsDeviceException)
{
var device = GraphicsDevice.New(null, DeviceInitializationFlags.None, rendererType: RendererType.Direct3D11);
} Defensive patterns
Strategy: fallback
Validate before calling
if (OperatingSystem.IsWindows() &&
!SupportsD3D12EnhancedBarriers()) // probe via device-creation trial or feature check
{
rendererType = RendererType.Direct3D11; // or Vulkan fallback
} Try / catch
try { device = GraphicsDevice.New(null, flags); }
catch (GraphicsDeviceException ex) when (ex.Message.Contains("Enhanced Barriers"))
{ device = GraphicsDevice.New(null, flags, rendererType: RendererType.Direct3D11); } Prevention
- Update GPU drivers to NVIDIA 531.18+/AMD 23.5.2+/Intel 31.0.101.4032+ before deploying D3D12.
- Require Windows 10 21H2+ (or Windows 11) in your system requirements.
- Provide a D3D11/Vulkan fallback backend for machines without Enhanced Barriers.
- Probe device capability early at startup with a user-facing upgrade message.
When it happens
Trigger: Creating a GraphicsDevice with the Direct3D12 backend on a machine with a GPU driver lacking Enhanced Barrier support (NVIDIA <531.18, AMD <23.5.2, Intel <31.0.101.4032) or Windows 10 older than 21H2.
Common situations: Running the app on end-user machines with outdated GPU drivers; older OS installs; VMs/remote-desktop or WARP-ish setups without enhanced barrier support; CI machines with stale drivers.
Understand the failure class
Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.
Related errors
- A Texture Cube must have an ArraySize > 1
- ArgumentNullException (targetProfiles)
- Cannot copy data between Buffers and Textures.
- Cannot copy data between GraphicsResources of types
- Cannot initialize a read-only Depth-Stencil Buffer. Not…
AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14).
Data as JSON: /api/errors/73a0a38f60171581.
Report an issue: GitHub.
Appendix: source
Thrown at sources/engine/Stride.Graphics/Direct3D12/GraphicsDevice.Direct3D12.cs:676
//
// Requires D3D12 Enhanced Barriers. Throws if unsupported.
//
// Minimum requirements: Windows 10 21H2 (build 19044) or Windows 11 — we use the
// system d3d12.dll, no Agility SDK is embedded. Driver floors: NVIDIA 531.18+,
// AMD 23.5.2+, Intel 31.0.101.4032+. WARP and Xbox Series X|S are supported.
//
void RequireEnhancedBarriersSupport()
{
// CheckFeatureSupport validates the struct size exactly — passing an oversized
// buffer returns E_INVALIDARG and the query silently fails. Use the Silk.NET
// struct + ref overload so size and field offsets stay correct.
var options12 = default(FeatureDataD3D12Options12);
HResult hr = nativeDevice->CheckFeatureSupport(Silk.NET.Direct3D12.Feature.D3D12Options12, ref options12,
(uint) sizeof(FeatureDataD3D12Options12));
if (!hr.IsSuccess || !options12.EnhancedBarriersSupported)
{
throw new GraphicsDeviceException(
"D3D12 Enhanced Barriers are required but not supported by this device/driver. " +
"Update to a recent GPU driver (NVIDIA 531.18+, AMD 23.5.2+, Intel 31.0.101.4032+) " +
"and run on Windows 10 21H2 or Windows 11.");
}
}
}
/// <summary>
/// Allocates (or reuses) a Buffer prepared for uploading data from the CPU so it can later
/// be copied from that Buffer to a destination Graphics Resource on the GPU.
/// </summary>
/// <param name="size">The size of the requested upload buffer, in bytes.</param>
/// <param name="resource">When the method returns, contains a pointer to the allocated upload Buffer.</param>
/// <param name="offset">
/// When the method returns, contains the offset in bytes from the start of <paramref name="resource"/>
/// where data can be written to.
/// </param>
/// <param name="alignment">Optional alignment requisites on the returned writeable address.</param>View on GitHub (pinned to 96fad776d2)