Ejemplo n.º 1
0
        public void Update()
        {
            Preconditions.Assert(_currentOrderWithTask != null, "There is arleady there is no order set");

            var order = _currentOrderWithTask.Order;

            if (_executionState.CurrentWorkPackIndex >= order.WorkPacks.Count)
            {
                var outParameters = order.OutParameters;
                FinalizeParameters(order.ParametersContainer, _executionState.CreatedParametersContainer, outParameters);

                var tcs = _currentOrderWithTask.Tcs;
                _currentOrderWithTask = null;
                _executionState       = null;
                tcs.SetResult(null);
                return;
            }

            var pack         = order.WorkPacks[_executionState.CurrentWorkPackIndex];
            var dispatchLoop = pack.DispatchLoops[_executionState.DispatchLoopIndex];

            pack.Shader.ImmediatelySetGlobalUniform("g_DispatchLoopIndex", _executionState.CurrentDispatchIndex);
            pack.Shader.Dispatch(dispatchLoop.KernelHandles);

            _executionState.CurrentDispatchIndex++;
            if (_executionState.CurrentDispatchIndex >= dispatchLoop.DispatchCount)
            {
                _executionState.CurrentDispatchIndex = 0;
                _executionState.DispatchLoopIndex++;

                if (_executionState.DispatchLoopIndex >= pack.DispatchLoops.Count)
                {
                    _executionState.DispatchLoopIndex = 0;
                    _executionState.CurrentWorkPackIndex++;

                    if (_executionState.CurrentWorkPackIndex < order.WorkPacks.Count)
                    {
                        var shader = _currentOrderWithTask.Order.WorkPacks[_executionState.CurrentWorkPackIndex].Shader;
                        shader.CreateKernelHandleTranslationMap();
                        shader.SetCreatedParameters(_executionState.CreatedParametersContainer);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void AddMultistepOrder(MultistepRenderingProcessOrder <object, ComputeShaderOrder> order)
        {
            Preconditions.Assert(_currentOrderWithTask == null, "There is arleady order set");
            _currentOrderWithTask = order;

            var computeShaderCreatedParametersContainer = CreateParameters(order.Order.ParametersContainer);
            var shader = _currentOrderWithTask.Order.WorkPacks[0].Shader;

            shader.CreateKernelHandleTranslationMap();
            shader.SetCreatedParameters(computeShaderCreatedParametersContainer);

            _executionState = new MultistepComputeShaderExecutionState()
            {
                CurrentDispatchIndex       = 0,
                CurrentWorkPackIndex       = 0,
                DispatchLoopIndex          = 0,
                CreatedParametersContainer = computeShaderCreatedParametersContainer,
            };
        }