In terms of performance its the right answer, however in terms of development cost and resources its a different matter. Abstraction are designed to trade performance for ease, its why we don't code everything in ASM and why we have OS and drivers.
But different hardware paths is something most games and engines are used to, we already have 3 or more so adding a few more isn't that much more work *assuming* their is the backup from the IHVs themselves. Its also something we have dealt with through the game development era, its has not been uncommon to have had to support many more hardware platforms than the 2 or 3 we would be talking about now.
Legacy issues are a 'solved' problem, as used on all the consoles and indeed on PC for older games; emulation. Already PS2, Xbox, DOS, Glide, N64, etc. are all supported using emulation tech and with the open specification required for low level implementations this would be considerably easier.
We currently have 3 paths in our PC renderer (OpenGL), Intel, AMD and NVIDIA. Currently the majority of that code is shared, with perhaps 20% (numbers out my arse so rely on them as such), we also have two completely custom render paths for PS3 and 360, if there was the potential (and appropriate cost/benefits) we could add two paths for high end AMD and NVIDIA parts (say AMD 5x00 6x00 and Fermi based NV).
As each chip family share a lot of register level similarities, its not hard to follow the small differences that appears.
To make that work, we would want a micro-code compiler for shaders (takes some high-level language and produce microcode). Spec level descriptions or a low level API for the base platform with descriptions of the changes over the lifetime including access to changes well before new variants appear (we would need seeds of new cards and specs at the same time as the internal driver teams, to produce patches before a new chip is released).
Its often said to be similar to writing your own driver, but this just isn't true. Drivers are hard because they have to support lots of apps they can't change. When your in control of the app as well, you only need to support the bits you use, which is often quite a small subset.
Its hopefully obvious that it will cost more than supporting higher level API and if it doesn't increase income, thats less profit from the PC side of the game.
So how would we recoup the cost?
- Make PC games the same price as Console titles (they typically sell for $10-20 cheaper), but this could be argued as a high end game tax on the lower end gamers.
- It perhaps could be offset by more sales, would more gamers buy PC titles if they were noticeable better than now and the console editions? Without hard facts its hard to know, it brings in the questions of DRM, piracy, how many PC gamers etc. We know some PC titles do brilliantly well (BF2 and 3 do/will do amazing numbers on PC) whats harder to tell is whether they do well on PC because they show the love they do for it or vice versa.
- Paid DLC is another options - would high end gamers pay $10 for a high end pack?
- IHV subsidy?
- Loss leader- contrary to many forumites beliefs PC is a loved platform among many developers, PC version often exist as loss leaders for the consoles. Higher res etc. make nicer screen shots and generate a lot of hype (BF3 videos are the perfect examples at this time), the PR benefits are often able to recoup the costs of investing in the high end PC version.
Another point, maybe that we have no choice?
The wheel of reincarnation is spinning and what was once SW then HW is swinging back to SW, we might have no choice but to write everything again in SW and then the GPU just becomes another supported platform as it compiler, OS, CPU etc. at the moment.
Obviously this is just a discussion... we don't have the option at the moment but its an interesting thought if we did.