Anonymous avatar Anonymous committed e4a2d77 Draft Merge

Pull and merge viewer-development

Comments (0)

Files changed (21)

 39c5204b6e800983a41ccac8ad6dc993120197c6 DRTVWR-247
 7c7d57d393e8ae7b61623279de06eb4a62ccae6a DRTVWR-249
 f72b50ef168c159d6e79e97aa2bcafaf8577ab99 DRTVWR-230
+b418be80903520c492e1173f3afbc4021cad5d07 DRTVWR-255
+965b9a35e260c0f53be1a25f0db7abc8a67eaf47 DRTVWR-252
+bb10adc4f76cf0067fca7075146f00cdc0740e9d DRTVWR-251
+ab0aa2f6ba22b52fed30a2337197f589156edc75 DRTVWR-253
+48382ec79741671d19ce4cc3e8cd59e9a521e4a7 DRTVWR-254
+937ec902bb9a1cbceff17bd89e3923352b0a5fbc DRTVWR-256
+44e764a6ac9e672a4f3bce821a4b6a218590c374 DRTVWR-258
+c23d734065ed593b2413385aecd8366d8e0ee96b DRTVWR-257
+452ce96d4046dc05a3ecaecc203e2cc8ddd72e76 DRTVWR-259
+5cba5f39d0a81d659f24ebc4b5efd025a39e3db1 3.4.3-release
+9aa1aa9f1fe13c194695a0b8f0af298296241dc2 DRTVWR-260
 # Limit extent of codeticket updates to revisions after...
 codeticket_since = 3.3.0-release
 
-clean_on_success = false
-run_tests = false
-build_Darwin_Debug = false
-build_Darwin_RelWithDebInfo = false
-    
 # ========================================
-# Viewer Development --
+# Viewer Development
 # ========================================
 
 # Report changes since...

indra/cmake/LLAddBuildTest.cmake

   endif(TEST_DEBUG)
   ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})
   SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}")
-  if (WINDOWS)
-    set_target_properties(INTEGRATION_TEST_${testname}
-      PROPERTIES 
-      LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS"
-      LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"
-      LINK_FLAGS_RELEASE ""
-      )
-  endif(WINDOWS)
 
   if(STANDALONE)
     SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES COMPILE_FLAGS -I"${TUT_INCLUDE_DIR}")
   endif(STANDALONE)
 
+  # The following was copied to llcorehttp/CMakeLists.txt's texture_load target. 
+  # Any changes made here should be replicated there.
   if (WINDOWS)
     SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname}
         PROPERTIES

indra/llcorehttp/CMakeLists.txt

     # The following come from LLAddBuildTest.cmake's INTEGRATION_TEST_xxxx target.
     set_target_properties(http_texture_load
                           PROPERTIES
-                          LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:__tcmalloc"
+                          LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS ${TCMALLOC_LINK_FLAGS}"
                           LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"
                           LINK_FLAGS_RELEASE ""
                           )

indra/llcorehttp/_httpinternal.h

 const int HTTP_TRACE_MAX = HTTP_TRACE_CURL_BODIES;
 
 // Request retry limits
-const int HTTP_RETRY_COUNT_DEFAULT = 5;
+//
+// At a minimum, retries need to extend past any throttling
+// window we're expecting from central services.  In the case
+// of Linden services running through the caps routers, there's
+// a five-second or so window for throttling with some spillover.
+// We want to span a few windows to allow transport to slow
+// after onset of the throttles and then recover without a final
+// failure.  Other systems may need other constants.
+const int HTTP_RETRY_COUNT_DEFAULT = 8;
 const int HTTP_RETRY_COUNT_MIN = 0;
 const int HTTP_RETRY_COUNT_MAX = 100;
 

