aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llfeaturemanager.cpp
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:44:50 -0500
committerJacek Antonelli2008-08-15 23:44:50 -0500
commit89fe5dab825a62a0e3fd8d248cbc91c65eb2a426 (patch)
treebcff14b7888d04a2fec799c59369f6095224bd08 /linden/indra/newview/llfeaturemanager.cpp
parentSecond Life viewer sources 1.13.3.2 (diff)
downloadmeta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.zip
meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.gz
meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.bz2
meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.xz
Second Life viewer sources 1.14.0.0
Diffstat (limited to 'linden/indra/newview/llfeaturemanager.cpp')
-rw-r--r--linden/indra/newview/llfeaturemanager.cpp343
1 files changed, 23 insertions, 320 deletions
diff --git a/linden/indra/newview/llfeaturemanager.cpp b/linden/indra/newview/llfeaturemanager.cpp
index 061b343..c0fd96b 100644
--- a/linden/indra/newview/llfeaturemanager.cpp
+++ b/linden/indra/newview/llfeaturemanager.cpp
@@ -156,7 +156,7 @@ BOOL LLFeatureList::maskList(LLFeatureList &mask)
156 } 156 }
157 157
158#if 0 && !LL_RELEASE_FOR_DOWNLOAD 158#if 0 && !LL_RELEASE_FOR_DOWNLOAD
159 llinfos << "After appling mask " << mask.mName << llendl; 159 llinfos << "After applying mask " << mask.mName << llendl;
160 dump(); 160 dump();
161#endif 161#endif
162 return TRUE; 162 return TRUE;
@@ -208,12 +208,12 @@ BOOL LLFeatureManager::loadFeatureTables()
208 data_path += FEATURE_TABLE_FILENAME; 208 data_path += FEATURE_TABLE_FILENAME;
209 209
210 210
211 char name[MAX_STRING+1]; 211 char name[MAX_STRING+1]; /*Flawfinder: ignore*/
212 212
213 llifstream file; 213 llifstream file;
214 U32 version; 214 U32 version;
215 215
216 file.open(data_path.c_str()); 216 file.open(data_path.c_str()); /*Flawfinder: ignore*/
217 217
218 if (!file) 218 if (!file)
219 { 219 {
@@ -235,12 +235,12 @@ BOOL LLFeatureManager::loadFeatureTables()
235 LLFeatureList *flp = NULL; 235 LLFeatureList *flp = NULL;
236 while (!file.eof()) 236 while (!file.eof())
237 { 237 {
238 char buffer[MAX_STRING]; 238 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
239 name[0] = 0; 239 name[0] = 0;
240 240
241 file >> name; 241 file >> name;
242 242
243 if (strlen(name) >= 2 && 243 if (strlen(name) >= 2 && /*Flawfinder: ignore*/
244 name[0] == '/' && 244 name[0] == '/' &&
245 name[1] == '/') 245 name[1] == '/')
246 { 246 {
@@ -249,7 +249,7 @@ BOOL LLFeatureManager::loadFeatureTables()
249 continue; 249 continue;
250 } 250 }
251 251
252 if (strlen(name) == 0) 252 if (strlen(name) == 0) /*Flawfinder: ignore*/
253 { 253 {
254 // This is a blank line 254 // This is a blank line
255 file.getline(buffer, MAX_STRING); 255 file.getline(buffer, MAX_STRING);
@@ -295,7 +295,6 @@ BOOL LLFeatureManager::loadFeatureTables()
295 } 295 }
296 } 296 }
297 file.close(); 297 file.close();
298 //flp->dump();
299 298
300 return TRUE; 299 return TRUE;
301} 300}
@@ -314,7 +313,7 @@ void LLFeatureManager::loadGPUClass()
314 313
315 llifstream file; 314 llifstream file;
316 315
317 file.open(data_path.c_str()); 316 file.open(data_path.c_str()); /*Flawfinder: ignore*/
318 317
319 if (!file) 318 if (!file)
320 { 319 {
@@ -330,12 +329,12 @@ void LLFeatureManager::loadGPUClass()
330 329
331 while (!file.eof()) 330 while (!file.eof())
332 { 331 {
333 char buffer[MAX_STRING]; 332 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
334 buffer[0] = 0; 333 buffer[0] = 0;
335 334
336 file.getline(buffer, MAX_STRING); 335 file.getline(buffer, MAX_STRING);
337 336
338 if (strlen(buffer) >= 2 && 337 if (strlen(buffer) >= 2 && /*Flawfinder: ignore*/
339 buffer[0] == '/' && 338 buffer[0] == '/' &&
340 buffer[1] == '/') 339 buffer[1] == '/')
341 { 340 {
@@ -343,7 +342,7 @@ void LLFeatureManager::loadGPUClass()
343 continue; 342 continue;
344 } 343 }
345 344
346 if (strlen(buffer) == 0) 345 if (strlen(buffer) == 0) /*Flawfinder: ignore*/
347 { 346 {
348 // This is a blank line 347 // This is a blank line
349 continue; 348 continue;
@@ -360,7 +359,7 @@ void LLFeatureManager::loadGPUClass()
360 continue; 359 continue;
361 } 360 }
362 361
363 for (U32 i = 0; i < strlen(expr); i++) 362 for (U32 i = 0; i < strlen(expr); i++) /*Flawfinder: ignore*/
364 { 363 {
365 expr[i] = tolower(expr[i]); 364 expr[i] = tolower(expr[i]);
366 } 365 }
@@ -380,10 +379,11 @@ void LLFeatureManager::loadGPUClass()
380 llinfos << "GPU is " << label << llendl; 379 llinfos << "GPU is " << label << llendl;
381 mGPUString = label; 380 mGPUString = label;
382 mGPUClass = (S32) strtol(cls, NULL, 10); 381 mGPUClass = (S32) strtol(cls, NULL, 10);
382 file.close();
383 return;
383 } 384 }
384 } 385 }
385 file.close(); 386 file.close();
386 //flp->dump();
387 387
388 llwarns << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << llendl; 388 llwarns << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << llendl;
389} 389}
@@ -401,11 +401,7 @@ void LLFeatureManager::initCPUFeatureMasks()
401 { 401 {
402 maskFeatures("RAM256MB"); 402 maskFeatures("RAM256MB");
403 } 403 }
404 else if (gSysMemory.getPhysicalMemory() <= 512*1024*1024) 404
405 {
406 //maskFeatures("RAM512MB");
407 }
408
409 if (gSysCPU.getMhz() < 1100) 405 if (gSysCPU.getMhz() < 1100)
410 { 406 {
411 maskFeatures("CPUSlow"); 407 maskFeatures("CPUSlow");
@@ -468,7 +464,11 @@ void LLFeatureManager::initGraphicsFeatureMasks()
468 } 464 }
469 if (gGLManager.mIsIntel) 465 if (gGLManager.mIsIntel)
470 { 466 {
471 maskFeatures("Brookdale"); 467 maskFeatures("Intel");
468 }
469 if (gGLManager.mGLVersion < 1.5f)
470 {
471 maskFeatures("OpenGLPre15");
472 } 472 }
473 473
474 if (gGLManager.mIsMobilityRadeon9000) 474 if (gGLManager.mIsMobilityRadeon9000)
@@ -483,303 +483,6 @@ void LLFeatureManager::initGraphicsFeatureMasks()
483 483
484extern LLOSInfo gSysOS; 484extern LLOSInfo gSysOS;
485 485
486
487BOOL bad_hardware_dialog(const LLString &info_str, const LLString &url)
488{
489 if (!gSavedSettings.getWarning("AboutBadPCI"))
490 {
491 return FALSE;
492 }
493
494 // XUI:translate
495 std::string msg = llformat(
496 "[SECOND_LIFE] has detected that there may be a problem with.\n"
497 "hardware or drivers on your computer. Often resolving these\n"
498 "issues can result in enhanced stability and performance.\n"
499 " \n"
500 "%s\n"
501 " \n"
502 "Would you like to view a web page with more detailed\n"
503 "information on this problem?\n", info_str.c_str());
504
505 // Warn them that runnin without DirectX 9 will
506 // not allow us to tell them about driver issues
507 S32 button = OSMessageBox(msg.c_str(),
508 "Warning",
509 OSMB_YESNO);
510 if (OSBTN_YES== button)
511 {
512 llinfos << "User quitting after detecting bad drivers" << llendl;
513 spawn_web_browser(url.c_str());
514 return TRUE;
515 }
516 else
517 {
518 // Don't warn about bad PCI stuff again, they've clicked past it.
519 gSavedSettings.setWarning("AboutBadPCI", FALSE);
520 }
521 return FALSE;
522}
523
524BOOL LLFeatureManager::initPCIFeatureMasks()
525{
526#if LL_WINDOWS
527 BOOL exit_after_bad = FALSE;
528
529 BOOL is_2000 = FALSE;
530 BOOL is_xp = FALSE;
531
532 if (gSysOS.mMajorVer != 5)
533 {
534 // Unknown windows version number, exit!"
535 llwarns << "Unknown Windows major version " << gSysOS.mMajorVer << ", aborting detection!" << llendl;
536 return FALSE;
537 }
538 if (gSysOS.mMinorVer == 0)
539 {
540 is_2000 = TRUE;
541 }
542 else if (gSysOS.mMinorVer == 1)
543 {
544 is_xp = TRUE;
545 }
546 else
547 {
548 llwarns << "Unknown Windows minor version " << gSysOS.mMinorVer << ", aborting detection!" << llendl;
549 return FALSE;
550 }
551
552 // This only works on Win32, as it relies on DX9 hardware detection
553 // The PCI masks are actually the inverse of the normal masks
554 // We actually look through the masks,and see if any hardware matches it.
555 // This is because the masks encode logic about
556
557 // Check for the broken AMD AGP controllers (751, 761, 762)
558
559 // Horrible cruddy fixed lookup table.
560 // Figure out what OS we're on, the version numbers are different. Sigh...
561
562 LLDXDriverFile *dfilep = NULL;
563 LLDXDevice *devp = NULL;
564
565 // AMD(1022) AGP controllers
566 // 7007 AMD-751 AGP Controller
567 // 700F AMD-761 AGP Controller
568 // 700D AMD-762 AGP Controller
569 devp = gDXHardware.findDevice("VEN_1022", "DEV_7007|DEV_700F|DEV_700D");
570 if (devp)
571 {
572 // We're just pretty much screwed here, there are big problems with this hardware
573 // We've got trouble with the most recent nVidia drivers. Check for this and warn.
574
575 // Note: Need to detect that we're running with older nVidia hardware, probably
576 exit_after_bad |= bad_hardware_dialog("AMD AGP Controller",
577 AMD_AGP_URL);
578 }
579
580 // VIA(1106) AGP Controllers
581 // These need upgrading on both Win2K and WinXP
582 //
583 // 8305 VT8363/8365 CPU to AGP - Apollo KT133/KM133
584 // 8598 VT82C598MVP/694X CPU to AGP - Apollo MVP3/Pro133A
585 // 8605 VT8605 CPU to AGP - Apollo PM133
586 // B091 VT8633 CPU to AGP - Apollo Pro 266
587 // B099 VT8366/A/T CPU to AGP - Apollo KT266/A/333
588 // B168 VT8235 CPU to AGP (AGP 2.0/3.0) - ProSavageDDR P4X333 chipset
589 // B188 VT8237 CPU to AGP (AGP 2.0/3.0) - K8T800
590 // B198 VT8237 CPU to AGP (AGP 2.0/3.0) - ProSavageDDR P4X600 chipset
591
592 devp = gDXHardware.findDevice("VEN_1106",
593 "DEV_8305|DEV_8598|DEV_8605|DEV_B091|"
594 "DEV_B099|DEV_B168|DEV_B188|DEV_B198");
595 if (devp)
596 {
597 BOOL out_of_date = FALSE;
598 // Wanted driver: VIAAGP1.SYS
599 // Version Format: M.mm.0000.vvvv
600 // M.mm - Major/minor OS version (5.0 for Win2000, 5.1 for WinXP)
601 // vvvv - driver version number
602 //
603 // Notes:
604 // 3442 is most recent as of 2/25/04, probably want at least 3430 (seems to be a common version)
605
606 // These are DELIBERATE assignments inside if statements, blech.
607 if (dfilep = devp->findDriver("pci.sys"))
608 {
609 // Old driver: pci.sys
610 // Version: 5.01.2600.xxxx
611 //
612 // Notes:
613 // Default WinXP driver for B168, B198?
614
615 // Old driver: pci.sys
616 // Version: 5.01.2195.xxxx
617 //
618 // Notes:
619 // Default Win2K driver for 8305?
620
621 llwarns << "Detected pci.sys" << llendl;
622 write_debug("Old driver (pci.sys) for VIA detected!");
623 out_of_date = TRUE;
624 }
625 else if (dfilep = devp->findDriver("VIAAGP.SYS"))
626 {
627 // Old driver: VIAAGP.SYS
628 // Version: 5.01.2600.xxxx
629 //
630 // Notes:
631 // Default WinXP driver for B09x?
632
633 llwarns << "Detected VIAAGP.SYS" << llendl;
634 write_debug("Old driver (VIAAGP.SYS) for VIA detected!");
635 out_of_date = TRUE;
636 }
637 else if (dfilep = devp->findDriver("VIAAGP1.SYS"))
638 {
639 if (dfilep->mVersion.getField(3) < 3430)
640 {
641 // They're using a pretty old version of the VIA AGP drivers
642 // Maybe they want to upgrade?
643 llwarns << "Detected VIAAGP1.SYS" << llendl;
644 write_debug("Old driver (VIAAGP1.SYS) for VIA detected!");
645 out_of_date = TRUE;
646 }
647 }
648 if (out_of_date)
649 {
650 exit_after_bad |= bad_hardware_dialog("Out of date VIA AGP chipset driver",
651 VIA_URL);
652 }
653 }
654
655 // Intel(8086) AGP controllers (Win2K)
656 // These particular controllers only may need drivers on Win2K
657 //
658 // 1A31 82845[MP|MZ] Processor to AGP Controller
659 // 2532 82850/860 Processor to AGP Controller
660 if (is_2000)
661 {
662 devp = gDXHardware.findDevice("VEN_8086",
663 "DEV_1A31");
664 if (devp)
665 {
666 if (dfilep = devp->findDriver("pci.sys"))
667 {
668 // Old driver: pci.sys
669 // Version 5.01.21[9|6]5.xxxx
670 //
671 // Notes:
672 // Default driver for Win2K? Not sure what the "correct" driver is -
673 // maybe some variant of AGP440.SYS?
674 llwarns << "Detected pci.sys" << llendl;
675 write_debug("Old driver (pci.sys) for Intel 82845/850 on Win2K detected!");
676 exit_after_bad |= bad_hardware_dialog("Out of date Intel chipset driver",
677 INTEL_CHIPSET_URL);
678 }
679 }
680 }
681
682 /* Removed 4/3/2006 by JC
683 After talking with Doug, we don't know what the proper driver
684 and/or version number should be for Intel 865. Regardless, this
685 code would _always_ complain if you had that chipset.
686
687 // Intel(8086) AGP controllers (All)
688 // These particular controllers may need drivers on both Win2K and WinXP
689 //
690 // 2561 82845G/GL/GE/PE/GV Processor to AGP Controller
691 // 2571 82865G/PE/P/GV/28248P Processor to AGP Controller
692 devp = gDXHardware.findDevice("VEN_8086",
693 "DEV_2571");
694 if (devp)
695 {
696 // Wanted driver: AGP440.SYS(?)
697 //
698 // Notes:
699 // Not sure, need to verify with an actual 82865/75 (Dell 8300?)
700
701 // Old driver: pci.sys
702 // Version 5.01.21[9|6]5.xxxx
703 //
704 // Notes:
705 // Default driver for Win2K? Not sure what the "correct" driver is -
706 // maybe some variant of AGP440.SYS?
707 exit_after_bad |= bad_hardware_dialog("Out of date Intel chipset driver",
708 INTEL_CHIPSET_URL);
709 }
710 */
711
712
713 // SiS(1039) AGP controllers (All)
714 // These particular controllers may need drivers on both Win2K and WinXP
715 //
716 // 0001 SiS 530
717 // 0002 SiS SG86C202(???)
718 // 0003 SiS 648FX
719 devp = gDXHardware.findDevice("VEN_1039",
720 "DEV_0001|DEV_0002|DEV_0003");
721 if (devp)
722 {
723 BOOL out_of_date = FALSE;
724 // Wanted driver: SISAGPX.SYS
725 //
726 // Notes:
727 // Not sure, need to verify with an actual 82865/75 (Dell 8300?)
728
729 // Old driver: pci.sys
730 // Version 5.01.21[9|6]5.xxxx
731 //
732 // Notes:
733 // Default driver for Win2K? Not sure what the "correct" driver is -
734 // maybe some variant of AGP440.SYS?
735 if (dfilep = devp->findDriver("pci.sys"))
736 {
737 // Old driver: pci.sys
738 // Version 5.01.21[9|6]5.xxxx
739 //
740 llwarns << "Detected pci.sys" << llendl;
741 write_debug("Old driver (pci.sys) for SiS detected!");
742 out_of_date = TRUE;
743 }
744
745 if (dfilep = devp->findDriver("sisagp.sys"))
746 {
747 // Old driver: pci.sys
748 // Version 5.01.21[9|6]5.xxxx
749 //
750 llwarns << "Detected sisagp.sys" << llendl;
751 write_debug("Old driver (sisagp.sys) for SiS detected!");
752 out_of_date = TRUE;
753 }
754
755 if (dfilep = devp->findDriver("sisagpx.sys"))
756 {
757 // Old driver: pci.sys
758 // Version 7.02.0000.xxxx
759 //
760 // Notes:
761 // Default driver for Win2K? Not sure what the "correct" driver is -
762 // maybe some variant of AGP440.SYS?
763 if (dfilep->mVersion.getField(3) < 1160)
764 {
765 out_of_date = TRUE;
766 llwarns << "Detected sisagpx.sys" << llendl;
767 write_debug("Old driver (sisagpx.sys) for SiS detected!");
768 }
769 }
770 if (out_of_date)
771 {
772 exit_after_bad |= bad_hardware_dialog("Out of date SiS chipset driver",
773 SIS_CHIPSET_URL);
774 }
775 }
776
777 return exit_after_bad;
778#else
779 return TRUE;
780#endif
781}
782
783void LLFeatureManager::applyRecommendedFeatures() 486void LLFeatureManager::applyRecommendedFeatures()
784{ 487{
785 // see featuretable.txt 488 // see featuretable.txt
@@ -789,14 +492,14 @@ void LLFeatureManager::applyRecommendedFeatures()
789 dump(); 492 dump();
790#endif 493#endif
791 494
792 // Enabling AGP 495 // Enabling VBO
793 if (getRecommendedLevel("RenderAGP")) 496 if (getRecommendedLevel("RenderVBO"))
794 { 497 {
795 gSavedSettings.setBOOL("RenderUseAGP", TRUE); 498 gSavedSettings.setBOOL("RenderVBOEnable", TRUE);
796 } 499 }
797 else 500 else
798 { 501 {
799 gSavedSettings.setBOOL("RenderUseAGP", FALSE); 502 gSavedSettings.setBOOL("RenderVBOEnable", FALSE);
800 } 503 }
801 504
802 // Anisotropic rendering 505 // Anisotropic rendering