Exemple #1
0
 public Result ResetFences(IMgFence[] pFences)
 {
     foreach (var fence in pFences)
     {
         IGLFence bFence = (IGLFence)fence;
         bFence.Reset();
     }
     return(Result.SUCCESS);
 }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        public Result GetFenceStatus(IMgFence fence)
        {
            IGLFence bFence = (IGLFence)fence;

            return((bFence.IsSignalled) ? Result.SUCCESS : Result.NOT_READY);
        }