indra/llcorehttp/examples/http_texture_load.cpp

 //
 int main(int argc, char** argv)
 {
+	LLCore::HttpStatus status;
 	bool do_random(false);
 	bool do_verbose(false);
 	
 	// Initialization
 	init_curl();
 	LLCore::HttpRequest::createService();
+	LLCore::HttpRequest::setPolicyClassOption(LLCore::HttpRequest::DEFAULT_POLICY_ID,
+											  LLCore::HttpRequest::CP_CONNECTION_LIMIT,
+											  concurrency_limit);
 	LLCore::HttpRequest::startThread();
 	
 	// Get service point
 	ws.loadTextureUuids(uuids);
 	ws.mRandomRange = do_random;
 	ws.mVerbose = do_verbose;
-	ws.mMaxConcurrency = concurrency_limit;
+	ws.mMaxConcurrency = 100;
 	
 	if (! ws.mTextures.size())
 	{
Add a comment to this file

indra/llrender/llrendertarget.cpp

File contents unchanged.

Add a comment to this file

indra/llrender/llrendertarget.h

File contents unchanged.

indra/llwindow/llwindowsdl.cpp

 	if (sortpat)
 	{
 		// Sort the list of system fonts from most-to-least-desirable.
+		FcResult result;
 		fs = FcFontSort(NULL, sortpat, elide_unicode_coverage,
-				NULL, NULL);
+				NULL, &result);
 		FcPatternDestroy(sortpat);
 	}
 
Add a comment to this file

indra/newview/app_settings/settings.xml

File contents unchanged.

indra/newview/gpu_table.txt

 ATI ASUS EAH62xx						.*ATI.*ASUS.*EAH62.*					2	1	0	0
 ATI ASUS EAH63xx						.*ATI.*ASUS.*EAH63.*					2	1	0	0
 ATI ASUS EAH64xx						.*ATI.*ASUS.*EAH64.*					2	1	0	0
-ATI ASUS EAH65xx						.*ATI.*ASUS.*EAH65.*					2	1	0	0
-ATI ASUS EAH66xx						.*ATI.*ASUS.*EAH66.*					3	1	0	0
+ATI ASUS EAH65xx						.*ATI.*ASUS.*EAH65.*					2	1	0	4.1
+ATI ASUS EAH66xx						.*ATI.*ASUS.*EAH66.*					3	1	0	4.1
 ATI ASUS EAH67xx						.*ATI.*ASUS.*EAH67.*					3	1	0	0
-ATI ASUS EAH68xx						.*ATI.*ASUS.*EAH68.*					5	1	0	0
-ATI ASUS EAH69xx						.*ATI.*ASUS.*EAH69.*					5	1	0	0
+ATI ASUS EAH68xx						.*ATI.*ASUS.*EAH68.*					5	1	0	4
+ATI ASUS EAH69xx						.*ATI.*ASUS.*EAH69.*					5	1	0	4.1
 ATI ASUS Radeon X1xxx					.*ATI.*ASUS.*X1.*						2	1	1	2.1
 ATI Radeon X7xx							.*ATI.*ASUS.*X7.*						1	1	0	0
 ATI Radeon X19xx						.*ATI.*(Radeon|Diamond) X19.* ?.*		2	1	1	2.1
 ATI Radeon HD 66xx						.*ATI.*AMD Radeon.* HD [67]6..[MG]		3	1	1	4.2
 ATI Radeon HD 7100						.*ATI.*AMD Radeon.* HD 71.*				2	1	0	0
 ATI Radeon HD 7200						.*ATI.*AMD Radeon.* HD 72.*				2	1	0	0
-ATI Radeon HD 7300						.*ATI.*AMD Radeon.* HD 73.*				2	1	0	0
-ATI Radeon HD 7400						.*ATI.*AMD Radeon.* HD 74.*				2	1	0	0
+ATI Radeon HD 7300						.*ATI.*AMD Radeon.* HD 73.*				2	1	0	4.2
+ATI Radeon HD 7400						.*ATI.*AMD Radeon.* HD 74.*				2	1	0	4.2
 ATI Radeon HD 7500						.*ATI.*AMD Radeon.* HD 75.*				3	1	1	4.2
-ATI Radeon HD 7600						.*ATI.*AMD Radeon.* HD 76.*				3	1	0	0
+ATI Radeon HD 7600						.*ATI.*AMD Radeon.* HD 76.*				3	1	0	4.2
 ATI Radeon HD 7700						.*ATI.*AMD Radeon.* HD 77.*				4	1	1	4.2
 ATI Radeon HD 7800						.*ATI.*AMD Radeon.* HD 78.*				5	1	1	4.2
 ATI Radeon HD 7900						.*ATI.*AMD Radeon.* HD 79.*				5	1	1	4.2
+ATI ASUS HD7100							.*ATI.*ASUS.* HD71.*					2	1	0	0
+ATI ASUS HD7200							.*ATI.*ASUS.* HD72.*					2	1	0	0
+ATI ASUS HD7300							.*ATI.*ASUS.* HD73.*					2	1	0	0
+ATI ASUS HD7400							.*ATI.*ASUS.* HD74.*					2	1	0	0
+ATI ASUS HD7500							.*ATI.*ASUS.* HD75.*					3	1	1	4.2
+ATI ASUS HD7600							.*ATI.*ASUS.* HD76.*					3	1	0	0
+ATI ASUS HD7700							.*ATI.*ASUS.* HD77.*					4	1	1	4.2
+ATI ASUS HD7800							.*ATI.*ASUS.* HD78.*					5	1	1	4.2
+ATI ASUS HD7900							.*ATI.*ASUS.* HD79.*					5	1	1	4.2
 ATI Mobility Radeon 4100				.*ATI.*Mobility.*41..					1	1	1	3.3
 ATI Mobility Radeon 7xxx				.*ATI.*Mobility.*Radeon 7.*				0	1	1	1.3
 ATI Mobility Radeon 8xxx				.*ATI.*Mobility.*Radeon 8.*				0	1	0	0
 ATI Radeon HD 3500						.*ATI.*Radeon HD *35..					2	1	0	0
 ATI Radeon HD 3600						.*ATI.*Radeon HD *36..					3	1	1	3.3
 ATI Radeon HD 3700						.*ATI.*Radeon HD *37..					3	1	0	0
+ATI HD3700								.*ATI.* HD37..							3	1	0	3.3
 ATI Radeon HD 3800						.*ATI.*Radeon HD *38..					3	1	1	4
 ATI Radeon HD 4100						.*ATI.*Radeon HD *41..					1	1	0	0
 ATI Radeon HD 4200						.*ATI.*Radeon HD *42..					1	1	1	4
 ATI Radeon HD 4600						.*ATI.*Radeon HD *46..					3	1	1	4
 ATI Radeon HD 4700						.*ATI.*Radeon HD *47..					3	1	1	3.3
 ATI Radeon HD 4800						.*ATI.*Radeon HD *48..					3	1	1	4
+ATI ASUS EAH5400						.*ATI.*ASUS EAH54..						3	1	1	4.2
 ATI Radeon HD 5400						.*ATI.*Radeon HD *54..					3	1	1	4.2
 ATI Radeon HD 5500						.*ATI.*Radeon HD *55..					3	1	1	4.2
+ATI ASUS EAH5500						.*ATI.*ASUS EAH55..						3	1	1	4.2
 ATI Radeon HD 5600						.*ATI.*Radeon HD *56..					3	1	1	4.2
 ATI Radeon HD 5700						.*ATI.*Radeon HD *57..					3	1	1	4.2
 ATI Radeon HD 5800						.*ATI.*Radeon HD *58..					4	1	1	4.2
 ATI FirePro 7000						.*ATI.*FirePro V7.*						3	1	0	0
 ATI FirePro M							.*ATI.*FirePro M.*						3	1	1	4.2
 ATI R300 (9700)							.*R300.*								0	1	1	2.1
-ATI Radeon								.*ATI.*(Diamond|Radeon).*				0	1	0	0
+ATI Radeon								.*ATI.*(Diamond|Radeon).*				0	1	0	4.2
 Intel X3100								.*Intel.*X3100.*						1	1	1	2.1
 Intel GMA 3600							.*Intel.* 3600.*						0	1	1	3
 Intel 830M								.*Intel.*830M							0	0	0	0
 Intel Cantiga							.*Intel.*Cantiga.*						0	0	1	2
 Intel Eaglelake							.*Intel.*Eaglelake.*					1	1	1	2
 Intel Graphics Media HD					.*Intel.*Graphics Media.*HD.*			1	1	1	2.1
-Intel HD Graphics 2000					.*Intel.*HD Graphics 2.*				2	1	0	0
+Intel HD Graphics 2000					.*Intel.*HD Graphics 2.*				2	1	0	4
 Intel HD Graphics 3000					.*Intel.*HD Graphics 3.*				3	1	1	3.1
-Intel HD Graphics 4000					.*Intel.*HD Graphics 4.*				3	1	1	3.3
+Intel HD Graphics 4000					.*Intel.*HD Graphics 4.*				3	1	1	4
 Intel HD2000							.*Intel.*HD2000.*						2	1	0	0
 Intel HD3000							.*Intel.*HD3000.*						3	1	0	0
 Intel HD Graphics						.*Intel.*HD Graphics.*					2	1	1	4
 NVIDIA GT 330M							.*NVIDIA .*GT *33*M.*					3	1	1	3.3
 NVIDIA GT 340M							.*NVIDIA .*GT *34*M.*					4	1	1	3.3
 NVIDIA GTS 350M							.*NVIDIA .*GTS *35*M.*					4	1	1	3.3
-NVIDIA GTS 360M							.*NVIDIA .*GTS *36*M.*					5	1	1	3.3
-NVIDIA 405M								.*NVIDIA .* 40*M.*						2	1	0	0
+NVIDIA GTS 360M							.*NVIDIA .*GTS *360M.*					5	1	1	3.3
+NVIDIA 405M								.*NVIDIA .* 40*M.*						2	1	0	4.2
 NVIDIA 410M								.*NVIDIA .* 41*M.*						3	1	0	0
 NVIDIA GT 415M							.*NVIDIA .*GT *41*M.*					3	1	1	4.2
 NVIDIA GT 420M							.*NVIDIA .*GT *42*M.*					3	1	1	4.2
 NVIDIA GTX 680M							.*NVIDIA .*GTX *68*M.*					5	1	0	0
 NVIDIA GTX 690M							.*NVIDIA .*GTX *69*M.*					5	1	0	0
 NVIDIA G100								.*NVIDIA .*G10.*						3	1	1	4.2
-NVIDIA GT 120							.*NVIDIA .*GT *12.*						2	1	0	0
-NVIDIA GT 130							.*NVIDIA .*GT *13.*						2	1	0	0
+NVIDIA GT 120							.*NVIDIA .*GT *12.*						2	1	0	3
+NVIDIA GT 130							.*NVIDIA .*GT *13.*						2	1	0	3.3
 NVIDIA GTS 150							.*NVIDIA .*GTS *15.*					2	1	0	0
-NVIDIA 205								.*NVIDIA .*GeForce 205.*				2	1	1	3.3
+NVIDIA 200								.*NVIDIA .*GeForce 20.*					2	1	1	3.3
+NVIDIA G200								.*NVIDIA .*GeForce G20.*				2	1	1	3.3
+NVIDIA G210								.*NVIDIA .*GeForce G210.*				3	1	1	3.3
 NVIDIA 210								.*NVIDIA .*GeForce 210.*				3	1	1	3.3
 NVIDIA GT 220							.*NVIDIA .*GT *22.*						2	1	1	3.3
 NVIDIA GT 230							.*NVIDIA .*GT *23.*						2	1	1	3.3
+NVIDIA GT 240							.*NVIDIA .*GT *24.*						4	1	1	3.3
 NVIDIA GTS 240							.*NVIDIA .*GTS *24.*					4	1	1	3.3
 NVIDIA GTS 250							.*NVIDIA .*GTS *25.*					4	1	1	3.3
 NVIDIA GTX 260							.*NVIDIA .*GTX *26.*					4	1	1	3.3
-NVIDIA GTX 270							.*NVIDIA .*GTX *27.*					4	1	0	0
+NVIDIA GTX 270							.*NVIDIA .*GTX *27.*					4	1	0	3.3
 NVIDIA GTX 280							.*NVIDIA .*GTX *28.*					4	1	1	3.3
-NVIDIA GTX 290							.*NVIDIA .*GTX *29.*					5	1	0	0
+NVIDIA GTX 290							.*NVIDIA .*GTX *29.*					5	1	0	3.3
 NVIDIA 310								.*NVIDIA .*GeForce 310.*				3	1	1	3.3
 NVIDIA 315								.*NVIDIA .*GeForce 315.*				3	1	1	3.3
-NVIDIA GT 320							.*NVIDIA .*GT *32.*						3	1	0	0
-NVIDIA GT 330							.*NVIDIA .*GT *33.*						3	1	0	0
+NVIDIA GT 320							.*NVIDIA .*GT *32.*						3	1	0	3.3
+NVIDIA GT 330							.*NVIDIA .*GT *33.*						3	1	0	3.3
 NVIDIA GT 340							.*NVIDIA .*GT *34.*						3	1	0	0
-NVIDIA 405								.*NVIDIA .* 405.*						3	1	0	0
+NVIDIA 405								.*NVIDIA .* 405.*						3	1	0	3.3
 NVIDIA GT 420							.*NVIDIA .*GT *42.*						3	1	1	4.2
-NVIDIA GT 430							.*NVIDIA .*GT *43.*						3	1	1	4.1
-NVIDIA GT 440							.*NVIDIA .*GT *44.*						4	1	0	0
+NVIDIA GT 430							.*NVIDIA .*GT *43.*						3	1	1	4.2
+NVIDIA GT 440							.*NVIDIA .*GT *44.*						4	1	0	4.2
 NVIDIA GTS 450							.*NVIDIA .*GTS *45.*					4	1	1	4.2
-NVIDIA GTX 460							.*NVIDIA .*GTX *46.*					5	1	1	4.2
+NVIDIA GTX 460							.*NVIDIA .*GTX *46.*					5	1	1	4.3
 NVIDIA GTX 470							.*NVIDIA .*GTX *47.*					5	1	1	4.2
 NVIDIA GTX 480							.*NVIDIA .*GTX *48.*					5	1	1	4.2
 NVIDIA 510								.*NVIDIA .* 510.*						3	1	0	0
 NVIDIA GT 520							.*NVIDIA .*GT *52.*						3	1	1	4.2
 NVIDIA GT 530							.*NVIDIA .*GT *53.*						3	1	1	4.2
 NVIDIA GT 540							.*NVIDIA .*GT *54.*						3	1	1	4.2
-NVIDIA GTX 550							.*NVIDIA .*GTX *55.*					5	1	1	4.2
+NVIDIA GTX 550							.*NVIDIA .*GTX *55.*					5	1	1	4.3
 NVIDIA GTX 560							.*NVIDIA .*GTX *56.*					5	1	1	4.2
 NVIDIA GTX 570							.*NVIDIA .*GTX *57.*					5	1	1	4.2
-NVIDIA GTX 580							.*NVIDIA .*GTX *58.*					5	1	1	4.2
+NVIDIA GTX 580							.*NVIDIA .*GTX *58.*					5	1	1	4.3
 NVIDIA GTX 590							.*NVIDIA .*GTX *59.*					5	1	1	4.2
 NVIDIA GT 610							.*NVIDIA .*GT *61.*						3	1	1	4.2
-NVIDIA GT 620							.*NVIDIA .*GT *62.*						3	1	0	0
-NVIDIA GT 630							.*NVIDIA .*GT *63.*						3	1	0	0
-NVIDIA GT 640							.*NVIDIA .*GT *64.*						3	1	0	0
+NVIDIA GT 620							.*NVIDIA .*GT *62.*						3	1	0	4.2
+NVIDIA GT 630							.*NVIDIA .*GT *63.*						3	1	0	4.2
+NVIDIA GT 640							.*NVIDIA .*GT *64.*						3	1	0	4.3
 NVIDIA GT 650							.*NVIDIA .*GT *65.*						3	1	1	4.2
-NVIDIA GTX 660							.*NVIDIA .*GTX *66.*					5	1	0	0
+NVIDIA GTX 650							.*NVIDIA .*GTX *65.*					3	1	1	4.2
+NVIDIA GTX 660							.*NVIDIA .*GTX *66.*					5	1	0	4.3
 NVIDIA GTX 670							.*NVIDIA .*GTX *67.*					5	1	1	4.2
 NVIDIA GTX 680							.*NVIDIA .*GTX *68.*					5	1	1	4.2
 NVIDIA GTX 690							.*NVIDIA .*GTX *69.*					5	1	1	4.2
 NVIDIA GeForce 7800						.*NVIDIA .*GeForce 78.*					2	1	1	2.1
 NVIDIA GeForce 7900						.*NVIDIA .*GeForce 79.*					3	1	1	2.1
 NVIDIA GeForce 8100						.*NVIDIA .*GeForce 81.*					1	1	0	0
-NVIDIA GeForce 8200M					.*NVIDIA .*GeForce 8200M.*				1	1	0	0
-NVIDIA GeForce 8200						.*NVIDIA .*GeForce 82.*					1	1	0	0
+NVIDIA GeForce 8200M					.*NVIDIA .*GeForce 8200M.*				1	1	0	3.3
+NVIDIA GeForce 8200						.*NVIDIA .*GeForce 82.*					1	1	0	2.1
 NVIDIA GeForce 8300						.*NVIDIA .*GeForce 83.*					3	1	1	3.3
 NVIDIA GeForce 8400M					.*NVIDIA .*GeForce 8400M.*				1	1	1	3.3
 NVIDIA GeForce 8400						.*NVIDIA .*GeForce 84.*					2	1	1	3.3
 NVIDIA GeForce 8800M					.*NVIDIA .*GeForce 8800M.*				2	1	1	3.3
 NVIDIA GeForce 8800						.*NVIDIA .*GeForce 88.*					3	1	1	3.3
 NVIDIA GeForce 9100M					.*NVIDIA .*GeForce 9100M.*				0	1	0	0
-NVIDIA GeForce 9100						.*NVIDIA .*GeForce 91.*					0	1	0	0
-NVIDIA GeForce 9200M					.*NVIDIA .*GeForce 9200M.*				1	1	0	0
-NVIDIA GeForce 9200						.*NVIDIA .*GeForce 92.*					1	1	0	0
+NVIDIA GeForce 9100						.*NVIDIA .*GeForce 91.*					0	1	0	3.3
+NVIDIA GeForce 9200M					.*NVIDIA .*GeForce 9200M.*				1	1	0	3.1
+NVIDIA GeForce 9200						.*NVIDIA .*GeForce 92.*					1	1	0	3.3
 NVIDIA GeForce 9300M					.*NVIDIA .*GeForce 9300M.*				1	1	1	3.3
 NVIDIA GeForce 9300						.*NVIDIA .*GeForce 93.*					1	1	1	3.3
 NVIDIA GeForce 9400M					.*NVIDIA .*GeForce 9400M.*				2	1	1	3.3
 NVIDIA GeForce 9800M					.*NVIDIA .*GeForce 9800M.*				2	1	1	3.3
 NVIDIA GeForce 9800						.*NVIDIA .*GeForce 98.*					3	1	1	3.3
 NVIDIA GeForce FX 5100					.*NVIDIA .*GeForce FX 51.*				0	1	0	0
-NVIDIA GeForce FX 5200					.*NVIDIA .*GeForce FX 52.*				0	1	0	0
+NVIDIA GeForce FX 5200					.*NVIDIA .*GeForce FX 52.*				0	1	0	2.1
 NVIDIA GeForce FX 5300					.*NVIDIA .*GeForce FX 53.*				0	1	0	0
 NVIDIA GeForce FX 5500					.*NVIDIA .*GeForce FX 55.*				0	1	1	2.1
 NVIDIA GeForce FX 5600					.*NVIDIA .*GeForce FX 56.*				1	1	1	2.1
 NVIDIA G94								.*NVIDIA .*G94.*						3	1	0	0
 NVIDIA GeForce Go 6						.*GeForce Go 6.*						1	1	0	0
 NVIDIA ION 2							.*NVIDIA .*ION 2.*						2	1	0	0
-NVIDIA ION 								.*NVIDIA Corporation.*ION.*				2	1	1	0
+NVIDIA ION 								.*NVIDIA Corporation.*ION.*				2	1	1	3.3
 NVIDIA NB8M								.*NVIDIA .*NB8M.*						1	1	0	0
 NVIDIA NB8P								.*NVIDIA .*NB8P.*						2	1	0	0
 NVIDIA NB9E								.*NVIDIA .*NB9E.*						3	1	0	0
 NVIDIA NB9P								.*NVIDIA .*NB9P.*						2	1	0	0
 NVIDIA N10								.*NVIDIA .*N10.*						1	1	0	0
 NVIDIA GeForce PCX						.*GeForce PCX.*							0	1	0	0
-NVIDIA Generic							.*NVIDIA .*Unknown.*					0	0	0	0
+NVIDIA Generic							.*NVIDIA .*Unknown.*					0	0	0	3
 NVIDIA NV17								.*NVIDIA .*NV17.*						0	1	0	0
 NVIDIA NV34								.*NVIDIA .*NV34.*						0	1	0	0
 NVIDIA NV35								.*NVIDIA .*NV35.*						0	1	0	0
 NVIDIA NV41								.*NVIDIA .*NV41.*						1	1	0	0
 NVIDIA NV43								.*NVIDIA .*NV43.*						1	1	0	0
 NVIDIA NV44								.*NVIDIA .*NV44.*						1	1	0	0
-NVIDIA nForce							.*NVIDIA .*nForce.*						0	0	0	0
+NVIDIA nForce							.*NVIDIA .*nForce.*						0	0	0	3.3
 NVIDIA MCP51							.*NVIDIA .*MCP51.*						1	1	0	0
 NVIDIA MCP61							.*NVIDIA .*MCP61.*						1	1	0	0
 NVIDIA MCP67							.*NVIDIA .*MCP67.*						1	1	0	0
 NVIDIA MCP79							.*NVIDIA .*MCP79.*						1	1	0	0
 NVIDIA MCP7A							.*NVIDIA .*MCP7A.*						1	1	0	0
 NVIDIA Quadro2							.*Quadro2.*								0	1	0	0
-NVIDIA Quadro 1000M						.*Quadro.*1000M.*						2	1	0	0
-NVIDIA Quadro 2000 M/D					.*Quadro.*2000.*						3	1	0	0
+NVIDIA Quadro 1000M						.*Quadro.*1000M.*						2	1	0	4.2
+NVIDIA Quadro 2000 M/D					.*Quadro.*2000.*						3	1	0	4.2
 NVIDIA Quadro 3000M						.*Quadro.*3000M.*						3	1	0	0
 NVIDIA Quadro 4000M						.*Quadro.*4000M.*						3	1	0	0
-NVIDIA Quadro 4000						.*Quadro *4000.*						3	1	0	0
+NVIDIA Quadro 4000						.*Quadro *4000.*						3	1	0	4.2
 NVIDIA Quadro 50x0 M					.*Quadro.*50.0.*						3	1	0	0
 NVIDIA Quadro 6000						.*Quadro.*6000.*						3	1	0	0
-NVIDIA Quadro 400						.*Quadro.*400.*							2	1	0	0
-NVIDIA Quadro 600						.*Quadro.*600.*							2	1	0	0
+NVIDIA Quadro 400						.*Quadro.*400.*							2	1	0	3.3
+NVIDIA Quadro 600						.*Quadro.*600.*							2	1	0	3.3
 NVIDIA Quadro4							.*Quadro4.*								0	1	0	0
 NVIDIA Quadro DCC						.*Quadro DCC.*							0	1	0	0
 NVIDIA Quadro CX						.*Quadro.*CX.*							3	1	0	0
 NVIDIA Quadro FX 770M					.*Quadro.*FX *770M.*					2	1	0	0
-NVIDIA Quadro FX 1500M					.*Quadro.*FX *1500M.*					1	1	0	0
+NVIDIA Quadro FX 1500M					.*Quadro.*FX *1500M.*					1	1	0	2.1
 NVIDIA Quadro FX 1600M					.*Quadro.*FX *1600M.*					2	1	0	0
 NVIDIA Quadro FX 2500M					.*Quadro.*FX *2500M.*					2	1	0	0
 NVIDIA Quadro FX 2700M					.*Quadro.*FX *2700M.*					3	1	0	0
-NVIDIA Quadro FX 2800M					.*Quadro.*FX *2800M.*					3	1	0	0
-NVIDIA Quadro FX 3500					.*Quadro.*FX *3500.*					2	1	0	0
+NVIDIA Quadro FX 2800M					.*Quadro.*FX *2800M.*					3	1	0	3.3
+NVIDIA Quadro FX 3500					.*Quadro.*FX *3500.*					2	1	0	2.1
 NVIDIA Quadro FX 3600					.*Quadro.*FX *3600.*					3	1	0	0
-NVIDIA Quadro FX 3700					.*Quadro.*FX *3700.*					3	1	0	0
-NVIDIA Quadro FX 3800					.*Quadro.*FX *3800.*					3	1	0	0
+NVIDIA Quadro FX 3700					.*Quadro.*FX *3700.*					3	1	0	3.3
+NVIDIA Quadro FX 3800					.*Quadro.*FX *3800.*					3	1	0	3.2
 NVIDIA Quadro FX 4500					.*Quadro.*FX *45.*						3	1	0	0
-NVIDIA Quadro FX 880M					.*Quadro.*FX *880M.*					3	1	0	0
+NVIDIA Quadro FX 880M					.*Quadro.*FX *880M.*					3	1	0	3.3
 NVIDIA Quadro FX 4800					.*NVIDIA .*Quadro *FX *4800.*			3	1	0	0
-NVIDIA Quadro FX						.*Quadro FX.*							1	1	0	0
-NVIDIA Quadro NVS 1xxM					.*Quadro NVS *1.[05]M.*					0	1	1	2.1
+NVIDIA Quadro FX						.*Quadro FX.*							1	1	0	3.3
+NVIDIA Quadro NVS 1xxM					.*Quadro NVS *1.[05]M.*					0	1	1	3.3
 NVIDIA Quadro NVS 300M					.*NVIDIA .*NVS *300M.*					2	1	0	0
 NVIDIA Quadro NVS 320M					.*NVIDIA .*NVS *320M.*					2	1	0	0
 NVIDIA Quadro NVS 2100M					.*NVIDIA .*NVS *2100M.*					2	1	0	0
 NVIDIA Quadro NVS 3100M					.*NVIDIA .*NVS *3100M.*					2	1	0	0
-NVIDIA Quadro NVS 4200M					.*NVIDIA .*NVS *4200M.*					2	1	0	0
+NVIDIA Quadro NVS 4200M					.*NVIDIA .*NVS *4200M.*					2	1	0	4.1
 NVIDIA Quadro NVS 5100M					.*NVIDIA .*NVS *5100M.*					2	1	0	0
-NVIDIA Quadro NVS						.*NVIDIA .*NVS							0	1	0	0
+NVIDIA Quadro NVS						.*NVIDIA .*NVS							0	1	0	3.2
 NVIDIA Corporation N12P					.*NVIDIA .*N12P.*						1	1	1	4.1
 NVIDIA Corporation N11M					.*NVIDIA .*N11M.*						2	1	0	0
 NVIDIA RIVA TNT							.*RIVA TNT.*							0	0	0	0
 Apple Software Renderer					Apple.*Software Renderer.*				0	0	0	0
 Humper									Humper.*								0	1	1	2.1
 PowerVR SGX545							.*PowerVR SGX.*							1	1	1	3
-
-

indra/newview/llfeaturemanager.cpp

 		json << "{'label' : '" << label << "',\n" << 
 			"'regexp' : '" << expr << "',\n" <<
 			"'class' : '" << cls << "',\n" <<
-			"'supported' : '" << supported << "'\n},\n";
+			"'supported' : '" << supported << "',\n" <<
+			"'stats_based' : " << stats_based <<  ",\n" <<
+			"'gl_version' : " << expected_gl_version << "\n},\n";
 #endif
 
 		for (U32 i = 0; i < expr.length(); i++)	 /*Flawfinder: ignore*/

indra/newview/llgroupmgr.cpp

 	mPendingRoleMemberRequest(FALSE),
 	mAccessTime(0.0f)
 {
+	mMemberVersion.generate();
 }
 
 void LLGroupMgrGroupData::setAccessed()
 			role_data.mChangeType = RC_UPDATE_DATA;
 		}
 		else
