Ejemplo n.º 1
0
            static unsafe void ExecuteInnerLoop(ref JobStruct_Process1 <T, U0> jobData, int begin, int end)
            {
                ComponentChunkCache cache0;

                while (begin != end)
                {
                    jobData.Iterator.Iterator0.UpdateCache(begin, out cache0);
                    var ptr0 = UnsafeUtilityEx.RestrictNoAlias(cache0.CachedPtr);

                    var curEnd = Math.Min(end, cache0.CachedEndIndex);

                    for (var i = begin; i != curEnd; i++)
                    {
#if CSHARP_7_OR_LATER
                        ref var value0 = ref UnsafeUtilityEx.ArrayElementAsRef <U0>(ptr0, i);
                        jobData.Data.Execute(ref value0);
#else
                        var value0 = UnsafeUtility.ReadArrayElement <U0>(ptr0, i);

                        jobData.Data.Execute(ref value0);

                        if (jobData.Iterator.IsReadOnly0 == 0)
                        {
                            UnsafeUtility.WriteArrayElement(ptr0, i, value0);
                        }
#endif
                    }

                    begin = curEnd;
                }
Ejemplo n.º 2
0
            static unsafe void ExecuteInnerLoop(ref JobStruct_Process1 <T, U0> jobData, int begin, int end)
            {
                ComponentChunkCache cache0;

                while (begin != end)
                {
                    jobData.Iterator.Iterator0.UpdateCache(begin, out cache0);
                    var ptr0 = cache0.CachedPtr;

                    var curEnd = Math.Min(end, cache0.CachedEndIndex);

                    for (var i = begin; i != curEnd; i++)
                    {
                        //@TODO: use ref returns to pass by ref instead of double copy
                        var value0 = UnsafeUtility.ReadArrayElement <U0>(ptr0, i);

                        jobData.Data.Execute(ref value0);

                        if (jobData.Iterator.IsReadOnly0 == 0)
                        {
                            UnsafeUtility.WriteArrayElement(ptr0, i, value0);
                        }
                    }

                    begin = curEnd;
                }
            }
Ejemplo n.º 3
0
            static unsafe void Execute(ref JobStruct_Process1 <T, U0> jobData, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex)
            {
                if (jobData.Iterator.m_IsParallelFor)
                {
                    int begin;
                    int end;
                    while (JobsUtility.GetWorkStealingRange(ref ranges, jobIndex, out begin, out end))
                    {
#if ENABLE_UNITY_COLLECTIONS_CHECKS
                        JobsUtility.PatchBufferMinMaxRanges(bufferRangePatchData, UnsafeUtility.AddressOf(ref jobData), begin, end - begin);
#endif
                        ExecuteInnerLoop(ref jobData, begin, end);
                    }
                }
                else
                {
                    ExecuteInnerLoop(ref jobData, 0, jobData.Iterator.m_Length);
                }
            }
Ejemplo n.º 4
0
            private static unsafe void ExecuteInnerLoopByChunk(ref JobStruct_Process1 <T, U0> jobData, int begin,
                                                               int end)
            {
                ComponentChunkCache cache0;

                for (var blockIndex = begin; blockIndex != end; ++blockIndex)
                {
                    jobData.Iterator.Iterator0.MoveToChunkByIndex(blockIndex);

                    var processBlock = false;

                    processBlock |= jobData.Iterator.IsChangedFilter0 != 0 &&
                                    jobData.Iterator.Iterator0.IsCurrentChunkChanged();

                    if (!processBlock)
                    {
                        continue;
                    }

                    jobData.Iterator.Iterator0.UpdateCacheToCurrentChunk(out cache0, jobData.Iterator.IsReadOnly0 == 0);
                    var ptr0 = UnsafeUtilityEx.RestrictNoAlias(cache0.CachedPtr);

                    for (var i = cache0.CachedBeginIndex; i != cache0.CachedEndIndex; i++)
                    {
#if CSHARP_7_OR_LATER
                        ref var value0 = ref UnsafeUtilityEx.ArrayElementAsRef <U0>(ptr0, i);
                        jobData.Data.Execute(ref value0);
#else
                        var value0 = UnsafeUtility.ReadArrayElement <U0>(ptr0, i);

                        jobData.Data.Execute(ref value0);

                        if (jobData.Iterator.IsReadOnly0 == 0)
                        {
                            UnsafeUtility.WriteArrayElement(ptr0, i, value0);
                        }
#endif
                    }
                }