https://bugs.winehq.org/show_bug.cgi?id=35860
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |obfuscation Status|UNCONFIRMED |RESOLVED CC| |focht@gmx.net Resolution|--- |INVALID Summary|Crysis 2 - Claims |Crysis 2 reports |unsupported video card |'Unsupported GPU | |configuration' on startup | |(crysis engine bug)
--- Comment #5 from Anastasius Focht focht@gmx.net --- Hello folks,
I debugged that thing - it works as designed.
If you search the net you will find many complaints about this issue from Windows users.
There is a log file 'c:\Program Files\Electronic Arts\Crytek\Crysis 2\Game.log' which contains the following information:
--- snip --- BackupNameAttachment=" Build(5858) 29 May 14 (14 20 00)" -- used by backup system Log Started at 05/29/14 14:20:00 Running 32 bit version Executable: C:\Program Files\Electronic Arts\Crytek\Crysis 2\bin32\Crysis2.exe FileVersion: 1.0.0.5858 ProductVersion: 1.0.0.5858 Using STLport C++ Standard Library implementation Added MOD directory <engine> to CryPak Executable Command Line: "C:\Program Files\Electronic Arts\Crytek\Crysis 2\bin32\Crysis2.exe" ... <14:20:25> Renderer initialization <14:20:29> Unsupported GPU configuration! - NVIDIA GeForce 8800 GTX (vendor = 0x10de, device = 0x0191) - Video memory: 0 MB - Minimum SM 3.0 support: yes - Rating: 2 <14:20:29> Asking user if they wish to continue... ... --- snip ---
When the Crysis engine loads it scores the graphics card by querying different API:
* d3d9.d3d9_GetAdapterIdentifier * d3d9.d3d9_GetDeviceCaps (SM support/version) * user32.EnumDisplayDevicesA * WMI 'Win32_VideoController' class 'PNPDeviceID' and 'AdapterRAM' properties
One of the encrypted PAK files, 'Engine.pak' contains per-vendor graphics card "database" files.
You can decrypt/unpack the .PAK file with Luigi Auriemmas 'quickbms' tool (http://aluigi.altervista.org/quickbms.htm) and a small Crysis2 bms script containing Crysis2 retail decryption key. Search the net, it can be found easily.
The interesting files are:
--- snip --- Config/gpu/amd.txt Config/gpu/intel.txt Config/gpu/nvidia.txt --- snip ---
The file content looks like this:
# vendor id, device ID, score, comment
--- snip --- 0x10DE, 0x0040,-1 // GeForce 6800 Ultra, GeForce 6800 Ultra/GeForce 6800 Series GPU 0x10DE, 0x0041,-1 // GeForce 6800 0x10DE, 0x0042,-1 // GeForce 6800 LE 0x10DE, 0x0043,-1 // GeForce 6800 XE 0x10DE, 0x0044,-1 // GeForce 6800 XT 0x10DE, 0x0045,-1 // GeForce 6800 GT ... 0x10DE, 0x053E,-1 // GeForce 7025 / nForce 630a 0x10DE, 0x05E0, 3 // GeForce GTX 295 0x10DE, 0x05E1, 2 // GeForce GTX 280 0x10DE, 0x05E2, 2 // GeForce GTX 260 0x10DE, 0x05E3, 3 // GeForce GTX 285 0x10DE, 0x05E6, 2 // GeForce GTX 275 0x10DE, 0x05EA, 2 // GeForce GTX 260 0x10DE, 0x05EB, 3 // GeForce GTX 295 0x10DE, 0x0600, 1 // GeForce 8800 GTS 512 ... 0x10DE, 0x0DE1, 2 // GeForce GT 430 0x10DE, 0x0DE2, 2 // GeForce GT 420 0x10DE, 0x0E22, 3 // GeForce GTX 460 0x10DE, 0x0E23, 3 // GeForce GTX 460 SE 0x10DE, 0x0E24, 3 // GeForce GTX 460 0x10DE, 0x1080, 3 // GeForce GTX 580 0x10DE, 0x1081, 3 // GeForce GTX 570 0x10DE, 0x1086, 3 // GeForce GTX 570 0x10DE, 0x10C0,-1 // GeForce 9300 GS 0x10DE, 0x10C3,-1 // GeForce 8400GS 0x10DE, 0x1200, 3 // GeForce GTX 560 Ti ... --- snip ---
The score is calculated by adding and deducting points.
* base score from PCI vendor database file (or 0 if not found) * SM < v3.0 = -1 point deduction ...
Some reports from Windows users (you can find many more):
--- snip --- Unsupported GPU configuration! - NVIDIA GeForce GTX 580 (vendor = 0x10de, device = 0x1080) - Video memory: 0 MB - Minimum SM 3.0 support: yes - Rating: 4 Asking user if they wish to continue... --- snip ---
--- snip --- Unsupported GPU configuration! - NVIDIA GeForce GTX 680 (vendor = 0x10de, device = 0x1180) - Video memory: 0 MB - Minimum SM 3.0 support: yes - Rating: 0 Asking user if they wish to continue... --- snip ---
--- snip --- Unsupported GPU configuration! - NVIDIA GeForce 9400M (vendor = 0x10de, device = 0x0866) - Video memory: 0 MB - Minimum SM 3.0 support: yes - Rating: -1 Asking user if they wish to continue... --- snip ---
--- snip --- Unsupported GPU configuration! - Intel(R) G41 Express Chipset (vendor = 0x8086, device = 0x2e32) - Video memory: 1024 MB - Minimum SM 3.0 support: yes - Rating: -1 --- snip ---
'Video memory' is the culprit here. The value ought to be retrieved using WMI 'Win32_VideoController' class, 'AdapterRAM' property.
Unfortunately the engine code is bugged. Interestingly they put some effort in disguising/obfuscating gfx/d3d engine code. They should have really spent their time on fixing bugs...
The code _skips_ the retrieval of video adapter RAM value if it finds a non-zero PNPDeviceID (compares a builtin "NULL" one against WMI).
--- snip --- 0019680C UNICODE "PCI\VEN_10DE&DEV_0191&SUBSYS_00000000&REV_00\0&DEADBEEF&0&DEAD" ; WMI retrieved
09ECF984 UNICODE "PCI\VEN_0000&DEV_0000" ; engine builtin string literal --- snip ---
Complain to the vendor.
@killer:
--- quote --- i can confirm this problem, 1.7.4 did work, some later didnt (havent done a regression test). --- quote ---
Don't confuse different issues. This bug is about the startup message, not some recent regression. I checked this with Wine 1.7.4 and the message is obviously present there too for the technical reason I explained earlier.
Create a new bug for the regression and be sure to provide the actual commit that broke it.
Regards