ERROR_GRAPHICS_RESOURCES_NOT_RELATED (0xC0262330) is one of those Windows graphics errors that doesn't show a friendly dialog. You'll see it in Event Viewer, in DXGI/D3D debug output, or as a hard crash in a game or GPU compute app. The kernel graphics subsystem is telling you: an object you handed it (a texture, a surface, a fence, an allocation) belongs to a different device or context than the one you're using it on. The resource and the device aren't "related."
That's the whole error. Everything after this is figuring out which device mismatch happened and why.
Cause 1: Hybrid graphics / mismatched GPU on the same resource
This is the one I see most often on laptops. You've got an Intel iGPU and an NVIDIA or AMD dGPU, both exposed through WDDM, and an app grabs a resource from one adapter and tries to bind it on the other. On a Dell XPS 15 or a Lenovo Legion, this usually shows up when a game is running on the dGPU but a capture hook, overlay, or secondary process (Discord, OBS, the Xbox Game Bar overlay) is running on the iGPU.
What's actually happening: D3D12 and D3D11 resources are tied to an ID3D12Device or ID3D11Device, which is tied to an adapter (LUID). Cross-adapter sharing exists, but only through explicit shared handles or shared heaps. If you bind a resource created on adapter A to a command list on adapter B without that sharing step, the runtime checks the relationship, finds none, and raises 0xC0262330.
The fix, in order of preference:
- Force the entire app onto one GPU. Settings → System → Display → Graphics → find the .exe → Options → High performance. Do this for the game, the overlay app, and the capture tool. All three have to be on the same adapter.
- Disable the iGPU path for that app entirely in the vendor control panel. NVIDIA Control Panel → Manage 3D Settings → Program Settings → set "OpenGL rendering GPU" and "Preferred graphics processor" to the dGPU.
- If it's a capture/overlay issue, the cleanest fix is to stop using the overlay's GPU path. OBS with "Game Capture" set to "Allow transparency" and "Capture mode: Automatic" is usually fine; switch to "Specific window" if it isn't. The desktop duplication API is what breaks here — it grabs a resource on the display adapter, and if your game is rendering on a different LUID, you get the mismatch.
On desktops with two discrete cards (rare, but people do it for compute), the same rule applies. Don't mix devices on one resource. Use D3D12 shared heaps with explicit CreateSharedHandle and OpenSharedHandle if you genuinely need cross-adapter traffic.
Cause 2: Buggy or stale GPU driver (WDDM mismatch)
Driver bugs are the second big cause, and they tend to cluster around major Windows feature updates. When Windows 11 24H2 shipped, WDDM went to 3.2 and several older Intel and AMD driver branches had resource-tracking bugs that surfaced exactly as 0xC0262330 during video playback or hardware-accelerated canvas work in Edge and Chrome.
The trigger is usually mundane: play a video in a browser while a game is running, or use hardware-accelerated GPU scheduling with an old driver. The kernel-mode driver (nvlddmkm.sys, amdkmdag.sys, igdkmd64.sys) mis-tracks a resource's owning device, and the D3D runtime catches the inconsistency.
The real fix is a clean driver install, not a Windows Update one:
# 1. Download the latest Game Ready / Adrenalin / Intel Arc driver to disk first.
# 2. Boot into Safe Mode (msconfig → Boot → Safe boot → Network).
# 3. Run DDU (Display Driver Uninstaller), select the GPU vendor, "Clean and restart".
# 4. Install the downloaded driver in normal mode. Skip GeForce Experience / Adrenalin optional components if you don't need them.Skip "roll back driver" in Device Manager — it often leaves stale WDDM registry keys behind. The full DDU pass is what clears them.
Two registry values worth knowing while you're in there. If Hardware-Accelerated GPU Scheduling (HAGS) is on and your driver is borderline, turn it off first to test:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers
HwSchMode (DWORD) — 2 = enabled, 1 = disabledIf toggling HAGS makes the error disappear, you've found your driver branch. Report it or move to the Studio/Pro driver branch, which is usually more conservative about resource tracking.
Cause 3: App-level D3D misuse (shared resources without sharing)
If you're the one writing the code, this is on you. 0xC0262330 is what the debug layer screams when you do any of these:
- Creating a resource on one device and calling
CreateShaderResourceViewon a view created against a different device. - Passing a resource from a D3D11On12 wrapper to a native D3D12 command list without the bridge.
- Using
ID3D12Resourcefrom device A in a command list recorded on device B. - In D3D11, sharing a resource across two devices created with different flags, then binding it to both immediate contexts.
The reason the runtime is strict here is that resources carry a device pointer in their internal descriptor. It's not a soft check. There's no "reinterpret" path. The resource either belongs to the device you're using or it doesn't.
Run with the debug layer on and let it tell you exactly which call failed:
# In your D3D12/D3D11 init:
ID3D12Debug* dbg;
D3D12GetDebugInterface(IID_PPV_ARGS(&dbg));
dbg->EnableDebugLayer();
# Or for D3D11, use the D3D11_CREATE_DEVICE_DEBUG flag.
# Then check the debug output window / DebugView for the object address and the two device LUIDs involved.Once you have the LUIDs, compare them to DXGI_ADAPTER_DESC1::AdapterLuid for each adapter. That tells you instantly whether you're in a hybrid-graphics situation or you've just made a plain coding mistake.
If the app isn't yours — a game or tool you don't control — the workaround is to eliminate the cross-device path. That usually means: run everything on the dGPU, disable the overlay, or disable the hardware-accelerated feature in the app's own settings (Chrome's chrome://flags/#disable-accelerated-video-decode is a classic escape hatch for the browser variant of this bug).
Quick reference
| Symptom | Likely cause | Fix |
|---|---|---|
| Error on laptop with iGPU + dGPU | Cross-adapter resource binding | Force all involved apps onto the dGPU (Windows Graphics settings + vendor panel) |
| Error after a Windows feature update | WDDM / driver bug | DDU + fresh vendor driver install; test with HAGS off |
| Error in your own D3D app | Resource created on device A, used on device B | Enable debug layer, match LUIDs, use shared handles if cross-adapter is required |
| Error during game capture / streaming | Desktop Duplication on wrong LUID | Switch OBS to window capture, or move OBS to the game's GPU |
| Error only when HAGS is enabled | Driver's HAGS resource tracking | Disable HwSchMode (set to 1) or update driver |