re:Andybird
I'm going to answer this slightly out of order.
You mention in the article that turning off each of the game works features resulted in the same improvment to fps, so surely it isnt the gameworks libraries that are directly responsible for the performance issues?
Correct. There are two separate issues in play here. Let me break them down for you like this:
GameWorks is not worrying because it directly gives NV a performance advantage in AO. GameWorks is worrying because the long-term impact of giving one company control over another company's performance is intrinsically problematic.
This is why I bring up the Intel /AMD compiler issues from nearly a decade ago. It's an example of a situation in which one company (Intel) exploited a software program to create a situation that strategically blocked its competitor from performing at full potential. Back then, everyone shrugged and said: "Gosh, AMD's SSE2 implementation must suck."
My concern regarding GameWorks has nothing to do with Nvidia. I'd be just as concerned if this was an Intel or an AMD program. I believe strongly that each company needs to be in control of its own optimization process, including the ability to work with developers and improve underlying software.
In this context, Arkham Origins is an example of how a developer can refuse to work with a vendor and, in so doing, create a tilted playing field. End-users will look at the situation and say: "AMD's drivers STILL suck. Great hardware, but you can't trust it."
That statement doesn't really describe the situation -- but it *does* create a perceptual advantage that favors one company over another.
Also, lots of games use external libraries from lots of sources, why is it that you say that AMD are unable to do ANY optimisation on the nvidia ones, yet they seem able to optimise for other 3rd party libraries?
I am not enough of a programmer to speak to the entirety of all game development everywhere. But I'll tell you my best understanding of this process:
Games may use many outside libraries, but not all those libraries are tied to GPU functions. Of the libraries that are tied to GPU functions, AMD and Nvidia may, in some cases, work directly with third-party vendors to optimize the library for their respective hardware.
Nvidia has stated that it
does work with developers to optimize libraries like GameWorks for specific games, and that developers can see the code under license. Exactly what the terms of those licenses are, I don't know. What I do know is that the library, in its end form, is an compiled, closed-source DLL (relative to AMD). (My story will be updated to reflect this point as soon as I hit "Post" on this response).
AMD can see when the library is called. AMD can see the library's output. But without code access, AMD can't see what the library is doing. This makes it extremely difficult to impossible to optimize -- the library is a black box function.
You raise the question of how GameWorks pulls power from developers? Developers may be able to see the code within the library (if they are licensed to do so). They may be able to do some optimizations on the library for their own title. But they cannot optimize the library for an AMD GPU, because that's not their job or their expertise. And similarly, they almost certainly can't share any GW code with AMD or give hints on how to optimize.
Some have argued that AMD can get around this issue by creating an equivalent program in which AMD pays developers (either in cash or with expertise) and creates its own library program. That way, a developer building a game would have two sets of libraries: Call them GFSDK_SoftShadow and GCNSDK_SoftShadow. That's a fair point, as far as it goes -- yes, AMD could do this, and yes, the end result would be a "balanced" playing field of sorts, provided that AMD could afford to match Nvidia game-for-game and developer-for-developer.
My point here is that I do not feel this benefits the game developer or the end-user as whole.
With any library, each vendor can see what commands are being sent from DirectX to the drivers and then rewrite the drivers to reinterpret what happens on the GPU, this happens all the time with 3rd party libraries, my understanding is that tressfx is a library for example, so why is it that AMD cannot do any optimisation at all on the gameworks fucntions that work on AMD cards? Do you actualy have any direct experience of coding or are you relying on what AMD have told you on this?
The source code for TressFX 2.0 is
available for download, including the shaders.
I had some basic and intermediate courses in C++ in college and have done some game modding in the past but would not call myself either a programmer or game developer. In researching this story, I talked to multiple sources from multiple companies, both to flesh out my understanding of the role of libraries and GPU optimizations for gaming in general, and to explore the issues at play here in particular.
I can't say more than that.
The last point I'd make is that this isn't about Nvidia vs. AMD to me. Nvidia makes a damn good graphics card. They've done tremendous amounts of good for gaming in the past 13 years. Nvidia pioneered GPGPU work. They built the first mainstream programmable GPU. PhysX and 3D Vision might be niche features, but I have enjoyed PhysX in every (good) game it shipped with, I've liked 3D Vision, and my significant other uses a NV card + 3D-capable monitor because she likes watching movies in 3D.
In the 12 years since I regretfully gave up 3dfx I've been an NV customer in my own personal box more than an AMD customer, partly *because* they offered better driver profiles and even third-party tools were stronger. If I had to buy a brand-new GPU tomorrow, I'm not sure which company I'd pick.
GameWorks is risky because we've already seen what happens when one company can use a software position to reinforce a consumer perception of substandard hardware. By the time we had proof that Intel's compiler refused to optimize for AMD CPUs, even though AMD had paid Intel for the right to use those optimizations, the damage was done.
That needs to not happen again.