This patch adds the base code needed to make the full-frame system work for both current tiled/per-pixel implementation of operations and full-frame.
Two execution models:
- Tiled: Current implementation. Renders execution groups in tiles from outputs to input. Not all operations are buffered. Runs the tiled/per-pixel implementation.
- FullFrame: All operations are buffered. Fully renders operations from inputs to outputs. Runs full-frame implementation of operations if available otherwise the current tiled/per-pixel. Creates output buffers on first read and free them as soon as all its readers have finished, reducing peak memory usage of complex/long trees. Operations are multi-threaded but do not run in parallel as Tiled (will be done in another patch).
This should allow us to convert operations to full-frame in small steps with the system already working and solve the problem of high memory usage.
FullFrame breaking changes respect Tiled system, mainly:
- Translate, Rotate, Scale, and Transform take effect immediately instead of next buffered operation.
- Any sampling is always done over inputs instead of last buffered operation.
---
**Benchmarks**:
Test 1: A lot of branches and non-buffered operations on Tiled.
{F10078722}
Test 2: Few branches and many buffered operations on Tiled.
{F10078723}
##Intel i7-6700K, Windows 10
| **Execution Model** | **Threading Model** | **Test 1** | **Test 2** |
| Tiled | Queue | 0.65s / 211.42MB | 1.36s / 717.04MB |
| Tiled | Task | 0.66s / 211.42MB | 1.50s / 717.04MB |
| FullFrame | Queue | 0.62s / 329.50MB | 1.39s / 241.76MB |
| FullFrame | Task | 0.54s / 329.50MB | 1.25s / 241.76MB |
Note: Measured time is for ExecutionSystem::execute. MBs for peak memory.
{F10078729}