Almost any user, who played games utilizing PhysX SDK physics engine (either with GPU acceleration support or software only), must be familiar with PhysX System Software (PSS, also known as PhysX Driver) – special package that includes core DLL libraries for physics engine to operate correctly and some firmware components, and is required for installation regardless of whether you have NVIDIA GPU or not.
This is how it works: PhysX Loader, located in game’s directory, loads corresponding core DLLs of PhysX engine from PSS installation folder. GPU acceleration DLLs (PhysX and CUDA Device Managers) are acquired from PSS distribution, if required. Supplementary libraries (like Character Controller DLL), in comparison, can be stored in local folder.
Note: one must have noticed that many older games store core engine libs locally, but still require a PSS installation.
For the most part, pre-2.8.4 PhysXCore.dll files in game directories are the result of special requirements of certain engines (like UE3) or installers that include unneeded DLLs.
PhysX System Software installation requirement was firstly introduced by Ageia in 2006, and obviously such approach has its own advantages and disadvantages.
- One can release minor engine upgrades and bug-fixes for games without necessity to update games themselves.
- Similarly, it is possible to provide support for new GPU architectures in older games just by releasing updated PSS versions.
- PSS installation requirement is redundant for PhysX games not supporting GPU acceleration.
- Unwieldy installer, which is only growing bigger over time (because subsequent versions include all previous ones).
- Possible incompatibilities between certain games and certain PSS releases.
- Other installation and usage problems (bugs, wrong chosen versions, etc).
As result, PhysX System Software was not liked by both developers and users. To address these issues NVIDIA introduced the “driverless” model in PhysX SDK 2.8.4 and above, including the PhysX 3 SDK. Those SDKs can load all necessary libraries from local folders, thus obliterating straight dependence on System Software.
Bill Bean, member of the PhysX Development team at NVIDIA, will help us to understand all the mechanics behind new “driverless” approach.
PhysXInfo.com: PhysX SDK 2.8.4 is claimed to be “driverless”. What does this mean? Dependencies from PhysX System Software – do they still exist?
Bill Bean: The PhysX Driverless model refers to the configuration of PhysX where the PhysX DLLs a game uses are included in the games directory. PhysX SDK 2.8.4 and above do not require the PhysX System Software to be installed. This change was implemented in response to requests from game developers who wanted to make their installers stand-alone and not dependent on other installers.
Games based on PhysX SDKs that support the driverless model include all of the PhysX DLLs that they require in the games folders. Consequently for those games to work when they are released does not require the PhysX System Software to be installed.
Since the PhysX DLLs included in the games do not have the ability to support future Nvidia GPU architectures a method to select an alternate DLL was created. The PhysX Update Loader was created to fulfill this requirement. If updated DLLs have been installed for a game that uses the driverless model the PhysX Update Loader loads the new DLL instead of the one located in the games directory.
PhysX update DLLs are currently distributed with the PhysX System Software (they are stored in special folders defined by application IDs). In the future other distribution methods may also be supported.
PhysXInfo.com: Is the PhysX SDK 3.x still relaying on PSS installation, one way or another?
Bill Bean: Except for the updated DLLs mentioned above PhysX SDK 3.x is independent of the PhysX System Software.
PhysXInfo.com: PSS installation does not contain appropriate 2.x.x folder for SDK 2.8.4 – where are the updated engine libraries located then? If one will create “2.8.4” folder manually and edit the registry – will PhysX SDK recognize and use it?
Bill Bean: The DLLs for games that use the PhysX SDK version 2.8.4 are located in the game. At the present time updated DLLs for 2.8.4 SDK games are located in special sub-directories of the PhysX System Software engine directory.
Depending on the version of the PhysX Loader that is being used, if a 2.8.4 folder is manually created – it will be used. However, since there are many non-binary compatible versions of the 2.8.4 PhysX DLLs that have been created for specific games, doing this will cause games not to function correctly since the fixes needed for other games may not be present and some combinations will cause crashes.
Adding files to the PhysX System Software directories may also cause failures when future PhysX System Software versions are installed.
PhysXInfo.com: Same question about PhysX 3.x – any point to add “3.x” folders to PSS? Will it make PhysX games to use SDK 3 somehow?
Bill Bean: Creating a PhysX 3.x folder in the PSS has no benefit. The DLLs will not be used. PhysX 3 is a completely new API that is not compatible with the 2.8.X DLLs.
PhysXInfo.com: Which libraries have the priority – local DLLs or PSS ones? Can I force the game to use updated libraries by deleting PhysX files, located in game’s folder? Alternatively, if one will replace, let’s say, SDK 126.96.36.199 local .dlls with SDK 188.8.131.52 ones, will it have any positive effect?
Bill Bean: If an updated DLL exists for a particular game, the updated DLL takes priority over any DLLs local to the game. There is no need to delete the copies of the PhysX DLLs in the game.
Since there are multiple PhysX 2.8.4.x versions that are not compatible with each other replacing one version with one that has a higher version number in most cases will not work. The last digit of the DLL version number is not used by the Microsoft installer system. PhysX uses this number to track the version number of a particular game DLL. Thus there can be multiple 184.108.40.206 PhysX DLLs that are not compatible with each other. The installer manages these versions and ties the appropriate DLLs to each game.
PhysXInfo.com: All right, thanks for all the valuable information, Bill!
Bill Bean: My pleasure.
As you may see, history of PhysX System Software has not ended with the arrival of driverless PhysX SDK 2.8.4 and SDK 3.x has taken the scene. Furthermore, more flexible and advanced ways to provide updates for PhysX engine are already under development.