stride3d/stride · error · InvalidOperationException

None of the graphics profiles

Error message

None of the graphics profiles [{notSupportedProfiles}] are supported by the Graphics Device. The highest available profile is [{availableGraphicsProfile}].

What it means

GraphicsDeviceManager.FindBestDevice throws this when no device was found and none of the profiles listed in PreferredGraphicsProfile are supported by the available hardware/driver. It reports the highest profile the device actually supports so the developer can lower their requirements. Stride checks profile support only after a failed device search because the query is expensive.

Solutions

  1. Lower the PreferredGraphicsProfile list to include profiles at or below the reported highest available profile (e.g. add GraphicsProfile.Level_10_0 or Level_9_1).
  2. Update the GPU driver, or run on physical hardware with adequate DirectX support instead of a VM/RDP session.
  3. Verify with the reported availableGraphicsProfile and set graphicsDeviceManager.PreferredGraphicsProfile accordingly before calling Run.

Example fix

// before
gdm.PreferredGraphicsProfile = new[] { GraphicsProfile.Level_11_1 };
// after
gdm.PreferredGraphicsProfile = new[] { GraphicsProfile.Level_11_1, GraphicsProfile.Level_10_0 };
Defensive patterns

Strategy: fallback

Validate before calling

// before Run: probe the max supported profile via the manager's
// IsPreferredProfileAvailable if accessible, else request a low floor:
gdm.PreferredGraphicsProfile = new[] {
    GraphicsProfile.Level_11_1, GraphicsProfile.Level_10_0, GraphicsProfile.Level_9_1 };

Try / catch

try { game.Run(); }
catch (InvalidOperationException ex) when (ex.Message.StartsWith("None of the graphics profiles"))
{
    // parse the reported highest available profile and lower requirements
    logger.LogWarning(ex.Message);
}

Prevention

When it happens

Trigger: CreateDevice/FindBestDevice runs, enumerates devices, finds none compatible, and IsPreferredProfileAvailable confirms the device's max profile is below every entry in preferredParameters.PreferredGraphicsProfile (e.g. requesting Level_11_1 on hardware limited to Level_10_0 or FL9_1).

Common situations: Running on old GPUs or virtual machines (no D3D11 support), remote desktop sessions without GPU, outdated drivers, or requesting a high profile like Level_12_0 on a machine that only has DirectX 11.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14). Data as JSON: /api/errors/3708fc30c7e8ad73. Report an issue: GitHub.

Appendix: source

Thrown at sources/engine/Stride.Games/GraphicsDeviceManager.cs:684

                : preferredParameters.PreferredBackBufferFormat.ToNonSRgb();

            // Setup resized value if there is a resize pending
            if (!IsFullScreen && isBackBufferToResize)
            {
                preferredParameters.PreferredBackBufferWidth = resizedBackBufferWidth;
                preferredParameters.PreferredBackBufferHeight = resizedBackBufferHeight;
            }

            var devices = graphicsDeviceFactory.FindBestDevices(preferredParameters);
            if (devices.Count == 0)
            {
                // Nothing was found; first, let's check if graphics profile was actually supported
                // NOTE: We don't do this preemptively because in some cases it seems to take lot of time
                //       (happened on a test machine, several seconds freeze on ID3D11Device.Release())
                if (!IsPreferredProfileAvailable(preferredParameters.PreferredGraphicsProfile, out var availableGraphicsProfile))
                {
                    var notSupportedProfiles = string.Join(", ", preferredParameters.PreferredGraphicsProfile);
                    throw new InvalidOperationException($"None of the graphics profiles [{notSupportedProfiles}] are supported by the Graphics Device. " +
                        $"The highest available profile is [{availableGraphicsProfile}].");
                }

                // Otherwise, there was just no screen mode
                throw new InvalidOperationException("No compatible screen mode found");
            }

            RankDevices(devices);

            if (devices.Count == 0)
            {
                throw new InvalidOperationException("No compatible screen modes found after ranking");
            }
            return devices[0];
        }

        /// <summary>
        ///   Ranks a list of <see cref="GraphicsDeviceInformation"/>s before creating a new Graphics Device.

View on GitHub (pinned to 96fad776d2)