-	{
+		{
 			role_data.mChangeType = RC_UPDATE_POWERS;
 		}
 
 		mRoleChanges[role_id] = role_data;
 	}
 	else
-		{
+	{
 		llwarns << "Change being made to non-existant role " << role_id << llendl;
 	}
 }
 	}
 	mMembers.clear();
 	mMemberDataComplete = FALSE;
+	mMemberVersion.generate();
 }
 
 void LLGroupMgrGroupData::removeRoleData()
 		}
 	}
 
+	group_datap->mMemberVersion.generate();
+
 	if (group_datap->mMembers.size() ==  (U32)group_datap->mMemberCount)
 	{
 		group_datap->mMemberDataComplete = TRUE;
 	bool start_message = true;
 	LLMessageSystem* msg = gMessageSystem;
 
-	
-
 	LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
 	if (!group_datap) return;
 
 	{
 		gAgent.sendReliableMessage();
 	}
+
+	group_datap->mMemberVersion.generate();
 }
 
 
 		group_datap->mMembers[member_id] = data;
 	}
 
+	group_datap->mMemberVersion.generate();
+
 	// Technically, we have this data, but to prevent completely overhauling
 	// this entire system (it would be nice, but I don't have the time), 
 	// I'm going to be dumb and just call services I most likely don't need 

