In Part 6 we discussed how Command Lists allow for effective multithreaded rendering in D3D 12. Multiple threads can generate command lists in parallel then submit them to the Command queue for serial execution on the GPU. Now we move on to Dynamic heaps.
Por Bruno Sonnino
O desenvolvimento de jogos é um tópico sempre quente: todos gostam de jogar jogos, e eles estão entre os mais vendidos em qualquer lista. Mas, quando você fala em desenvolver um bom jogo, performance sempre é um requisito. Ninguém gosta de jogar jogos com paradas ou falhas, mesmo nos dispositivos mais baratos.
Through Bundles, the PSO, Descriptor Heaps & Tables we have seen how D3D 12 improves CPU efficiency and gives more control to developers. The PSO and descriptor model allow for bundles, which in turn are used for common and repeated commands. A simpler “closer to the metal” approach that reduces overhead and allows more efficient use of CPUs for “Console API efficiency and performance”.
We have finished covering the new Render Context in D3D 12. We have seen how D3D 12 gives control back to the game, getting it ‘closer to the metal’. Our last discussion covered Descriptor Heaps and Tables, how they replace bind points and create a more effecting render command pipeline. Yet there is more D3D 12 does to remove or streamline API churn. There is more overhead in the API lowering performance, and more ways to efficiently use the CPU. What about command sequences? How many repeated sequences are there and how can that be made more efficient?
This week at SIGGRAPH 2014 Intel is showing a technology demo using Microsoft's upcoming DirectX 12 API that highlights the strong relationship between performance and power.
In the demo we render a scene of 50,000 fully dynamic and unique asteroids in one of two modes: maximum performance and maximum power saving. The application can switch between using the DirectX 11 and DirectX 12 APIs at the tap of a button. We are showing the demo in our SIGGRAPH booth running live on a Microsoft Surface Pro 3 tablet with an Intel® 4th Generation Core™ processor.
In Part 3 we discussed new efficiencies for Resource Bindings in D3D 12. How resource hazards, lifetime and memory management tracking has been simplified. We are not done discussing the changes to resource binding however. There is one more important change to talk about. At the end of which we will finally see what the new D3D 12 render context looks like. Taking us closer to the “Console API efficiency and performance” goal we talked about in part 1.
In Part 2 we discussed the Pipeline State Object, or PSO, and the benefits of removing the hardware mismatch overhead. Now we move on to Resource Binding and how the D3D 12 teams plans to reduce CPU overhead in this area. To being this discussion we need to quickly review the resource binding model used in D3D 11. Below is the render context diagram with the D3D 12 PSO on the left and the D3D 11 resource binding model on the right:
By Bruno Sonnino
Game development is a perennial hot topic: everybody loves to play games, and they are the top sellers on every list. But when you talk about developing a good game, performance is always a requirement. No one likes to play a game that lags or has glitches, even on low-end devices.