Pixel Shader 3.0 in Motion: FarCry 1.2 Patch Test
Intro to SM3.0
When NVIDIA launched their 6800 series of graphics cards based on their NV40 technology, one of the features that was spotlighted was support for the new Pixel Shader 3.0 technology (also called Shader Model 3.0) coming in DirectX 9.0c. Here at PC Perspective, we were heavily involved in the initial outset of this technology, posting some screen shots of PS3.0 in action, and also going as far as interviewing the CEO of Crytek on the benefits of Shader 3.0.
I am going to use some of the answers that Mr. Yerli provided us back in April, on the benefits of PS3.0, to breifly showcase the technology once again.
There are several benefits to using the new Shader technology but the most prominent is the ability to support branching in the shader code. To quote our interview: "In PS3.0 shaders, it's possible to decrease the number of shaders using dynamic branching (single shader for general lighting) and in such way to decrease the number of shader switches, passes, and as result, increase speed. Furthermore, we can also utilize dynamic conditional early reject for some cases, in both PS and VS, which will also increase speed." If anyone has taken any comptuer science courses in college, and remembers programming without branches, you know how frustrating the job can be. Adding in the ability to have "if then else" statements, as well as loops, increases the shader technology's functionality ten-fold. The caveat of course is that now programmers that aren't careful may find themselves creating infinite loops in this code, but I would consider this a minor issue compared to the benefits.
Mr. Yerli was also candid about other downfalls of the new features in PS3.0. To quote: "Several new features in the 3.0 shader model aren't for free. Texture access in vertex shader is expensive and dynamic branching is not for free. So if a developer has to utilize some features of PS3.0 shader model, he/she should design shader in way which will remove other, more important, bottlenecks of application." This makes sense, of course, if you have ever done any work in compilers in computer science; compiling branches and loops, as well as a lot of complexity to the compilation process, and thus if it is used inappropriatly, it can actually cause more harm than good. What Crytek is suggesting is what I am sure other major software vendors are already doing -- using the PS3.0 changes to remove bottlenecks from all parts of the system, not just the graphics card.
The controversy over the initial PS3.0 screenshots we saw was whether or not PS3.0 actually increased the image quality of FarCry. When we asked Mr. Yerli about this, we got this answer: "The current generation engine quality of PS3.0 is almost the same as PS2.0. PS3.0 is used for performance optimisation purposes." What this says is that PS3.0 may speed up the game in question, but it won't increase the image quality automatically. It may be possible to use more shader functions on a faster system thus increasing image quality, but in the current generation of games, as Crytek is stating, the enhancements are purely for performance purposes.
With that out of the way, are you curious to see how much of a performance optimization you are going to see using a SM3.0 path in FarCry? The benchmarks are on the next page!