indra/newview/llgroupmgr.h

 	F32 getAccessTime() const { return mAccessTime; }
 	void setAccessed();
 
+	const LLUUID& getMemberVersion() const { return mMemberVersion; }
+
 public:
 	typedef	std::map<LLUUID,LLGroupMemberData*> member_list_t;
 	typedef	std::map<LLUUID,LLGroupRoleData*> role_list_t;
 
 	BOOL				mPendingRoleMemberRequest;
 	F32					mAccessTime;
+
+	// Generate a new ID every time mMembers
+	LLUUID				mMemberVersion;
 };
 
 struct LLRoleAction

indra/newview/llpanelgroupgeneral.cpp

 		{
 			mMemberProgress = gdatap->mMembers.begin();
 			mPendingMemberUpdate = TRUE;
-			mUdpateSessionID.generate();
 
 			sSDTime = 0.0f;
 			sElementTime = 0.0f;
 			// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
 			LLAvatarNameCache::get(mMemberProgress->first, 
 									boost::bind(&LLPanelGroupGeneral::onNameCache,
-												this, mUdpateSessionID, member, _1, _2));
+												this, gdatap->getMemberVersion(), member, _2));
 		}
 	}
 
 	}
 }
 
-void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name)
+void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
 {
-	if (!member 
-		|| update_id != mUdpateSessionID)
+	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+
+	if (!gdatap
+		|| !gdatap->isMemberDataComplete()
+		|| gdatap->getMemberVersion() != update_id)
 	{
+		// Stale data
 		return;
 	}
 

indra/newview/llpanelgroupgeneral.h

 
 	virtual void setupCtrls	(LLPanel* parent);
 
-	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name);
+	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name);
 private:
 	void	reset();
 
 	BOOL			mChanged;
 	BOOL			mFirstUse;
 	std::string		mIncompleteMemberDataStr;
