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); } } } }
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, }; }