In NiagaraDataChannelData.cpp, FNiagaraDataChannelDataProxy::EndFrame enqueues a GPU readback for each entry in PendingGPUReadbackBuffers, but the corresponding FNiagaraGPUInstanceCountManager::FreeEntry call is commented out with the intent of deferring the release to the next frame. (See NiagaraDataChannelData.cpp L740+)
The deferred-release path was never wired up (BeginFrame's loop over PendingGPUReadbackBuffers is unreachable because EndFrame calls PendingGPUReadbackBuffers.Reset() before the next BeginFrame can see the entries).
EnqueueReadback() itself does not free the offset either. It only uses the offset to read from the count buffer. As a result, every GPU readback path through an NDC Writer DI permanently leaks one entry from FNiagaraGPUInstanceCountManager. UsedInstanceCounts has no decrement path, so the stat "Used GPU Instance Counters" grows monotonically.
Expected: value stabilizes at a steady state
Actual: value increases monotonically
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-383224 in the post.
| 0 |
| Component | UE - Niagara |
|---|---|
| Affects Versions | 5.7, 5.8 |
| Created | Jun 5, 2026 |
|---|---|
| Updated | Jun 5, 2026 |