-	LLUUID			mUdpateSessionID;
 
 	// Group information (include any updates in updateChanged)
 	LLLineEditor		*mGroupNameEditor;

indra/newview/llpanelgrouproles.cpp

 	mHasMatch(FALSE),
 	mNumOwnerAdditions(0)
 {
-	mUdpateSessionID = LLUUID::null;
 }
 
 LLPanelGroupMembersSubTab::~LLPanelGroupMembersSubTab()
 		return GP_NO_POWERS;
 	}
 
-	LLGroupMemberData* member_data = gdatap->mMembers[agent_id];
-	if ( !member_data )
+	LLGroupMgrGroupData::member_list_t::iterator iter = gdatap->mMembers.find(agent_id);
+	if ( iter == gdatap->mMembers.end() )
 	{
 		llwarns << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- No member data for member with UUID " << agent_id << llendl;
 		return GP_NO_POWERS;
 	}
 
+	LLGroupMemberData* member_data = (*iter).second;
+	if (!member_data)
+	{
+		llwarns << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- Null member data for member with UUID " << agent_id << llendl;
+		return GP_NO_POWERS;
+	}
+
 	//see if there are unsaved role changes for this agent
 	role_change_data_map_t* role_change_datap = NULL;
 	member_role_changes_map_t::iterator member = mMemberRoleChangeData.find(agent_id);
 		mMemberProgress = gdatap->mMembers.begin();
 		mPendingMemberUpdate = TRUE;
 		mHasMatch = FALSE;
