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

  1. Update the GPU driver to at least NVIDIA 531.18+, AMD 23.5.2+, or Intel 31.0.101.4032+.
  2. Update Windows to 10 21H2 or later (Windows 11 recommended).
  3. If hardware cannot be updated, fall back to a different graphics backend (e.g. Direct3D11 or Vulkan) in GraphicsDevice creation.
  4. 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

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


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)