Concrete effects on the graphics pipelineInclude a few wishes & predictions of how we would like the GPU programming model to evolve
FB1 Started out 5 years ago. Target the ”next-generation” consoles.And while we developed the engine we also worked on BFBC1, which was the pilot project. After that shipped, we have been spending quite a bit of effort on a new version of the engine of which one of the major new things is full PC & DX11 support.So I think we have some interesting experiences on both the consoles and modern PCs.And no, I won’t talk about BF3.
These large scale environments require heavy processing.Lets go a head and talk about jobs..
90% of this is a single job graph for the rendering of a frameRely on dynamic load-balancingTask-parallel examples: Terrain culling, particles, building entitiesData-parallel examples: ParticlesHave example of low-latency GPU job later onBraided: Aaron introduced the term at this course last year
We have a lot of jobs across the engine, too many to go through so I chose to focus more on some of the rendering.Our intention is to move all of these to the GPU
One of the first optimizations for multi-core that we did was to move all rendering dispatch to a seperate thread. This includes all the draw calls and states that we set to D3D.This helps a lot but it doesn’t scale that well as we only utilize a single extra core.Gather
Software rasterization of occluders
Conservative
Want to rasterize on GPU, not CPU CPU Û GPU job dependencies
Only visible trianglesJon Olick also talked about Edge at the course last yearSo I wont go into that much detail about thisThis is a huge optimization both for us and many other developers
Initially very skepticalIntrinsics problematic
280 instruction GSStreamOut buffer/query management is difficult & buggyWant to use CS
Esp. heavy with MSAAParallel reduction probably faster than atomics
MSAA texture read cost, UAV costGood: depth bounds on all HW
Paper presented at Siggraph yesterday.Dynamic irregular workloadsElegant model, holds a lot of promise