-		// Generate unique ID for current updateMembers()- see onNameCache for details.
-		// Using unique UUID is perhaps an overkill but this way we are perfectly safe
-		// from coincidences.
-		mUdpateSessionID.generate();
 	}
 	else
 	{
 	}
 }
 
-void LLPanelGroupMembersSubTab::addMemberToList(LLUUID id, LLGroupMemberData* data)
+void LLPanelGroupMembersSubTab::addMemberToList(LLGroupMemberData* data)
 {
 	if (!data) return;
 	LLUIString donated = getString("donation_area");
 	donated.setArg("[AREA]", llformat("%d", data->getContribution()));
 
 	LLNameListCtrl::NameItem item_params;
-	item_params.value = id;
+	item_params.value = data->getID();
 
 	item_params.columns.add().column("name").font.name("SANSSERIF_SMALL").style("NORMAL");
 
 	mHasMatch = TRUE;
 }
 
-void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name)
+void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
 {
-	// Update ID is used to determine whether member whose id is passed
-	// into onNameCache() was passed after current or previous user-initiated update.
-	// This is needed to avoid probable duplication of members in list after changing filter
-	// or adding of members of another group if gets for their names were called on
-	// previous update. If this id is from get() called from older update,
-	// we do nothing.
-	if (mUdpateSessionID != update_id) return;
-	
-	if (!member)
+	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+	if (!gdatap
+		|| gdatap->getMemberVersion() != update_id
+		|| !member)
 	{
 		return;
 	}
 	// trying to avoid unnecessary hash lookups
 	if (matchesSearchFilter(av_name.getLegacyName()))
 	{
-		addMemberToList(id, member);
+		addMemberToList(member);
 		if(!mMembersList->getEnabled())
 		{
 			mMembersList->setEnabled(TRUE);
 		{
 			if (matchesSearchFilter(av_name.getLegacyName()))
 			{
-				addMemberToList(mMemberProgress->first, mMemberProgress->second);
+				addMemberToList(mMemberProgress->second);
 			}
 		}
 		else
 		{
 			// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
 			LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache,
-																	   this, mUdpateSessionID, mMemberProgress->second, _1, _2));
+									this, gdatap->getMemberVersion(), mMemberProgress->second, _2));
 		}
 	}
 

