public Result ResetFences(IMgFence[] pFences) { foreach (var fence in pFences) { IGLFence bFence = (IGLFence)fence; bFence.Reset(); } return(Result.SUCCESS); }
public Result WaitForFences(IMgFence[] pFences, bool waitAll, ulong timeout) { if (timeout == 0) { // report current state only // NO WAITING AT ALL foreach (var fence in pFences) { IGLFence bFence = (IGLFence)fence; // TODO MAYBE NON BLOCKING ONLY if (!bFence.IsSignalled) { return(Result.TIMEOUT); } } return(Result.SUCCESS); } else { Stopwatch timer = new Stopwatch(); var noOfFences = pFences.Length; ulong elapsedInNanoSecs = 0UL; var remainingTime = timeout; var currentFence = 0; do { IGLFence bFence = (IGLFence)pFences[currentFence]; timer.Start(); // ONE AT A TIME var isSignalled = bFence.IsReady((long)remainingTime); timer.Stop(); elapsedInNanoSecs = (ulong)((timer.ElapsedTicks * 1000000000) / Stopwatch.Frequency); // remove elapsed time from timeout remainingTime -= elapsedInNanoSecs; if (isSignalled) { currentFence += 1; } // COMPLETED LAST FENCE if (currentFence >= noOfFences) { return(Result.SUCCESS); } }while (elapsedInNanoSecs < timeout); return(Result.TIMEOUT); } }
public Result GetFenceStatus(IMgFence fence) { IGLFence bFence = (IGLFence)fence; return((bFence.IsSignalled) ? Result.SUCCESS : Result.NOT_READY); }