mirror of
https://github.com/par274/sharpemu.git
synced 2026-08-22 01:11:33 +08:00
Fix GuestDataPool lease leak on non-GPU compute dispatch paths (#759)
ObserveComputeDispatch only returned evaluation's pooled arrays when evaluationHandledByCpu was set. Dispatches rejected before submission (empty resource tables, oversized workgroup, compile failure) or a compute submit that got dropped instead of enqueued (workSequence == 0) never handed those buffers to a consumer that would return them, leaking one lease per occurrence and growing GuestDataPool.Shared without bound over a long session. Adds GuestDataPool.DiagnosticStats() (outstanding lease count, idle cached bytes) surfaced in the periodic [LOADER][PERF] line, to catch this class of regression going forward. Verified on Ghost of Yotei and Demon's Souls: pool_leases grew unbounded before the fix (525 in 5 min on Demon's Souls, 1114 in 180s on Yotei) and stays flat/bounded after (0-6 and 2-18 respectively), with no behavioral regression observed.
This commit is contained in:
@@ -11307,7 +11307,9 @@ public static partial class AgcExports
|
||||
}
|
||||
}
|
||||
|
||||
if (evaluationHandledByCpu)
|
||||
// Rejected/CPU-handled dispatches never hand evaluation's pooled buffers to a
|
||||
// consumer that would return them; reclaim here to keep GuestDataPool.Shared bounded.
|
||||
if (evaluationHandledByCpu || !gpuDispatch)
|
||||
{
|
||||
ReturnPooledEvaluationArrays(evaluation);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user