It turns out that Microsoft did something very interesting Windows 7, something incredibly cool in fact! Windows 7 will contain something called WARP10, which stands for Windows Advanced Rasterization Platform. This is, in essence, a software rasterizer for DirectX. WARP10 is a high speed, fully conformant software rasterizer that supports DX10+. WARP allows 3D rendering in a variety of situations where hardware implementations are unavailable, including:
- When the user does not have any Direct3D capable hardware or driver, or the card or driver crashes
- When running as a service or in a server environment
Microsoft lists a bunch of other scenarios, but basically WARP10 will run anytime you do not have a working video card or driver. (Assuming you program for it, that is – that is are targeting feature set DX 10.1 or less) What this means is application developers are no longer constrained from using 3-D effects when they find compatible hardware. This is going to open up a whole new realm of casual games that don’t have extreme hardware requirements as well as applications that could be improved by rendering a static 3-D scene. When you combine this with the new Direct3D hardware requirements, applications that are not real-time 3-D will be able to first try hardware driver, and if that’s not available, fall back to a WARP10 interface.
This is an incredibly great thing that Microsoft has done! This brings us back to the halcyon days of software rasterizers where GPUs were measured by their bit-blt rate. This is circa 1999. Things were simple in those days, as you didn’t need to check for shader model support or for a particular pixel buffer format or for a CAPS bit.
I see the biggest use of this is in the coming years, as WARP is multithreaded, so that it can effectively use higher-end hardware – in particular multi-core CPUs and SSE instructions to maximize the throughput. Over the past decade we’ve been maxing out GPU’s while the power of CPU and continued to grow steadily and now pretty much all CPUs are multicore systems I continue to see game developers hitting a GPU limit and failing to take advantage of multicore CPU systems. While I rail against this short-sightedness, after all, while physics and AI can be programmed on a GPU, you really can’t do anything fancy very easily in a shader, it’s just not made for it, but it does attack the problem from the other end – offloading some of the GPU tasks onto the CPU. There’s no reason you can’t have two rendering pipelines – one for the GPU and one for the CPU. This allows you to off-load simple things, like occlusion queries, shadow map generation, etc. onto the CPU, giving you more time for the GPU to actually render stuff.
Visit the Microsoft WARP web page here.