As far as Pixel Shader 3.0 goes, the most striking aspect is the minimum instruction count, which jumps way up from the 96 instructions specified in the 2.0 Extended spec all the way up to 512 instructions. How fast a shader with that many instructions would actually run is open to debate (not to mention how powerful the hardware is), but this increase certainly adds to the flexibility on offer. To complicate things further, the ps_2_b profile has also been added to the DirectX 9 HLSL - This gives all the features of Pixel Shader 2.0, but adds in support for up to 512 instructions without the other advantages 2.0 Extended has to offer . . .
. . . Pixel Shader 3.0 offers. To be honest, from a gamer's point of view these extra features aren't included to add to image quality, but rather to make the lives of developers easier, and give them the greater flexibility and power that they yearn for. Again, a lot of these features were in fact included to in the 2.0 Extended specification, but are now also available in PS 3.0. Before going into these in any detail, lets take a brief look at what the main new features are on offer are:
- Static and dynamic flow control
- Predication
- Dynamic branching
- New registers, and more temporary register usage allowed
- New gradient/texture instructions
- Centroid sampling
- Arbitrary swizzle
. . .
Until we start seeing titles explicitly written to take advantage of Pixel Shader 3.0 features, it really won't make any difference at all. We've already seen one title (Far Cry) patched to include 3.0 shader support - This may well have been recompiled to take advantage of some of the features listed above, and although it is unlikely to make a difference to image quality at all, we may see performance improvements using PS 3.0 over 2.0 - Something to test once we get some 3.0 shader capable boards in our hands...
The feature set of Pixel Shader 3.0 does also allow for some nice new visual effects of note - Mainly the ability to use floating point values for texture filtering and frame buffer blending. In particular, frame buffer blending can allow for a realistic looking 'motion blur' effect (brings back memories of 3Dfx's T-Buffer, doesn't it?), and floating point textures should improve the look of effects such as HDR (High Dynamic Range) rendering - An effect that we've already seen on PS 2.0 hardware in Half-Life 2, now taken to a new level. . . .
As we've explored, the potential for 'cool eye candy' is generally greater with the improvements made in Vertex Shader 3.0 than those seen in Pixel Shader 3.0. Certainly, if some of these features are put into effect in future titles, and performance is up to scratch, then we have something to be excited about.