fix pre-action crash (ryubing/ryujinx!236)

See merge request ryubing/ryujinx!236
This commit is contained in:
LotP 2025-12-12 14:28:54 -06:00
parent 3a593b6084
commit 2c0977f6b3
4 changed files with 18 additions and 6 deletions

View File

@ -404,9 +404,12 @@ namespace Ryujinx.Graphics.Gpu
if (force || _pendingSync || (syncPoint && SyncpointActions.Count > 0)) if (force || _pendingSync || (syncPoint && SyncpointActions.Count > 0))
{ {
foreach (ISyncActionHandler action in SyncActions) for (int i = 0; i < SyncActions.Count; i++)
{ {
action.SyncPreAction(syncPoint); if (SyncActions[i].SyncPreAction(syncPoint))
{
SyncActions.RemoveAt(i--);
}
} }
foreach (ISyncActionHandler action in SyncpointActions) foreach (ISyncActionHandler action in SyncpointActions)

View File

@ -411,7 +411,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// flushes often enough, which is determined by the flush balance. /// flushes often enough, which is determined by the flush balance.
/// </summary> /// </summary>
/// <inheritdoc/> /// <inheritdoc/>
public void SyncPreAction(bool syncpoint) public bool SyncPreAction(bool syncpoint)
{ {
if (syncpoint || NextSyncCopies()) if (syncpoint || NextSyncCopies())
{ {
@ -421,6 +421,8 @@ namespace Ryujinx.Graphics.Gpu.Image
_registeredBufferSync = _modifiedSync; _registeredBufferSync = _modifiedSync;
} }
} }
return true;
} }
/// <summary> /// <summary>

View File

@ -393,11 +393,16 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// This will copy any buffer ranges designated for pre-flushing. /// This will copy any buffer ranges designated for pre-flushing.
/// </summary> /// </summary>
/// <param name="syncpoint">True if the action is a guest syncpoint</param> /// <param name="syncpoint">True if the action is a guest syncpoint</param>
public void SyncPreAction(bool syncpoint) public bool SyncPreAction(bool syncpoint)
{ {
if (_bufferInherited)
{
return true;
}
if (_referenceCount == 0) if (_referenceCount == 0)
{ {
return; return false;
} }
if (BackingState.ShouldChangeBacking()) if (BackingState.ShouldChangeBacking())
@ -414,6 +419,8 @@ namespace Ryujinx.Graphics.Gpu.Memory
_modifiedRanges?.GetRangesAtSync(Address, Size, _context.SyncNumber, _syncPreRangeAction); _modifiedRanges?.GetRangesAtSync(Address, Size, _context.SyncNumber, _syncPreRangeAction);
} }
} }
return false;
} }
void SyncPreRangeAction(ulong address, ulong size) void SyncPreRangeAction(ulong address, ulong size)

View File

@ -17,6 +17,6 @@ namespace Ryujinx.Graphics.Gpu.Synchronization
/// Action to be performed immediately before sync is created. /// Action to be performed immediately before sync is created.
/// </summary> /// </summary>
/// <param name="syncpoint">True if the action is a guest syncpoint</param> /// <param name="syncpoint">True if the action is a guest syncpoint</param>
void SyncPreAction(bool syncpoint) { } bool SyncPreAction(bool syncpoint) { return true; }
} }
} }