private NvInternalResult EventWaitAsync(ref EventWaitArguments arguments) { return(EventWait(ref arguments.Fence, ref arguments.Value, arguments.Timeout, isWaitEventAsyncCmd: true, isWaitEventCmd: false)); }
private NvInternalResult EventWaitAsync(ref EventWaitArguments arguments) { return(EventWait(ref arguments, async: true)); }
private NvInternalResult EventWait(ref EventWaitArguments arguments, bool async) { if (arguments.Id >= NvHostSyncpt.SyncptsCount) { return(NvInternalResult.InvalidInput); } if (_syncpt.MinCompare(arguments.Id, arguments.Thresh)) { arguments.Value = _syncpt.GetMin(arguments.Id); return(NvInternalResult.Success); } if (!async) { arguments.Value = 0; } if (arguments.Timeout == 0) { return(NvInternalResult.TryAgain); } NvHostEvent Event; NvInternalResult result; int eventIndex; if (async) { eventIndex = arguments.Value; if ((uint)eventIndex >= EventsCount) { return(NvInternalResult.InvalidInput); } Event = _events[eventIndex]; } else { Event = GetFreeEvent(arguments.Id, out eventIndex); } if (Event != null && (Event.State == NvHostEventState.Registered || Event.State == NvHostEventState.Free)) { Event.Id = arguments.Id; Event.Thresh = arguments.Thresh; Event.State = NvHostEventState.Waiting; if (!async) { arguments.Value = ((arguments.Id & 0xfff) << 16) | 0x10000000; } else { arguments.Value = arguments.Id << 4; } arguments.Value |= eventIndex; result = NvInternalResult.TryAgain; } else { result = NvInternalResult.InvalidInput; } return(result); }
private NvInternalResult EventWaitAsync(ref EventWaitArguments arguments) { return(EventWait(ref arguments.Fence, ref arguments.Value, arguments.Timeout, async: true)); }