indra/newview/llpanelgrouproles.h

 
 	virtual void setGroupID(const LLUUID& id);
 
-	void addMemberToList(LLUUID id, LLGroupMemberData* data);
-	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name);
+	void addMemberToList(LLGroupMemberData* data);
+	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name);
 
 protected:
 	typedef std::map<LLUUID, LLRoleMemberChangeType> role_change_data_map_t;
 	BOOL mPendingMemberUpdate;
 	BOOL mHasMatch;
 
-	// This id is generated after each user initiated member list update(opening Roles or changing filter)
-	LLUUID mUdpateSessionID;
-
 	member_role_changes_map_t mMemberRoleChangeData;
 	U32 mNumOwnerAdditions;
 

indra/newview/llviewerwindow.cpp

 
 		if (!reset_deferred)
 		{
-		// if image cropping or need to enlarge the scene, compute a scale_factor
-		F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
-		snapshot_width  = (S32)(ratio * image_width) ;
-		snapshot_height = (S32)(ratio * image_height) ;
-		scale_factor = llmax(1.0f, 1.0f / ratio) ;
-	}
+			// if image cropping or need to enlarge the scene, compute a scale_factor
+			F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
+			snapshot_width  = (S32)(ratio * image_width) ;
+			snapshot_height = (S32)(ratio * image_height) ;
+			scale_factor = llmax(1.0f, 1.0f / ratio) ;
+		}
 	}
 	
 	if (show_ui && scale_factor > 1.f)
 	{
 		send_agent_resume();
 	}
