/// <summary> /// Signal that the given region of the buffer has been modified. /// </summary> /// <param name="address">The start address of the modified region</param> /// <param name="size">The size of the modified region</param> public void SignalModified(ulong address, ulong size) { EnsureRangeList(); _modifiedRanges.SignalModified(address, size); if (!_syncActionRegistered) { _context.RegisterSyncAction(SyncAction); _syncActionRegistered = true; } }
/// <summary> /// Registers a sync action to happen for this handle, and an interim flush action on the tracking handle. /// </summary> /// <param name="context">The GPU context to register a sync action on</param> private void RegisterSync(GpuContext context) { if (!_syncActionRegistered) { _modifiedSync = context.SyncNumber; context.RegisterSyncAction(SyncAction, true); _syncActionRegistered = true; } if (Interlocked.Exchange(ref _actionRegistered, 1) == 0) { _group.RegisterAction(this); } }
/// <summary> /// Registers a sync action to happen for this handle, and an interim flush action on the tracking handle. /// </summary> /// <param name="context">The GPU context to register a sync action on</param> private void RegisterSync(GpuContext context) { if (!_syncActionRegistered) { _modifiedSync = context.SyncNumber; context.RegisterSyncAction(SyncAction, true); _syncActionRegistered = true; } if (!_actionRegistered) { _group.RegisterAction(this); _actionRegistered = true; } }