What does HRESULT 0x887A0033 (DXGI_ERROR_CACHE_CORRUPT) mean?

 
Previous Next
DXGI_ERROR_NON_COMPOSITED_UI DXGI_ERROR_CACHE_FULL

DXGI_ERROR_CACHE_CORRUPT

Why this is not a generic GPU failure: cache corrupt

DXGI_ERROR_CACHE_CORRUPT (0x887A0033) belongs to the dxgi error layer. It marks the cache backing store could not be parsed, opened safely or reset to a valid state, rather than a generic rendering failure. The object that owns the decision is DirectX shader or pipeline cache storage.

DXGI_ERROR_CACHE_CORRUPT: Do not erase all shader caches or recreate every graphics object before preserving the first failing call. For DXGI_ERROR_CACHE_CORRUPT, Cache, policy, remote-session and device-lifetime failures have different recovery rules. For DXGI_ERROR_CACHE_CORRUPT, 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.

The smallest evidence set

Capture itemWhy it matters for DXGI_ERROR_CACHE_CORRUPT
Supporting traceDXGI debug messages, adapter LUID, driver version, device-removal reason where applicable and the exact API parameters
Object identityDirectX shader or pipeline cache storage
Rejected boundarythe cache backing store could not be parsed, opened safely or reset to a valid state
Decisive capturecache GUID, version, path or session identifier, driver and adapter versions, failing key and preceding I/O error
Current graph stateDXGI factory, adapter, device, resource or cache session

For DXGI_ERROR_CACHE_CORRUPT, 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_ERROR_CACHE_CORRUPT.

A/B test for the exact condition

  1. Freeze the DXGI_ERROR_CACHE_CORRUPT generation. Record cache GUID, version, path or session identifier, driver and adapter versions, failing key and preceding I/O error. Before diagnosing DXGI_ERROR_CACHE_CORRUPT, do not resize, hot-plug, recreate or release the object under examination.
  2. Run the narrow DXGI_ERROR_CACHE_CORRUPT comparison. start with an empty application-owned cache and then introduce the suspect cache data under the same driver. During the DXGI_ERROR_CACHE_CORRUPT comparison, keep every driver, monitor, resource format and unrelated policy unchanged.
  3. Observe the layer after DXGI_ERROR_CACHE_CORRUPT. For DXGI_ERROR_CACHE_CORRUPT, if the exact check passes, record the next HRESULT or visible outcome. A different downstream result shows that the DXGI_ERROR_CACHE_CORRUPT boundary was crossed.
  4. Repeat DXGI_ERROR_CACHE_CORRUPT through a lifecycle transition. For DXGI_ERROR_CACHE_CORRUPT, 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 D3D12_ERROR_DRIVER_VERSION_MISMATCH is especially useful: D3D12_ERROR_DRIVER_VERSION_MISMATCH identifies a valid blob created by a different driver version. For DXGI_ERROR_CACHE_CORRUPT, recording both names prevents a broad “graphics error” label from merging distinct ownership, capability and lifetime problems.

Safe remediation

Discard only the affected cache and rebuild entries from source data; never treat cached blobs as authoritative assets. Repair of DXGI_ERROR_CACHE_CORRUPT 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_ERROR_CACHE_CORRUPT 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_ERROR_CACHE_CORRUPT; unrelated adapter, monitor and application state remains unchanged.
  • For DXGI_ERROR_CACHE_CORRUPT, debug-layer, ETW or driver diagnostics no longer report the rejected DirectX shader or pipeline cache storage contract during the same scenario.
  • The application handles recurrence of DXGI_ERROR_CACHE_CORRUPT without an unbounded retry loop, leaked resource, duplicate composition target or stale topology handle.

Implementation notes for DXGI_ERROR_CACHE_CORRUPT

For DXGI_ERROR_CACHE_CORRUPT, log DXGI debug messages, adapter LUID, driver version, device-removal reason where applicable and the exact API parameters. When the DXGI_ERROR_CACHE_CORRUPT 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_ERROR_CACHE_CORRUPT 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_ERROR_CACHE_CORRUPT.

Technical references


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