GraphixViolence
Newcomer
Dean,
I found your recent comments on SM3.0 in your forum concerning. You seem to indicate that investing time and money to develop SM3.0 shader technology is beneficial, while doing so for SM2.0b is not. Your rationale is that eventually all new hardware will support SM3.0, so there is no benefit in supporting subsets of that model. This seems to me to be a flawed line of reasoning.
One feature of the DirectX shader models is that higher numbered versions always have to support a superset of the features in lower numbered versions. In other words, any hardware that supports SM3.0 must also be able to support SM2.0b, 2.0a, 1.4, 1.3, etc. So it should follow that for a given graphical technique you wish to implement, you will be best off if you implement it using the lowest possible shader model that will work, since this guarantees the widest number of users will be able to take advantage of it.
There are parallels here to Nvidia's promotion of partial precision hints. Their argument has been that you should use them wherever possible because, even though they benefit only Nvidia hardware, they won't have any negative effect on other DX9-compatible hardware that doesn't support them. Similarly, if a given technique can be made to run well using SM2.0b, then why not do so rather than restricting it exclusively to SM3.0 hardware? It's not like the SM2.0b code would just get thrown away when future hardware comes along, and in the meantime it should run fine on both NV & ATI hardware, while an equivalent SM3.0 path will only run fine on the former.
Before you say that SM3.0 is clearly superior to SM2.0b and such a situation would never happen, let's look at what's happened so far. We've seen one development group (Crytek) that's actually gone down the path of implementing SM3.0 and patching support into a shipping game. Their analysis showed that compared to SM2.0, they could realize performance improvements by taking advantage of geometry instancing and flow control to handle multiple per-pixel lights in a single pass. Later they realized that both of these techniques could be implemented equally well using SM2.0b. They wanted to use dynamic branching, but performance problems with existing SM3.0 hardware (i.e. NV40) made this less useful than it seemed at first.
There are indications that other novel features of the NV40 have similar issues. Vertex texture fetch is said to be slow, and FP blending apparently carries a significant performance cost as well, besides being incompatible with anti-aliasing. Future hardware might overcome these limitations, but it seems foolish to develop an engine that counts on this happening without first exhausting all the possibilities of today's hardware.
So I think people have a perfectly valid point when they associate games with SM3.0 support today as being pro-Nvidia. In another thread you stated that you would never intentionally slow a game down on one IHV's hardware regardless of publishing/PR deals for any reason, and you believed pretty much all other developers would do the same. But if you implemented performance enhancements into your game using SM3.0 and:
a) They could also be implemented on SM2.0b hardware
b) They would provide a comparable performance improvement on SM2.0b hardware,
c) The SM2.0b implementation would still run and enhance performance on SM3.0 hardware, and
d) You didn't use SM2.0b to implement them because an IHV paid you to support SM3.0...
... then I'd say you've pretty much done what you said you wouldn't do. Yet if Crytek had taken your advice and not bothered with SM2.0b in their recent patch, they would have done exactly what I just described. And that, in my opinion, would have set a very negative precedent.
I found your recent comments on SM3.0 in your forum concerning. You seem to indicate that investing time and money to develop SM3.0 shader technology is beneficial, while doing so for SM2.0b is not. Your rationale is that eventually all new hardware will support SM3.0, so there is no benefit in supporting subsets of that model. This seems to me to be a flawed line of reasoning.
One feature of the DirectX shader models is that higher numbered versions always have to support a superset of the features in lower numbered versions. In other words, any hardware that supports SM3.0 must also be able to support SM2.0b, 2.0a, 1.4, 1.3, etc. So it should follow that for a given graphical technique you wish to implement, you will be best off if you implement it using the lowest possible shader model that will work, since this guarantees the widest number of users will be able to take advantage of it.
There are parallels here to Nvidia's promotion of partial precision hints. Their argument has been that you should use them wherever possible because, even though they benefit only Nvidia hardware, they won't have any negative effect on other DX9-compatible hardware that doesn't support them. Similarly, if a given technique can be made to run well using SM2.0b, then why not do so rather than restricting it exclusively to SM3.0 hardware? It's not like the SM2.0b code would just get thrown away when future hardware comes along, and in the meantime it should run fine on both NV & ATI hardware, while an equivalent SM3.0 path will only run fine on the former.
Before you say that SM3.0 is clearly superior to SM2.0b and such a situation would never happen, let's look at what's happened so far. We've seen one development group (Crytek) that's actually gone down the path of implementing SM3.0 and patching support into a shipping game. Their analysis showed that compared to SM2.0, they could realize performance improvements by taking advantage of geometry instancing and flow control to handle multiple per-pixel lights in a single pass. Later they realized that both of these techniques could be implemented equally well using SM2.0b. They wanted to use dynamic branching, but performance problems with existing SM3.0 hardware (i.e. NV40) made this less useful than it seemed at first.
There are indications that other novel features of the NV40 have similar issues. Vertex texture fetch is said to be slow, and FP blending apparently carries a significant performance cost as well, besides being incompatible with anti-aliasing. Future hardware might overcome these limitations, but it seems foolish to develop an engine that counts on this happening without first exhausting all the possibilities of today's hardware.
So I think people have a perfectly valid point when they associate games with SM3.0 support today as being pro-Nvidia. In another thread you stated that you would never intentionally slow a game down on one IHV's hardware regardless of publishing/PR deals for any reason, and you believed pretty much all other developers would do the same. But if you implemented performance enhancements into your game using SM3.0 and:
a) They could also be implemented on SM2.0b hardware
b) They would provide a comparable performance improvement on SM2.0b hardware,
c) The SM2.0b implementation would still run and enhance performance on SM3.0 hardware, and
d) You didn't use SM2.0b to implement them because an IHV paid you to support SM3.0...
... then I'd say you've pretty much done what you said you wouldn't do. Yet if Crytek had taken your advice and not bothered with SM2.0b in their recent patch, they would have done exactly what I just described. And that, in my opinion, would have set a very negative precedent.