-
+	
 	return ret;
 }
 

indra/newview/pipeline.cpp

 		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
 	}
 
-	bool ret = doAllocateScreenBuffer(resX, resY);
+	eFBOStatus ret = doAllocateScreenBuffer(resX, resY);
 
 	if (save_settings)
 	{
 		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
 	}
 	
-	return ret;
-}
-
-
-bool LLPipeline::doAllocateScreenBuffer(U32 resX, U32 resY)
-{
-	//try to allocate screen buffers at requested resolution and samples
+	if (ret == FBO_FAILURE)
+	{ //FAILSAFE: screen buffer allocation failed, disable deferred rendering if it's enabled
+		//NOTE: if the session closes successfully after this call, deferred rendering will be 
+		// disabled on future sessions
+		if (LLPipeline::sRenderDeferred)
+		{
+			gSavedSettings.setBOOL("RenderDeferred", FALSE);
+			LLPipeline::refreshCachedSettings();
+		}
+	}
+
+	return ret == FBO_SUCCESS_FULLRES;
+}
+
+
+LLPipeline::eFBOStatus LLPipeline::doAllocateScreenBuffer(U32 resX, U32 resY)
+{
+	// try to allocate screen buffers at requested resolution and samples
 	// - on failure, shrink number of samples and try again
 	// - if not multisampled, shrink resolution and try again (favor X resolution over Y)
 	// Make sure to call "releaseScreenBuffers" after each failure to cleanup the partially loaded state
 
 	U32 samples = RenderFSAASamples;
 
-	bool ret = true;
+	eFBOStatus ret = FBO_SUCCESS_FULLRES;
 	if (!allocateScreenBuffer(resX, resY, samples))
 	{
 		//failed to allocate at requested specification, return false
-		ret = false;
+		ret = FBO_FAILURE;
 
 		releaseScreenBuffers();
 		//reduce number of samples 
 			samples /= 2;
 			if (allocateScreenBuffer(resX, resY, samples))
 			{ //success
-				return ret;
+				return FBO_SUCCESS_LOWRES;
 			}
 			releaseScreenBuffers();
 		}
 			resY /= 2;
 			if (allocateScreenBuffer(resX, resY, samples))
 			{
-				return ret;
+				return FBO_SUCCESS_LOWRES;
 			}
 			releaseScreenBuffers();
 
 			resX /= 2;
 			if (allocateScreenBuffer(resX, resY, samples))
 			{
-				return ret;
+				return FBO_SUCCESS_LOWRES;
 			}
 			releaseScreenBuffers();
 		}
 			}
 		}
 
-		U32 width = (U32)(resX*scale);
+		U32 width = (U32) (resX*scale);
 		U32 height = width;
 
 		if (shadow_detail > 1)

indra/newview/pipeline.h

 	//allocate the largest screen buffer possible up to resX, resY
 	//returns true if full size buffer allocated, false if some other size is allocated
 	bool allocateScreenBuffer(U32 resX, U32 resY);
+
+	typedef enum {
+		FBO_SUCCESS_FULLRES = 0,
+		FBO_SUCCESS_LOWRES,
+		FBO_FAILURE
+	} eFBOStatus;
+
 private:
 	//implementation of above, wrapped for easy error handling
-	bool doAllocateScreenBuffer(U32 resX, U32 resY);
+	eFBOStatus doAllocateScreenBuffer(U32 resX, U32 resY);
 public:
 
 	//attempt to allocate screen buffers at resX, resY
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.