%% what a shared fence handle points at, inside one process.
flowchart LR
F1["ID3D12Fence
(created SHARED)"] --> E["FenceEvent
refcount +
MTLSharedEvent"]
F2["ID3D12Fence
(OpenSharedHandle)"] --> E
S["pagefile section
magic, process id,
fence id, flags"]
H1["app's handle"] --> S
H2["DuplicateHandle copy"] --> S
O["our own handle
+ one reference"] --> S
O --> E
C{"HandleCount == 1?
(NtQueryObject)"} -->|"yes: drop ours"| O
E -->|"last reference:
value = max, destroy"| X["GPU and CPU waits
released"]