void hsG3DDeviceSelector::IFudgeDirectXDevice( hsG3DDeviceRecord &record, D3DEnum_DriverInfo *driverInfo, D3DEnum_DeviceInfo *deviceInfo ) { uint32_t vendorID, deviceID; char *szDriver, *szDesc; /// Send it off to each D3D device, respectively if( record.GetG3DDeviceType() == kDevTypeDirect3D ) { if( !IGetD3DCardInfo( record, driverInfo, deviceInfo, &vendorID, &deviceID, &szDriver, &szDesc ) ) { // {} to make VC6 happy in release build hsAssert( false, "Trying to fudge D3D device but D3D support isn't in this EXE!" ); } } else { hsAssert( false, "IFudgeDirectXDevice got a device type that support wasn't compiled for!" ); } /// So capitalization won't matter in our tests plString desc = plString::FromIso8859_1(szDesc).ToLower(); /// Detect ATI Radeon chipset // We will probably need to differentiate between different Radeons at some point in // the future, but not now. ssize_t radeon = desc.Find("radeon"); if (stricmp(szDriver, "ati2dvag.dll") == 0 || radeon >= 0) { int series = 0; if (radeon >= 0) { const char* str = desc.c_str() + radeon + strlen("radeon"); if( 1 == sscanf(str, "%d", &series) ) { if( (series >= 8000) && (series < 9000) ) { hsStatusMessage( "== Using fudge factors for ATI Radeon 8X00 chipset ==\n" ); ISetFudgeFactors( kATIR8X00Chipset, record ); } else if (series >= 9000) { hsStatusMessage("== Using fudge factors for ATI Radeon 9X00 chipset ==\n"); ISetFudgeFactors(kATIRadeonChipset, record); } else { series = 0; } } } if (series == 0) { hsStatusMessage("== Using fudge factors for ATI/AMD Radeon X/HD/R chipset ==\n"); ISetFudgeFactors(kDefaultChipset, record); } } //// Other Cards ////////////////////////////////////////////////////////// /// Detect Intel i810 chipset else if( deviceID == 0x00007125 && ( stricmp( szDriver, "i81xdd.dll" ) == 0 || ( desc.Find("intel") >= 0 && desc.Find("810") >= 0 ) ) ) { hsStatusMessage( "== Using fudge factors for an Intel i810 chipset ==\n" ); ISetFudgeFactors( kIntelI810Chipset, record ); } /// Detect for a GeForc FX card. We only need to nerf the really low end one. else if( desc.Find("nvidia") >= 0 && desc.Find("geforce fx 5200") >= 0 ) { hsStatusMessage( "== Using fudge factors for an NVidia GeForceFX-based chipset ==\n" ); ISetFudgeFactors( kNVidiaGeForceFXChipset, record ); } /// Default fudge values else { hsStatusMessage( "== Using default fudge factors ==\n" ); ISetFudgeFactors( kDefaultChipset, record ); } }