############################################################################# # # Logging settings # set logGroup "ConfigurationManager" set logLevelWarning warning set logLevelInfo info set logLevelDebug debug log $logGroup $logLevelInfo "Parsing configuration script" ############################################################################# # # Constants # seti Off 0 seti On 1 seti Low 1 seti Medium 2 seti High 3 seti memoryLevelHigh 512 seti memoryLevelMedium 256 seti memoryLevelLow 128 seti memoryLevelUnknown 0 seti cpuLevelHigh 1800 seti cpuLevelMedium 1200 seti cpuLevelLow 600 seti cpuLevelUnsupported 0 ############################################################################# # # Identify gfx device # # set some config variables based on a card table and vendor specific rules # sets isCardFound, cardVendor, and cardName include "Video Cards.sgr" # Fallback on the card name text supplied by the card itself. # Assumes that at least the cardVendor has been matched, since # vendor name is not contained in some vendor card names. # Note that specific vendors are overridden to a default card. # For ATI -> Radeon 9800 Pro # For NVIDIA -> NVIDIA 4800 TI SE if (not $isCardFound) set cardName $cardNameText endif ############################################################################# # # Configuration override controlled by command line option -cardConfig. # if (varExists(cardConfig)) # test unsupported cards using sw rendering if ($cardConfig = 1) log $logGroup $logLevelInfo "Testing with all devices unsupported." set cardVendor TestingAllUnsupported set cardName TestingAllUnsupported elseif (($cardConfig = 2) and ($deviceNumber = 0)) log $logGroup $logLevelInfo "Testing with the first device unsupported." set cardVendor TestingFirstUnsupported set cardName TestingFirstUnsupported elseif (($cardConfig = 3) and ($deviceNumber != 0)) log $logGroup $logLevelInfo "Testing with the all devices except first unsupported." set cardVendor TestingAllButFirstUnsupported set cardName TestingAllButFirstUnsupported elseif (($cardConfig = 100) and ($deviceNumber = 0)) log $logGroup $logLevelInfo "Testing first device as swvp only part." boolProp forceSoftwareVP true endif endif ############################################################################# # # Determine if gfx device is supported, force software rendering if not # setb useSoftwareRasterizer false if (match("${cardVendor}", "ATI")) if (match("${cardName}", "*Mach*") or match("${cardName}", "*Rage*")) setb useSoftwareRasterizer true endif elseif (match("${cardVendor}", "NVidia")) if (match("${cardName}", "NV 1") or match("${cardName}", "NV 2") or match("${cardName}", "*Riva*") or match("${cardName}", "*TNT*")) setb useSoftwareRasterizer true endif elseif (match("${cardVendor}", "Intel")) if (match("${cardName}", "*810*") or match("${cardName}", "*815*") or match("${cardName}", "*740*") or match("${cardName}", "*752*")) setb useSoftwareRasterizer true endif else # unsupported/unknown vendor setb useSoftwareRasterizer true endif if ($useSoftwareRasterizer) log $logGroup $logLevelWarning "Unsupported video card. Forcing software rendering on this device" else log $logGroup $logLevelInfo "Supported video card." endif if (not $useSoftwareRasterizer) # failed to obtain device texture memory size, force to 32MB if ($textureMemory = 0) seti textureMemory 32 setb textureMemorySizeOK false endif if ($textureMemory < 28) log $logGroup $logLevelWarning "Insufficient video memory. Forcing software rendering on this device" # require a card with at least 32MB setb useSoftwareRasterizer true endif endif if ($useSoftwareRasterizer) # ignore texture memory reported by gfx device, this is not hardware texture memory seti textureMemory 32 endif if (not $useSoftwareRasterizer) log $logGroup $logLevelInfo "Hardware rendering is enabled" endif ############################################################################# # # Apply gfx device specific workarounds # # Available device props: # forceSoftwareVP # forceSoftwareDevice # queriesOK # windowedModeFormatConversionOK # enumerateMultisampleLevels # skipValidateDevice # enableDriverMemoryManager # softwareDeviceLocalVideoMemorySize # deviceLocalVideoMemorySizeDefault # disableVSyncSupport # substituteFlipForDiscardSwapEffect # minTextureDimensionForBalance # # Additional props: # vs2LoopsFunctional setb textureMemorySizeOK true setb supportsDirtyRect true setb supportsTurboRect true setb supportsSpecialEventCamera true setb forceLowSettings false setb forceLowResolution false boolProp useRenderTextures false uintProp antialiasingSupport 1 if (not $useSoftwareRasterizer) # never trust the driver to manage its own memory boolProp enableDriverMemoryManager false boolProp vs2LoopsFunctional false boolProp presentWorkaround false boolProp enumerateMultisampleLevels true # not enough texture memory for antialiasing if ($textureMemory < 127) boolProp enumerateMultisampleLevels false endif if (match("${cardVendor}", "NVIDIA")) boolProp vs2LoopsFunctional true # on NVidia cards, create a dummy texture on device creation to prevent BSODs boolProp createNVidiaWorkaroundTexture true if ($appControlledAA) # nvidia drivers handle offscreen aa uintProp antialiasingSupport 3 else # remove this when the texture manager balancing is fixed. boolProp disableTexMemEstimateAdjustment true # turn off dirty rects uintProp antialiasingSupport 1 setb supportsDirtyRect false endif if (match("${cardName}", "*GeForce2*Integrated*") or match("${cardName}", "*GeForce?2*Integrated*") or match("${cardName}", "*GeForce4*Integrated*") or match("${cardName}", "*GeForce?4*Integrated*")) boolProp causticsEnabled false boolProp enumerateMultisampleLevels false setb forceLowSettings true setb forceLowResolution true endif # disable shaders by default for NV3x generation, only enable for high end cards if ($maxVertexProgramVersionHWMajor = 2) boolProp useShaders false if (match("${cardName}", "GeForceFX*") or match("${cardName}", "*GeForce?FX*")) if (match("${cardName}", "*57?0*") or match("${cardName}", "*58?0*") or match("${cardName}", "*59?0*")) boolProp useShaders true log $logGroup $logLevelInfo "Enabling shaders for high-end NV3x" endif if (match("${cardName}", "*NV35*") or match("${cardName}", "*NV36*") or match("${cardName}", "*NV38*") or match("${cardName}", "*NV39*")) boolProp useShaders true log $logGroup $logLevelInfo "Enabling shaders for high-end NV3x" endif endif if (match("${cardName}", "QuadroFX*") or match("${cardName}", "*Quadro?FX*")) if (match("${cardName}", "*3000*") or match("${cardName}", "*1100*")) boolProp useShaders true log $logGroup $logLevelInfo "Enabling shaders for high-end NV3x Quadro" endif endif # caps read vs 3.0, but dx9b is returning vs 2.0, once 9c is used this fix can be removed if (match("${cardName}", "*GeForce*")) if (match("${cardName}", "*68?0*")) boolProp useShaders true log $logGroup $logLevelInfo "Enabling shaders for high-end NV40 Parts on Dx9b" endif endif endif if ($driverBuild <= 5216) # turn off antialiasing to avoid BSODs on older drivers boolProp enumerateMultisampleLevels false log $logGroup $logLevelInfo "Driver is too old. Disabling AA on this device." endif if (($driverBuild < 5212) and ($maxPixelProgramVersionMajor < 2)) # turn off cinematics on older drivers with DX8 cards to avoid failed copies setb supportsSpecialEventCamera false log $logGroup $logLevelInfo "Driver is too old. Disabling SpecialEventCameras on this device." endif if ($maxVertexProgramVersionHWMajor = 0) boolProp skipValidateDevice true log $logGroup $logLevelInfo "Enabling D3DERR_CONFLICTINGRENDERSTATE validation workaround" endif if ($driverBuild > 5216 and $driverBuild < 6176) # force SWVP on 2D vertex shader to work around UI and shadow rendering # bugs; known to occur on GeForce4, Quadro4, and FX5200 on driver versions # 56.56 and 56.72; known not to occur with FX5800+ or with 52.16 or # 61.76 drivers. boolProp draw2DForceSWVP true endif elseif (match("${cardVendor}", "ATI")) # loops support broken in 6458. Fixed in catalyst 4.9 (6476) but we require 4.10 to be safe. if ($driverBuild >= 6476) boolProp vs2LoopsFunctional true endif # workaround for forced aa crash as of 6458. Fixed in catalyst 4.9 (6476) but we require 4.10 to be safe. # TODO: this is not yet enabled, pending testing #if ($driverBuild < 6476) boolProp useRenderTextures true #endif # avoid a race condition with color copies and ui boolProp presentWorkaround true if (match("${cardName}", "*Radeon?VE*") or match("${cardName}", "*7?00*") or match("${cardName}", "*R100*") or match("${cardName}", "*IGP 3?0*")) log $logGroup $logLevelInfo "Forcing turbo rects off" setb supportsTurboRect false boolProp simpleTerrain true boolProp causticsEnabled false boolProp enumerateMultisampleLevels false setb forceLowSettings true if (match("${cardName}", "*Radeon?VE*") or $driverBuild < 6414) log $logGroup $logLevelInfo "Forcing swvp" boolProp forceSoftwareVP true endif endif if ($maxVertexProgramVersionHWMajor < 2) # Radeon 8500 and greater have problems switching between FF and VS? log $logGroup $logLevelInfo "Forcing shaders of for ATI DX8" boolProp useShaders false endif elseif (match("${cardVendor}", "Intel")) boolProp simpleTerrain true boolProp enumerateMultisampleLevels false boolProp disableVSyncSupport true # work around flickering UI # the Intel minspec driver doesn't misreport available texture memory, so it's not # necessary to adjust the texture memory estimate it returns. This may also fix # a Windows "device failure" message that occurs sometimes on this device. boolProp disableTexMemEstimateAdjustment true # assuming Intel parts are UMA, drop the texture memory to 32 if not much system memory if ($memory <= $memoryLevelLow) if ($textureMemory > 32) seti textureMemory 32 endif endif if (match("${cardName}", "*845*") or match("${cardName}", "*865*") or match("${cardName}", "*830*") or match("${cardName}", "*855*")) boolProp causticsEnabled false setb forceLowSettings true setb forceLowResolution true endif # the 915 sets the caps bit that indicates it can do texture projection, # but does it incorrectly in the pixel stage. Here we override the texture # projection cap we get from the device. if (match("${cardName}", "*915*")) boolProp disableTextureProjection true endif endif intProp deviceLocalVideoMemorySizeDefault ($textureMemory * 1024 * 1024) else setb forceLowSettings true setb forceLowResolution true # force sw, swvp, and no aa boolProp forceSoftwareDevice true boolProp forceSoftwareVP true boolProp enumerateMultisampleLevels false boolProp simpleTerrain true boolProp causticsEnabled false intProp softwareDeviceLocalVideoMemorySize ($textureMemory * 1024 * 1024) endif # since we don't do bumpmapping on less ps2.0-capable hardware, eliminate tangents # from the vertex data # also, the presence of per-vertex tangents in the vertex data stream causes # "exploded" polygons on the Radeon 9000, even if the data is ignored by the shader if ($maxPixelProgramVersionMajor < 2) boolProp skipTangentsInVertexData true endif ############################################################################# # # Print system info # if ($deviceNumber = 0) logSystemInfo "=== Application info ===" logSystemInfo "Name: ${appName}" logSystemInfo "Version: ${version}" logSystemInfo "Build: ${buildType}" logSystemInfo "=== Machine info ===" logSystemInfo "OS version: ${osVersion}" logSystemInfo "CPU: ${cpuSpeed}Mhz, Name:${CPU}, FPU:${FPU}, MMX:${MMX}" logSystemInfo "Memory: ${memory}MB" logSystemInfo "Free memory: ${freeMemory}MB" logSystemInfo "User: ${userName}" logSystemInfo "Computer: ${computerName}" logSystemInfo "=== Sound device info ===" logSystemInfo "Name: ${soundCardName}" logSystemInfo "Driver: ${soundDriverName}" endif logSystemInfo "=== Graphics device info ===" logSystemInfo "Number: ${deviceNumber}" logSystemInfo "Name (driver): ${cardNameText}" if ($isCardFound) logSystemInfo "Name (database): ${cardName}" else logSystemInfo "Name (database): ${cardName} <>" endif logSystemInfo "Vendor: ${cardVendor}" logSystemInfo "Chipset: ${cardChipset}" logSystemInfo "Driver: ${driverName}, Version: ${driverVersion}" logSystemInfo "Driver version: ${driverBuild}" logSystemInfo "Monitor: ${monitorName}" logSystemInfo "Monitor aspect: ${monitorAspect}, ${monitorAspectString}" logSystemInfo "Screen mode: ${screenWidth}x${screenHeight}x${screenBPP}BPP,${screenRefresh}Hz" if ($textureMemorySizeOK) logSystemInfo "Texture memory: ${textureMemory}MB" else logSystemInfo "Texture memory: ${textureMemory}MB <>" endif logSystemInfo "HW T&L: Fixed function:${fixedFunctionHWTnL} Programmable:${maxVertexProgramVersionHWMajor}.${maxVertexProgramVersionHWMinor}" logSystemInfo "Pixel program: ${maxPixelProgramVersionMajor}.${maxPixelProgramVersionMinor}" logSystemInfo "Texture stages: ${textureStages}" logSystemInfo "AppControlledAA: ${appControlledAA}" ############################################################################# # # UI Options log $logGroup $logLevelDebug "Begin parsing option definitions" option MaterialDetail setting $Low boolProp bumpMapping false intProp imageDataSizeReductionOnLoad 2 setting $Medium boolProp bumpMapping false intProp imageDataSizeReductionOnLoad 1 setting $High boolProp bumpMapping true intProp imageDataSizeReductionOnLoad 0 end option ObjectDetail setting $Medium boolProp reduceBoneWeights true boolProp useLODs true intProp lodOverride 35 setting $High boolProp reduceBoneWeights false boolProp useLODs false intProp lodOverride 0 end option ObjectHiding setting $Off intProp renderInsideVisibleObjects 0 setting $On intProp renderInsideVisibleObjects 1 end option Shadows setting $Low boolProp simShadows false boolProp objectShadows false boolProp guob false boolProp heightMapShadows false setting $Medium boolProp simShadows false boolProp objectShadows false boolProp guob true boolProp heightMapShadows true setting $High boolProp simShadows true boolProp objectShadows true boolProp guob true boolProp heightMapShadows true end option OpaqueUI setting $Off boolProp renderOpaqueUI false setting $On boolProp renderOpaqueUI true end option Reflection setting $Off boolProp reflectionWithExtraViewer false boolProp nhoodWaterReflection false setting $On boolProp reflectionWithExtraViewer true boolProp nhoodWaterReflection true end option EffectsQuality setting $Low boolProp useEffects true floatProp particleDensity 1 floatProp particleScale 1 intProp maxParticlesTarget 2000 intProp particleLODOffset 0 # subtracted from the zoom. intProp effectPriorityLevel 1 setting $Medium boolProp useEffects true floatProp particleDensity 1 floatProp particleScale 1 intProp maxParticlesTarget 5000 intProp particleLODOffset 0 # subtracted from the zoom. intProp effectPriorityLevel 2 setting $High boolProp useEffects true floatProp particleDensity 1 floatProp particleScale 1 intProp maxParticlesTarget 10000 intProp particleLODOffset 0 # subtracted from the zoom. intProp effectPriorityLevel 3 end option LightingQuality setting $Low boolProp lightingEnabled true boolProp portalLighting false boolProp floorAndWallNormalMapping false boolProp specHighlights false setting $Medium boolProp lightingEnabled true boolProp portalLighting true boolProp floorAndWallNormalMapping false boolProp specHighlights true setting $High boolProp lightingEnabled true boolProp portalLighting true boolProp floorAndWallNormalMapping true boolProp specHighlights true end option SoundQuality setting $Low intProp AudioPerformance 0 setting $Medium intProp AudioPerformance 1 setting $High intProp AudioPerformance 2 end # # Options without ui access. # option DirtyRect setting $High # no dirty rects intProp dynamicRenderStrategy 0 setting $Medium # 4 buffer mode intProp dynamicRenderStrategy 2 setting $Low # 2 buffer mode intProp dynamicRenderStrategy 1 end option FullscreenFadeEffect setting $Off boolProp enableSnapshot false setting $On boolProp enableSnapshot true end option Turbo setting $High boolProp useTurboRect true setting $Medium boolProp useTurboRect true setting $Low boolProp useTurboRect false end option SimulatorControls setting $High intProp maxNumOfVisitingSims 8 setting $Medium intProp maxNumOfVisitingSims 4 setting $Low intProp maxNumOfVisitingSims 2 end option LightingOptimizations setting $High boolProp optimizedDiffusion true boolProp incrementalLighting true boolProp lerpLights true boolProp useDirtyTiles true end option AnimationSamplingLevel setting $Low # sample nearest animation frame boolProp animationFrameSampling true setting $Medium # sample nearest two animation frames and slerp boolProp animationFrameSampling false end option LivePIP setting $Off boolProp livePIP false boolProp livePIPDefault false setting $On boolProp livePIPDefault true # do not override user's choice if the setting is ON end option SpecialEventCamera setting $Off boolProp chooseCameraSpecialEventEnabled false boolProp CameraSpecialEventEnabled false setting $On boolProp chooseCameraSpecialEventEnabled true # do not override user's choice if the setting is ON end option ScreenModeResolution setting $Low uintProp maxResWidth 800 uintProp maxResHeight 600 uintProp defaultResWidth 800 uintProp defaultResHeight 600 setting $Medium uintProp maxResWidth 1280 uintProp maxResHeight 1024 uintProp defaultResWidth 1024 uintProp defaultResHeight 768 setting $High uintProp maxResWidth 1600 uintProp maxResHeight 1200 uintProp defaultResWidth 1024 uintProp defaultResHeight 768 end log $logGroup $logLevelDebug "Finished parsing option definitions" ############################################################################# # # Hardware Rendering # # This cannot be defined as a local variable, the if clause is still executed when # sw render path is taken and an exception generated that fails the parsing. Be # careful with the use of local variables. if (not $useSoftwareRasterizer) # set a base level of options based on the card rating if (($memory >= $memoryLevelHigh) and ($cpuSpeed >= $cpuLevelHigh) and ($maxVertexProgramVersionHWMajor >= 1) and not $forceLowSettings) log $logGroup $logLevelInfo "Selecting High base level" setOption OpaqueUI $Off setOption LivePIP $On setOption Reflection $On setOption EffectsQuality $High setOption LightingQuality $High setOption Shadows $High setOption MaterialDetail $High setOption ObjectDetail $High setOption ObjectHiding $Off elseif (($memory >= $memoryLevelMedium) and ($cpuSpeed >= $cpuLevelMedium) and ($maxVertexProgramVersionHWMajor >= 1) and not $forceLowSettings) log $logGroup $logLevelInfo "Selecting Medium base level" setOption OpaqueUI $Off setOption LivePIP $On setOption Reflection $Off setOption EffectsQuality $Medium setOption LightingQuality $Medium setOption Shadows $Medium setOption MaterialDetail $Medium setOption ObjectDetail $High setOption ObjectHiding $On else log $logGroup $logLevelInfo "Selecting Low base level" setb forceLowSettings true setOption OpaqueUI $Off setOption LivePIP $Off setOption Reflection $Off setOption EffectsQuality $Low setOption LightingQuality $Low setOption Shadows $Low setOption MaterialDetail $Low setOption ObjectDetail $Medium setOption ObjectHiding $On endif setOption LightingOptimizations $High # adjust simulator based on cpu speed # adjust the sound quality based on cpu speed (this may be overridden below for low-end systems) # adjust animation sampling based on cpu speed if ($cpuSpeed >= $cpuLevelHigh and not $forceLowSettings) setOption SimulatorControls $High setOption SoundQuality $High setOption AnimationSamplingLevel $Medium elseif ($cpuSpeed >= $cpuLevelMedium and not $forceLowSettings) setOption SimulatorControls $Medium setOption SoundQuality $Medium setOption AnimationSamplingLevel $Medium else setOption SimulatorControls $Low setOption SoundQuality $Low setOption AnimationSamplingLevel $Low endif # turn off fullscreen fade setOption FullscreenFadeEffect $Off if ($textureMemory >= 128) setOption FullscreenFadeEffect $On endif # screen res defaults if (($maxVertexProgramVersionHWMajor >= 1) and ($textureMemory >= 128) and not $forceLowResolution) setOption ScreenModeResolution $High elseif ($textureMemory >= 64 and not $forceLowResolution) setOption ScreenModeResolution $Medium else setOption ScreenModeResolution $Low endif # special event cameras for cinematics if (($maxPixelProgramVersionMajor >= 1) and ($supportsSpecialEventCamera)) setOption SpecialEventCamera $On else setOption SpecialEventCamera $Off endif # set dirty rect mode if ($supportsDirtyRect) setOption DirtyRect $Medium else setOption DirtyRect $High endif # set turbo mode if ($supportsTurboRect) setOption Turbo $Medium else setOption Turbo $Low endif endif ############################################################################# # # Software rendering # # set the options for the software rasterizer if ($useSoftwareRasterizer) setOption LightingOptimizations $High setOption DirtyRect $Medium setOption Turbo $Medium setOption OpaqueUI $Off setOption LivePIP $Off setOption SpecialEventCamera $Off setOption Reflection $Off setOption EffectsQuality $Low setOption LightingQuality $Low setOption Shadows $Low setOption MaterialDetail $Low setOption ObjectDetail $Medium setOption ObjectHiding $On # adjust simulator based on cpu speed if ($cpuSpeed >= $cpuLevelHigh) setOption SimulatorControls $Medium # one lower than hw else setOption SimulatorControls $Low endif setOption SoundQuality $Low setOption FullscreenFadeEffect $Off setOption AnimationSamplingLevel $Low setOption ScreenModeResolution $Low endif ############################################################################# # save the selected configuration for this device. boolProp activeDeviceUseSoftwareRasterizer $useSoftwareRasterizer ############################################################################# # tell the caller that we completely finished parsing the script intProp configParserErrorCode 0 log $logGroup $logLevelInfo "Finished Config File"