What does HRESULT 0x887B0002 (DXGI_DDI_ERR_UNSUPPORTED) mean?

 
Previous Next
DXGI_DDI_ERR_WASSTILLDRAWING DXGI_DDI_ERR_NONEXCLUSIVE

DXGI_DDI_ERR_UNSUPPORTED

Interpret the result in its owning layer: ddi err unsupported

The useful interpretation of DXGI_DDI_ERR_UNSUPPORTED (0x887B0002) starts at the dxgi error boundary: the driver rejected a requested resource description or operation it does not implement. In practical terms, inspect user-mode display driver resource contract before changing application-wide graphics settings.

DXGI_DDI_ERR_UNSUPPORTED: Do not erase all shader caches or recreate every graphics object before preserving the first failing call. For DXGI_DDI_ERR_UNSUPPORTED, Cache, policy, remote-session and device-lifetime failures have different recovery rules. For DXGI_DDI_ERR_UNSUPPORTED, the built-in one-line message identifies the immediate result; diagnosis also needs the producing API, object ownership and the display generation current at the time.

Capture before recreating objects

Capture itemWhy it matters for DXGI_DDI_ERR_UNSUPPORTED
Supporting traceDXGI debug messages, adapter LUID, driver version, device-removal reason where applicable and the exact API parameters
Object identityuser-mode display driver resource contract
Rejected boundarythe driver rejected a requested resource description or operation it does not implement
Decisive captureresource dimension, format, bind and misc flags, feature level, format-support queries and DDI version
Current graph stateDXGI factory, adapter, device, resource or cache session

For DXGI_DDI_ERR_UNSUPPORTED, preserve the unsigned HRESULT, symbolic name, first failing API and timestamp in one record. If cleanup later fails too, keep that secondary result separately from DXGI_DDI_ERR_UNSUPPORTED.

Reproduce one variable at a time

  1. Freeze the DXGI_DDI_ERR_UNSUPPORTED generation. Record resource dimension, format, bind and misc flags, feature level, format-support queries and DDI version. Before diagnosing DXGI_DDI_ERR_UNSUPPORTED, do not resize, hot-plug, recreate or release the object under examination.
  2. Run the narrow DXGI_DDI_ERR_UNSUPPORTED comparison. reduce the resource description to a documented supported combination and reintroduce one flag at a time. During the DXGI_DDI_ERR_UNSUPPORTED comparison, keep every driver, monitor, resource format and unrelated policy unchanged.
  3. Observe the layer after DXGI_DDI_ERR_UNSUPPORTED. For DXGI_DDI_ERR_UNSUPPORTED, if the exact check passes, record the next HRESULT or visible outcome. A different downstream result shows that the DXGI_DDI_ERR_UNSUPPORTED boundary was crossed.
  4. Repeat DXGI_DDI_ERR_UNSUPPORTED through a lifecycle transition. For DXGI_DDI_ERR_UNSUPPORTED, exercise one relevant resize, mode switch, device recreation, hot-plug or session change and confirm that this result does not reuse stale handles.

The comparison with DXGI_ERROR_UNSUPPORTED is especially useful: DXGI_ERROR_UNSUPPORTED is the public runtime result and can also cover broader platform limitations. For DXGI_DDI_ERR_UNSUPPORTED, recording both names prevents a broad “graphics error” label from merging distinct ownership, capability and lifetime problems.

Recovery contract

Gate creation on capability queries and provide a compatible fallback format or usage. Repair of DXGI_DDI_ERR_UNSUPPORTED is complete only when the original call succeeds or returns its documented nonfatal status and the same lifetime test remains correct after a second display transition.

  • The DXGI_DDI_ERR_UNSUPPORTED trace identifies one producing API and one current graphics object, rather than only the final UI symptom.
  • The passing run changes exactly the condition described for DXGI_DDI_ERR_UNSUPPORTED; unrelated adapter, monitor and application state remains unchanged.
  • For DXGI_DDI_ERR_UNSUPPORTED, debug-layer, ETW or driver diagnostics no longer report the rejected user-mode display driver resource contract contract during the same scenario.
  • The application handles recurrence of DXGI_DDI_ERR_UNSUPPORTED without an unbounded retry loop, leaked resource, duplicate composition target or stale topology handle.

Implementation notes for DXGI_DDI_ERR_UNSUPPORTED

For DXGI_DDI_ERR_UNSUPPORTED, log DXGI debug messages, adapter LUID, driver version, device-removal reason where applicable and the exact API parameters. When the DXGI_DDI_ERR_UNSUPPORTED path returns a count, size, status flag or replacement object, retain it even on a nonfatal result because it can direct the next call.

A production fallback for DXGI_DDI_ERR_UNSUPPORTED should be explicit: pause rendering, re-enumerate, rebuild one cache entry, recreate a device, or decline a protected path only when this layer calls for that action. Reinstalling every display component, deleting all caches or forcing a resolution change is not an evidence-based fix for DXGI_DDI_ERR_UNSUPPORTED.

Technical references


Looking for a different code? Search another status or error code.