No argument that AMD is slower at releasing game fixes than Nvidia.
How could AMD and id not see the issues before launch?
The final retail game had to be tested on AMD hardware.
This where i get confused, i must not fully understand how a game is tested for retail launch, because i dont see how id and AMD could have missed the issues or claim they didnt encounter the flickering/pop-ups in testing the retail game.
The game code is burnt on a master disk first, then clone, then package, then ship. This means the game is finished long before its release date. Both AMD and Nvidia are notified about the release date and are expected to release appropriate drivers containing APIs/extensions that are needed to run the game.
Unlike Dx games, Rage requires OGL, which is rarely tested, plus some new extensions that both AMD and Nvidia needs to supply. ID doesn't get a copy of beta driver before us, yet AMD and Nvidia individually send patches to ID for developement. All these patches received by ID are suppose to be in the new driver, but AMD accidentially loaded the incorrect version of OGL packages (or simply forgot) into its latest driver before the game release, and therefore must release a patch to public for the game after its release.
A patch contains code correction for bugs, work around design flaws, and new function points. The problem of patches is that it never gets tested as a whole (Integration Testing.) Without I&T, things that used to work may no longer works, "a fix from one patch may break a fix from another patch", and new bugs and flaws may surface. That means, putting a bunch of patches together and make them all work without breaking other things is, by itself, a difficult task. This is why we have beta/review drivers.
To save time, QA does not test everything (that is all the possible combination of API usages.) Instead, they are given a list of things to test. "Play Rage with the new driver" is not one of these tests, but OGL tests for rage may be in the list. However, just because those tests pass does not mean the game will run flawlessly. As we can see, the game runs, but then artifacts shows up, flickering and bad performance. None of these happened with the patch given by AMD/Nvidia inside ID's lab. It can be the result of "a fix from one patch may break a fix from another patch."
Sending a driver containing nothing but the patches for the game is also very challenging, as the driver may not clean itself properly, it may not support all OS and hardwares. Many of us know how difficult it can be to remove a driver. Some of us know how to use driver sweeper correctly, but most people dont. Not only you have to remove the file associated to the previous driver, but the link to those files within the registry. Unfortunately, Driver sweeper isn't from AMD or Nvidia, it may leave some files, new files/link from beta drivers, behind which lead to problems. The best method is first uninstall the driver, then reboot into safemode, delete all the folders related to the driver(this can be tricky as a)you don't know which folders are related, and b)you may not be able to delete it or its contain due to reference and privilege), and then remove all reference from registry related to the video card(which is also challenging as a mistake can screw up windows completely), and reboot. After all this, the game may run fine but nothing else does. The best way to fix this is to wait for an appropriate driver(not beta or preview) for the game.
Game Engine design is far more complicated than a game design. Game design means "game play", "visual", "sound", and "performance". Game Engine design means "response time", "capabilities", "capacities", "compatibility", "complicity(aka user friendly", "flexibilities", etc which is more to the hardware instead of to the user. Unfortunately, the only way to inteface to hardware, the engine must communicate via the defined set of APIs on the driver. Without APIs, there are no way as each video card use its own language. It is possible to code without a driver, but then the hardware must not change. This is why console is far easier to code as the hardware does not change, and people can code to the hardware directly.
GPU vendor needs to make sure that the API works on all its GPU. However, there are APIs that have not been used for years, and there are physical changes to newer hardwares which make code behind these APIs obsolete, meaning they do not run as fast as it can be, if it still runs at all. I still have games that no longer runs (A-train) because the environment changed so much, and no one really cares.