diff --git a/.hgtags b/.hgtags
index 1413f356406f1db7aa958995e14caf0f39116e54..7d6926d9679a182fdcaf5ae5a882ed21eb56acb8 100755
--- a/.hgtags
+++ b/.hgtags
@@ -391,3 +391,6 @@ cd39255bd23330fd30c04105f2811e941d8524fe 3.4.4-beta2
 2c4011bbc2b15b82198fd8b51f3a9fe765a08c4d DRTVWR-271
 2f8a3ef687bc55828abcb17ac1ad7cde70536d7e 3.4.4-beta3
 35cfd4cf5b895fa776592f2e630e330be7f0604e DRTVWR-273
+c374035d459af3c03dea2dd90880dfc25de64706 DRTVWR-275
+05d9f1dd7a954069af2a33abedb7713fa36a04cb 3.4.4-beta4
+e1bb1ae7d8b12faeb37933a737c199cc9b9f89cc 3.4.4-release
diff --git a/doc/contributions.txt b/doc/contributions.txt
index f53d9f5cfd74cd29e1706b43d2ec3c736b714bfd..ea90dd6b87883003b930027d06b8e28e428b61a5 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -646,6 +646,7 @@ Jonathan Yap
 	STORM-1872
 	STORM-1858
 	STORM-1862
+	OPEN-161
 Kadah Coba
 	STORM-1060
     STORM-1843
@@ -1163,6 +1164,7 @@ Techwolf Lupindo
 	SNOW-746
 	VWR-12385
 	VWR-20893
+	OPEN-161
 Templar Merlin
 tenebrous pau
 	VWR-247
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index 700525e1fa1924eafc92308c3228c967b4277a59..a6e2c89ba486a19f2927a790a27f52e882038118 100644
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
@@ -348,7 +348,7 @@ void LLAvatarNameCache::requestNamesViaCapability()
 	while(!sAskQueue.empty())
 	{
 		it = sAskQueue.begin();
-		const LLUUID& agent_id = *it;
+		LLUUID agent_id = *it;
 		sAskQueue.erase(it);
 
 		if (url.empty())
@@ -416,7 +416,7 @@ void LLAvatarNameCache::requestNamesViaLegacy()
 	for (S32 requests = 0; !sAskQueue.empty() && requests < MAX_REQUESTS; ++requests)
 	{
 		it = sAskQueue.begin();
-		const LLUUID& agent_id = *it;
+		LLUUID agent_id = *it;
 		sAskQueue.erase(it);
 
 		// Mark as pending first, just in case the callback is immediately
@@ -563,8 +563,7 @@ void LLAvatarNameCache::eraseUnrefreshed()
             const LLAvatarName& av_name = it->second;
             if (av_name.mExpires < max_unrefreshed)
             {
-                const LLUUID& agent_id = it->first;
-                LL_DEBUGS("AvNameCache") << agent_id 
+                LL_DEBUGS("AvNameCache") << it->first 
                                          << " user '" << av_name.mUsername << "' "
                                          << "expired " << now - av_name.mExpires << " secs ago"
                                          << LL_ENDL;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 3e99bd25519829c9286596c84ee29c5b4258d2ea..85262b55a8e47d7e22b55020e6ee8ea2445d2ff1 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -194,7 +194,6 @@ set(viewer_SOURCE_FILES
     llfloaterbuyland.cpp
     llfloatercamera.cpp
     llfloatercolorpicker.cpp
-    llfloaterdebugmaterials.cpp
     llfloaterdeleteenvpreset.cpp
     llfloaterdestinations.cpp
     llfloaterdisplayname.cpp
@@ -773,7 +772,6 @@ set(viewer_HEADER_FILES
     llfloaterbuyland.h
     llfloatercamera.h
     llfloatercolorpicker.h
-    llfloaterdebugmaterials.h
     llfloaterdeleteenvpreset.h
     llfloaterdestinations.h
     llfloaterdisplayname.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7deb1284b94dc424b2ab9bf0e6ab18fa5f90ac93..258370d6f3201655b8e6951d7bcf55c5d902b4f5 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8143,7 +8143,7 @@
   <key>RenderSpotLightsInNondeferred</key>
   <map>
     <key>Comment</key>
-    <string>Whether to support projectors as spotlights when Lighting and Shadows is disabled</string>
+    <string>Whether to support projectors as spotlights when Advanced Lighting Model is disabled</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -8314,7 +8314,7 @@
   <key>RenderDeferred</key>
   <map>
     <key>Comment</key>
-    <string>Use deferred rendering pipeline.</string>
+    <string>Use deferred rendering pipeline (Advanced Lighting Model).</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -8502,7 +8502,7 @@
     <key>RenderAutoMaskAlphaNonDeferred</key>
     <map>
       <key>Comment</key>
-      <string>Use alpha masks where appropriate, in the non-deferred (non-'Lighting and Shadows') graphics mode</string>
+      <string>Use alpha masks where appropriate when not using the Advanced Lighting Model</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -8513,7 +8513,7 @@
     <key>RenderAutoMaskAlphaDeferred</key>
     <map>
       <key>Comment</key>
-      <string>Use alpha masks where appropriate, in the deferred ('Lighting and Shadows') graphics mode</string>
+      <string>Use alpha masks where appropriate in the Advanced Lighting Model</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt
index 4c39014c8b5238a1cdfc75d41fd96fad94ccab47..122577b13236c49e45a0a127c2cac60b6245b307 100644
--- a/indra/newview/gpu_table.txt
+++ b/indra/newview/gpu_table.txt
@@ -32,567 +32,531 @@
 //		1 - We claim to support this card.
 //
 
-3Dfx									.*3Dfx.*								0	0	0	0
-3Dlabs									.*3Dlabs.*								0	0	0	0
-ATI 3D-Analyze							.*ATI.*3D-Analyze.*						0	0	0	0
-ATI All-in-Wonder 7500					.*ATI.*All-in-Wonder 75.*				0	1	0	0
-ATI All-in-Wonder 8500					.*ATI.*All-in-Wonder 85.*				0	1	0	0
-ATI All-in-Wonder 9200					.*ATI.*All-in-Wonder 92.*				0	1	0	0
-ATI All-in-Wonder 9xxx					.*ATI.*All-in-Wonder 9.*				1	1	0	0
-ATI All-in-Wonder HD					.*ATI.*All-in-Wonder HD.*				1	1	1	3.3
-ATI All-in-Wonder X600					.*ATI.*All-in-Wonder X6.*				1	1	0	0
-ATI All-in-Wonder X800					.*ATI.*All-in-Wonder X8.*				1	1	1	2.1
-ATI All-in-Wonder X1800					.*ATI.*All-in-Wonder X18.*				3	1	0	0
-ATI All-in-Wonder X1900					.*ATI.*All-in-Wonder X19.*				3	1	0	0
-ATI All-in-Wonder PCI-E					.*ATI.*All-in-Wonder.*PCI-E.*			1	1	0	0
-ATI All-in-Wonder Radeon				.*ATI.*All-in-Wonder Radeon.*			0	1	0	0
-ATI ASUS ARES							.*ATI.*ASUS.*ARES.*						3	1	0	0
-ATI ASUS A9xxx							.*ATI.*ASUS.*A9.*						1	1	0	0
-ATI ASUS AH24xx							.*ATI.*ASUS.*AH24.*						1	1	1	3.3
-ATI ASUS AH26xx							.*ATI.*ASUS.*AH26.*						1	1	1	3.3
-ATI ASUS AH34xx							.*ATI.*ASUS.*AH34.*						1	1	1	3.3
-ATI ASUS AH36xx							.*ATI.*ASUS.*AH36.*						1	1	1	3.3
-ATI ASUS AH46xx							.*ATI.*ASUS.*AH46.*						2	1	1	3.3
-ATI ASUS AX3xx							.*ATI.*ASUS.*AX3.*						1	1	0	0
-ATI ASUS AX5xx							.*ATI.*ASUS.*AX5.*						1	1	0	0
-ATI ASUS AX8xx							.*ATI.*ASUS.*AX8.*						2	1	0	0
-ATI ASUS EAH24xx						.*ATI.*ASUS.*EAH24.*					2	1	0	0
-ATI ASUS EAH26xx						.*ATI.*ASUS.*EAH26.*					3	1	0	0
-ATI ASUS EAH29xx						.*ATI.*ASUS.*EAH29.*					3	1	0	0
-ATI ASUS EAH34xx						.*ATI.*ASUS.*EAH34.*					1	1	0	0
-ATI ASUS EAH36xx						.*ATI.*ASUS.*EAH36.*					2	1	0	0
-ATI ASUS EAH38xx						.*ATI.*ASUS.*EAH38.*					2	1	1	3.3
-ATI ASUS EAH43xx						.*ATI.*ASUS.*EAH43.*					2	1	1	3.3
-ATI ASUS EAH45xx						.*ATI.*ASUS.*EAH45.*					2	1	0	0
-ATI ASUS EAH48xx						.*ATI.*ASUS.*EAH48.*					3	1	1	3.3
-ATI ASUS EAH57xx						.*ATI.*ASUS.*EAH57.*					3	1	1	4.1
-ATI ASUS EAH58xx						.*ATI.*ASUS.*EAH58.*					5	1	1	4.1
-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	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	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 X18xx						.*ATI.*(Radeon|Diamond) X18.* ?.*		3	1	1	2.1
-ATI Radeon X17xx						.*ATI.*(Radeon|Diamond) X17.* ?.*		1	1	1	2.1
-ATI Radeon X16xx						.*ATI.*(Radeon|Diamond) X16.* ?.*		1	1	1	2.1
-ATI Radeon X15xx						.*ATI.*(Radeon|Diamond) X15.* ?.*		1	1	1	2.1
-ATI Radeon X13xx						.*ATI.*(Radeon|Diamond) X13.* ?.*		1	1	1	2.1
-ATI Radeon X1xxx						.*ATI.*(Radeon|Diamond) X1.. ?.*		0	1	1	2.1
-ATI Radeon X2xxx						.*ATI.*(Radeon|Diamond) X2.. ?.*		1	1	1	2.1
-ATI Display Adapter						.*ATI.*display adapter.*				1	1	1	4.1
-ATI FireGL 5200							.*ATI.*FireGL V52.*						1	1	1	2.1
-ATI FireGL 5xxx							.*ATI.*FireGL V5.*						2	1	1	3.3
-ATI FireGL								.*ATI.*Fire.*GL.*						4	1	1	4.2
-ATI FirePro M3900						.*ATI.*FirePro.*M39.*					2	1	0	0
-ATI FirePro M5800						.*ATI.*FirePro.*M58.*					3	1	0	0
-ATI FirePro M7740						.*ATI.*FirePro.*M77.*					3	1	0	0
-ATI FirePro M7820						.*ATI.*FirePro.*M78.*					5	1	1	4.2
-ATI FireMV								.*ATI.*FireMV.*							0	1	1	1.3
-ATI Generic								.*ATI.*Generic.*						0	0	0	0
-ATI Hercules 9800						.*ATI.*Hercules.*9800.*					1	1	0	0
-ATI IGP 340M							.*ATI.*IGP.*340M.*						0	0	0	0
-ATI M52									.*ATI.*M52.*							1	1	0	0
-ATI M54									.*ATI.*M54.*							1	1	0	0
-ATI M56									.*ATI.*M56.*							1	1	0	0
-ATI M71									.*ATI.*M71.*							1	1	0	0
-ATI M72									.*ATI.*M72.*							1	1	0	0
-ATI M76									.*ATI.*M76.*							3	1	0	0
-ATI Radeon HD 64xx						.*ATI.*AMD Radeon.* HD [67]4..[MG]		2	1	1	4.2
-ATI Radeon HD 65xx						.*ATI.*AMD Radeon.* HD [67]5..[MG]		2	1	1	4.2
-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	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	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 Mobility Radeon 9800				.*ATI.*Mobility.*98.*					1	1	0	0
-ATI Mobility Radeon 9700				.*ATI.*Mobility.*97.*					0	1	1	2.1
-ATI Mobility Radeon 9600				.*ATI.*Mobility.*96.*					1	1	1	2.1
-ATI Mobility Radeon HD 530v				.*ATI.*Mobility.*HD *530v.*				1	1	1	3.3
-ATI Mobility Radeon HD 540v				.*ATI.*Mobility.*HD *540v.*				1	1	1	3.3
-ATI Mobility Radeon HD 545v				.*ATI.*Mobility.*HD *545v.*				2	1	1	4
-ATI Mobility Radeon HD 550v				.*ATI.*Mobility.*HD *550v.*				3	1	1	4
-ATI Mobility Radeon HD 560v				.*ATI.*Mobility.*HD *560v.*				3	1	1	3.2
-ATI Mobility Radeon HD 565v				.*ATI.*Mobility.*HD *565v.*				3	1	1	3.3
-ATI Mobility Radeon HD 2300				.*ATI.*Mobility.*HD *23.*				0	1	1	2.1
-ATI Mobility Radeon HD 2400				.*ATI.*Mobility.*HD *24.*				1	1	1	3.3
-ATI Mobility Radeon HD 2600				.*ATI.*Mobility.*HD *26.*				1	1	1	3.3
-ATI Mobility Radeon HD 2700				.*ATI.*Mobility.*HD *27.*				3	1	0	0
-ATI Mobility Radeon HD 3100				.*ATI.*Mobility.*HD *31.*				0	1	0	0
-ATI Mobility Radeon HD 3200				.*ATI.*Mobility.*HD *32.*				0	1	0	0
-ATI Mobility Radeon HD 3400				.*ATI.*Mobility.*HD *34.*				1	1	1	3.3
-ATI Mobility Radeon HD 3600				.*ATI.*Mobility.*HD *36.*				1	1	1	4
-ATI Mobility Radeon HD 3800				.*ATI.*Mobility.*HD *38.*				3	1	1	3.3
-ATI Mobility Radeon HD 4200				.*ATI.*Mobility.*HD *42.*				1	1	1	4
-ATI Mobility Radeon HD 4300				.*ATI.*Mobility.*HD *43.*				1	1	1	4
-ATI Mobility Radeon HD 4500				.*ATI.*Mobility.*HD *45.*				1	1	1	4
-ATI Mobility Radeon HD 4600				.*ATI.*Mobility.*HD *46.*				2	1	1	3.3
-ATI Mobility Radeon HD 4800				.*ATI.*Mobility.*HD *48.*				3	1	1	3.3
-ATI Mobility Radeon HD 5100				.*ATI.*Mobility.*HD *51.*				3	1	1	3.2
-ATI Mobility Radeon HD 5300				.*ATI.*Mobility.*HD *53.*				3	1	0	0
-ATI Mobility Radeon HD 5400				.*ATI.*Mobility.*HD *54.*				2	1	1	4.2
-ATI Mobility Radeon HD 5500				.*ATI.*Mobility.*HD *55.*				3	1	0	0
-ATI Mobility Radeon HD 5600				.*ATI.*Mobility.*HD *56.*				3	1	1	4.2
-ATI Mobility Radeon HD 5700				.*ATI.*Mobility.*HD *57.*				3	1	1	4.1
-ATI Mobility Radeon HD 6200				.*ATI.*Mobility.*HD *62.*				3	1	0	0
-ATI Mobility Radeon HD 6300				.*ATI.*Mobility.*HD *63.*				3	1	1	4.2
-ATI Mobility Radeon HD 6400M			.*ATI.*Mobility.*HD *64.*				3	1	0	0
-ATI Mobility Radeon HD 6500M			.*ATI.*Mobility.*HD *65.*				5	1	1	4.2
-ATI Mobility Radeon HD 6600M			.*ATI.*Mobility.*HD *66.*				5	1	0	0
-ATI Mobility Radeon HD 6700M			.*ATI.*Mobility.*HD *67.*				5	1	0	0
-ATI Mobility Radeon HD 6800M			.*ATI.*Mobility.*HD *68.*				5	1	0	0
-ATI Mobility Radeon HD 6900M			.*ATI.*Mobility.*HD *69.*				5	1	0	0
-ATI Radeon HD 2300						.*ATI.*Radeon HD *23..					0	1	1	3.3
-ATI Radeon HD 2400						.*ATI.*Radeon HD *24..					1	1	1	4
-ATI Radeon HD 2600						.*ATI.*Radeon HD *26..					2	1	1	3.3
-ATI Radeon HD 2900						.*ATI.*Radeon HD *29..					3	1	1	3.3
-ATI Radeon HD 3000						.*ATI.*Radeon HD *30..					0	1	0	0
-ATI Radeon HD 3100						.*ATI.*Radeon HD *31..					1	1	0	0
-ATI Radeon HD 3200						.*ATI.*Radeon HD *32..					1	1	1	4
-ATI Radeon HD 3300						.*ATI.*Radeon HD *33..					1	1	1	3.3
-ATI Radeon HD 3400						.*ATI.*Radeon HD *34..					1	1	1	4
-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 4300						.*ATI.*Radeon HD *43..					2	1	1	4
-ATI Radeon HD 4400						.*ATI.*Radeon HD *44..					2	1	0	0
-ATI Radeon HD 4500						.*ATI.*Radeon HD *45..					2	1	1	3.3
-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 Radeon HD 5900						.*ATI.*Radeon HD *59..					4	1	1	4.2
-ATI Radeon HD 6200						.*ATI.*Radeon HD *62..					0	1	1	4.2
-ATI Radeon HD 6300						.*ATI.*Radeon HD *63..					1	1	1	4.2
-ATI Radeon HD 6400						.*ATI.*Radeon HD *64..					3	1	1	4.2
-ATI Radeon HD 6500						.*ATI.*Radeon HD *65..					3	1	1	4.2
-ATI Radeon HD 6600						.*ATI.*Radeon HD *66..					3	1	1	4.2
-ATI Radeon HD 6700						.*ATI.*Radeon HD *67..					3	1	1	4.2
-ATI Radeon HD 6800						.*ATI.*Radeon HD *68..					4	1	1	4.2
-ATI Radeon HD 6900						.*ATI.*Radeon HD *69..					5	1	1	4.2
-ATI Radeon OpenGL						.*ATI.*Radeon OpenGL.*					0	0	0	0
-ATI Radeon 2100							.*ATI.*Radeon 21..						0	1	1	2.1
-ATI Radeon 3000							.*ATI.*Radeon 30..						1	1	1	4
-ATI Radeon 3100							.*ATI.*Radeon 31..						0	1	1	3.3
-ATI Radeon 5xxx							.*ATI.*Radeon 5...						3	1	0	0
-ATI Radeon 7xxx							.*ATI.*Radeon 7...						0	1	1	2
-ATI Radeon 8xxx							.*ATI.*Radeon 8...						0	1	0	0
-ATI Radeon 9000							.*ATI.*Radeon 90..						0	1	1	1.3
-ATI Radeon 9100							.*ATI.*Radeon 91..						0	1	0	0
-ATI Radeon 9200							.*ATI.*Radeon 92..						0	1	1	1.3
-ATI Radeon 9500							.*ATI.*Radeon 95..						0	1	1	2.1
-ATI Radeon 9600							.*ATI.*Radeon 96..						0	1	1	2.1
-ATI Radeon 9700							.*ATI.*Radeon 97..						1	1	0	0
-ATI Radeon 9800							.*ATI.*Radeon 98..						1	1	1	2.1
-ATI Radeon RV250						.*ATI.*RV250.*							0	1	0	0
-ATI Radeon RV600						.*ATI.*RV6.*							1	1	0	0
-ATI Radeon RX700						.*ATI.*RX70.*							1	1	0	0
-ATI Radeon RX800						.*ATI.*Radeon *RX80.*					2	1	0	0
-ATI RS880M								.*ATI.*RS880M							1	1	0	0
-ATI Radeon RX9550						.*ATI.*RX9550.*							1	1	0	0
-ATI Radeon VE							.*ATI.*Radeon.*VE.*						0	0	0	0
-ATI Radeon X300							.*ATI.*Radeon *X3.*						1	1	1	2.1
-ATI Radeon X400							.*ATI.*Radeon ?X4.*						0	1	0	0
-ATI Radeon X500							.*ATI.*Radeon ?X5.*						1	1	1	2.1
-ATI Radeon X600							.*ATI.*Radeon ?X6.*						1	1	1	2.1
-ATI Radeon X700							.*ATI.*Radeon ?X7.*						2	1	1	2.1
-ATI Radeon X800							.*ATI.*Radeon ?X8.*						1	1	1	2.1
-ATI Radeon X900							.*ATI.*Radeon ?X9.*						2	1	0	0
-ATI Radeon Xpress						.*ATI.*Radeon Xpress.*					0	1	1	2.1
-ATI Rage 128							.*ATI.*Rage 128.*						0	1	0	0
-ATI R300 (9700)							.*R300.*								0	1	1	2.1
-ATI R350 (9800)							.*R350.*								1	1	0	0
-ATI R580 (X1900)						.*R580.*								3	1	0	0
-ATI RC410 (Xpress 200)					.*RC410.*								0	0	0	0
-ATI RS48x (Xpress 200x)					.*RS48.*								0	0	0	0
-ATI RS600 (Xpress 3200)					.*RS600.*								0	0	0	0
-ATI RV350 (9600)						.*RV350.*								0	1	0	0
-ATI RV370 (X300)						.*RV370.*								0	1	0	0
-ATI RV410 (X700)						.*RV410.*								1	1	0	0
-ATI RV515								.*RV515.*								1	1	0	0
-ATI RV570 (X1900 GT/PRO)				.*RV570.*								3	1	0	0
-ATI RV380								.*RV380.*								0	1	0	0
-ATI RV530								.*RV530.*								1	1	0	0
-ATI RX480 (Xpress 200P)					.*RX480.*								0	1	0	0
-ATI RX700								.*RX700.*								1	1	0	0
-AMD ANTILLES (HD 6990)					.*(AMD|ATI).*Antilles.*					3	1	0	0
-AMD BARTS (HD 6800)						.*(AMD|ATI).*Barts.*					3	1	1	2.1
-AMD CAICOS (HD 6400)					.*(AMD|ATI).*Caicos.*					3	1	0	0
-AMD CAYMAN (HD 6900)					.*(AMD|ATI).*(Cayman|CAYMAM).*			3	1	0	0
-AMD CEDAR (HD 5450)						.*(AMD|ATI).*Cedar.*					2	1	0	0
-AMD CYPRESS (HD 5800)					.*(AMD|ATI).*Cypress.*					3	1	0	0
-AMD HEMLOCK (HD 5970)					.*(AMD|ATI).*Hemlock.*					3	1	0	0
-AMD JUNIPER (HD 5700)					.*(AMD|ATI).*Juniper.*					3	1	0	0
-AMD PARK								.*(AMD|ATI).*Park.*						3	1	0	0
-AMD REDWOOD (HD 5500/5600)				.*(AMD|ATI).*Redwood.*					3	1	0	0
-AMD TURKS (HD 6500/6600)				.*(AMD|ATI).*Turks.*					3	1	0	0
-AMD RS780 (HD 3200)						.*RS780.*								0	1	1	2.1
-AMD RS880 (HD 4200)						.*RS880.*								0	1	1	3.2
-AMD RV610 (HD 2400)						.*RV610.*								1	1	0	0
-AMD RV620 (HD 3400)						.*RV620.*								1	1	0	0
-AMD RV630 (HD 2600)						.*RV630.*								2	1	0	0
-AMD RV635 (HD 3600)						.*RV635.*								3	1	0	0
-AMD RV670 (HD 3800)						.*RV670.*								3	1	0	0
-AMD R680 (HD 3870 X2)					.*R680.*								3	1	0	0
-AMD R700 (HD 4800 X2)					.*R700.*								3	1	0	0
-AMD RV710 (HD 4300)						.*RV710.*								0	1	1	1.4
-AMD RV730 (HD 4600)						.*RV730.*								3	1	0	0
-AMD RV740 (HD 4700)						.*RV740.*								3	1	0	0
-AMD RV770 (HD 4800)						.*RV770.*								3	1	0	0
-AMD RV790 (HD 4800)						.*RV790.*								3	1	0	0
-ATI 760G/Radeon 3000					.*ATI.*AMD 760G.*						1	1	1	3.3
-ATI 780L/Radeon 3000					.*ATI.*AMD 780L.*						1	1	0	0
-ATI Radeon DDR							.*ATI.*Radeon ?DDR.*					0	1	0	0
-ATI FirePro 2000						.*ATI.*FirePro 2.*						2	1	1	4.1
-ATI FirePro 3000						.*ATI.*FirePro V3.*						2	1	0	0
-ATI FirePro 4000						.*ATI.*FirePro V4.*						2	1	0	0
-ATI FirePro 5000						.*ATI.*FirePro V5.*						3	1	0	0
-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	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 845G								.*Intel.*845G							0	0	1	1.4
-Intel 855GM								.*Intel.*855GM							0	0	1	1.4
-Intel 865G								.*Intel.*865G							0	0	1	1.4
-Intel 900								.*Intel.*900.*900						0	0	0	0
-Intel 915GM								.*Intel.*915GM							0	0	1	1.4
-Intel 915G								.*Intel.*915G							0	0	1	1.4
-Intel 945GM								.*Intel.*945GM.*						0	1	1	1.4
-Intel 945G								.*Intel.*945G.*							0	1	1	1.4
-Intel 950								.*Intel.*950.*							0	1	1	1.4
-Intel 965								.*Intel.*965.*							0	1	1	2.1
-Intel G33								.*Intel.*G33.*							1	0	1	1.4
-Intel G41								.*Intel.*G41.*							1	1	1	2.1
-Intel G45								.*Intel.*G45.*							1	1	1	2.1
-Intel Bear Lake							.*Intel.*Bear Lake.*					1	0	1	1.4
-Intel Broadwater						.*Intel.*Broadwater.*					0	0	1	1.4
-Intel Brookdale							.*Intel.*Brookdale.*					0	0	1	1.3
-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	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	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
-Intel Mobile 4 Series					.*Intel.*Mobile.* 4 Series.*			0	1	1	2.1
-Intel 4 Series Internal					.*Intel.* 4 Series Internal.*			1	1	1	2.1
-Intel Media Graphics HD					.*Intel.*Media Graphics HD.*			0	1	0	0
-Intel Montara							.*Intel.*Montara.*						0	0	1	1.3
-Intel Pineview							.*Intel.*Pineview.*						0	1	1	1.4
-Intel Springdale						.*Intel.*Springdale.*					0	0	1	1.3
-Intel Grantsdale						.*Intel.*Grantsdale.*					1	1	0	0
-Intel Q45/Q43							.*Intel.*Q4.*							1	1	1	2.1
-Intel B45/B43							.*Intel.*B4.*							1	1	1	2.1
-Intel 3D-Analyze						.*Intel.*3D-Analyze.*					2	1	0	0
-Matrox									.*Matrox.*								0	0	0	0
-Mesa									.*Mesa.*								1	0	1	2.1
-Gallium									.*Gallium.*								1	1	1	2.1
-NVIDIA G100M							.*NVIDIA .*100M.*						4	1	1	3.3
-NVIDIA G102M							.*NVIDIA .*102M.*						1	1	1	3.3
-NVIDIA G103M							.*NVIDIA .*103M.*						2	1	1	3.3
-NVIDIA G105M							.*NVIDIA .*105M.*						2	1	1	3.3
-NVIDIA G 110M							.*NVIDIA .*110M.*						1	1	1	3.3
-NVIDIA G 120M							.*NVIDIA .*120M.*						1	1	1	3.3
-NVIDIA G 205M							.*NVIDIA .*205M.*						1	1	0	0
-NVIDIA G 410M							.*NVIDIA .*410M.*						3	1	1	4.2
-NVIDIA GT 120M							.*NVIDIA .*GT *12*M.*					3	1	1	3.3
-NVIDIA GT 130M							.*NVIDIA .*GT *13*M.*					3	1	1	3.3
-NVIDIA GT 140M							.*NVIDIA .*GT *14*M.*					3	1	1	3.3
-NVIDIA GT 150M							.*NVIDIA .*GTS *15*M.*					2	1	0	0
-NVIDIA GTS 160M							.*NVIDIA .*GTS *16*M.*					2	1	0	0
-NVIDIA G210M							.*NVIDIA .*G21*M.*						3	1	0	0
-NVIDIA GT 220M							.*NVIDIA .*GT *22*M.*					3	1	1	3.3
-NVIDIA GT 230M							.*NVIDIA .*GT *23*M.*					3	1	1	3.3
-NVIDIA GT 240M							.*NVIDIA .*GT *24*M.*					3	1	1	3.3
-NVIDIA GTS 250M							.*NVIDIA .*GTS *25*M.*					3	1	0	0
-NVIDIA GTS 260M							.*NVIDIA .*GTS *26*M.*					3	1	0	0
-NVIDIA GTX 260M							.*NVIDIA .*GTX *26*M.*					3	1	0	0
-NVIDIA GTX 270M							.*NVIDIA .*GTX *27*M.*					3	1	0	0
-NVIDIA GTX 280M							.*NVIDIA .*GTX *28*M.*					3	1	0	0
-NVIDIA 300M								.*NVIDIA .*30*M.*						3	1	1	4.2
-NVIDIA G 310M							.*NVIDIA .*31*M.*						2	1	0	0
-NVIDIA GT 320M							.*NVIDIA .*GT *32*M.*					3	1	0	0
-NVIDIA GT 325M							.*NVIDIA .*GT *32*M.*					3	1	1	3.3
-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 *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 GT 430M							.*NVIDIA .*GT *43*M.*					3	1	1	4.2
-NVIDIA GT 440M							.*NVIDIA .*GT *44*M.*					3	1	1	4.2
-NVIDIA GT 450M							.*NVIDIA .*GT *45*M.*					3	1	0	0
-NVIDIA GTX 460M							.*NVIDIA .*GTX *46*M.*					4	1	1	4.2
-NVIDIA GTX 470M							.*NVIDIA .*GTX *47*M.*					3	1	0	0
-NVIDIA GTX 480M							.*NVIDIA .*GTX *48*M.*					3	1	1	4.2
-NVIDIA GT 520M							.*NVIDIA .*GT *52*M.*					3	1	1	4.2
-NVIDIA GT 530M							.*NVIDIA .*GT *53*M.*					3	1	1	4.2
-NVIDIA GT 540M							.*NVIDIA .*GT *54*M.*					3	1	1	4.2
-NVIDIA GT 550M							.*NVIDIA .*GT *55*M.*					3	1	1	4.2
-NVIDIA GTX 560M							.*NVIDIA .*GTX *56*M.*					3	1	0	0
-NVIDIA GTX 570M							.*NVIDIA .*GTX *57*M.*					5	1	0	0
-NVIDIA GTX 580M							.*NVIDIA .*GTX *58*M.*					5	1	1	4.2
-NVIDIA 610M								.*NVIDIA.* 61*M.*						3	1	1	4.2
-NVIDIA GT 620M							.*NVIDIA .*GT *62*M.*					3	1	0	0
-NVIDIA GT 630M							.*NVIDIA .*GT *63*M.*					3	1	0	0
-NVIDIA GT 640M							.*NVIDIA .*GT *64*M.*					3	1	0	0
-NVIDIA GT 650M							.*NVIDIA .*GT *65*M.*					3	1	0	0
-NVIDIA GTX 660M							.*NVIDIA .*GTX *66*M.*					5	1	0	0
-NVIDIA GTX 670M							.*NVIDIA .*GTX *67*M.*					5	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	3
-NVIDIA GT 130							.*NVIDIA .*GT *13.*						2	1	0	3.3
-NVIDIA GTS 150							.*NVIDIA .*GTS *15.*					2	1	0	0
-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	3.3
-NVIDIA GTX 280							.*NVIDIA .*GTX *28.*					4	1	1	3.3
-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	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	3.3
-NVIDIA GT 420							.*NVIDIA .*GT *42.*						3	1	1	4.2
-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.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.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.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	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 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 C51								.*NVIDIA .*C51.*						0	1	1	2
-NVIDIA G72								.*NVIDIA .*G72.*						1	1	0	0
-NVIDIA G73								.*NVIDIA .*G73.*						1	1	0	0
-NVIDIA G84								.*NVIDIA .*G84.*						2	1	0	0
-NVIDIA G86								.*NVIDIA .*G86.*						3	1	0	0
-NVIDIA G92								.*NVIDIA .*G92.*						3	1	0	0
-NVIDIA GeForce							.*GeForce 256.*							0	0	0	0
-NVIDIA GeForce 2						.*GeForce ?2 ?.*						0	1	1	1.5
-NVIDIA GeForce 3						.*GeForce ?3 ?.*						2	1	1	2.1
-NVIDIA GeForce 3 Ti						.*GeForce ?3 Ti.*						0	1	0	0
-NVIDIA GeForce 4						.*NVIDIA .*GeForce ?4.*					0	1	1	1.5
-NVIDIA GeForce 4 Go						.*NVIDIA .*GeForce ?4.*Go.*				0	1	0	0
-NVIDIA GeForce 4 MX						.*NVIDIA .*GeForce ?4 MX.*				0	1	0	0
-NVIDIA GeForce 4 PCX					.*NVIDIA .*GeForce ?4 PCX.*				0	1	0	0
-NVIDIA GeForce 4 Ti						.*NVIDIA .*GeForce ?4 Ti.*				0	1	0	0
-NVIDIA GeForce 6100						.*NVIDIA .*GeForce 61.*					3	1	1	4.2
-NVIDIA GeForce 6200						.*NVIDIA .*GeForce 62.*					0	1	1	2.1
-NVIDIA GeForce 6500						.*NVIDIA .*GeForce 65.*					1	1	1	2.1
-NVIDIA GeForce 6600						.*NVIDIA .*GeForce 66.*					2	1	1	2.1
-NVIDIA GeForce 6700						.*NVIDIA .*GeForce 67.*					2	1	1	2.1
-NVIDIA GeForce 6800						.*NVIDIA .*GeForce 68.*					1	1	1	2.1
-NVIDIA GeForce 7000						.*NVIDIA .*GeForce 70.*					1	1	1	2.1
-NVIDIA GeForce 7100						.*NVIDIA .*GeForce 71.*					1	1	1	2.1
-NVIDIA GeForce 7200						.*NVIDIA .*GeForce 72.*					1	1	0	0
-NVIDIA GeForce 7300						.*NVIDIA .*GeForce 73.*					1	1	1	2.1
-NVIDIA GeForce 7500						.*NVIDIA .*GeForce 75.*					2	1	1	2.1
-NVIDIA GeForce 7600						.*NVIDIA .*GeForce 76.*					2	1	1	2.1
-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	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 8500						.*NVIDIA .*GeForce 85.*					2	1	1	3.3
-NVIDIA GeForce 8600M					.*NVIDIA .*GeForce 8600M.*				2	1	1	3.3
-NVIDIA GeForce 8600						.*NVIDIA .*GeForce 86.*					3	1	1	3.3
-NVIDIA GeForce 8700M					.*NVIDIA .*GeForce 8700M.*				2	1	1	3.3
-NVIDIA GeForce 8700						.*NVIDIA .*GeForce 87.*					3	1	0	0
-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	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 9400						.*NVIDIA .*GeForce 94.*					3	1	1	3.3
-NVIDIA GeForce 9500M					.*NVIDIA .*GeForce 9500M.*				1	1	1	3.3
-NVIDIA GeForce 9500						.*NVIDIA .*GeForce 95.*					3	1	1	3.3
-NVIDIA GeForce 9600M					.*NVIDIA .*GeForce 9600M.*				2	1	1	3.3
-NVIDIA GeForce 9600						.*NVIDIA .*GeForce 96.*					3	1	1	3.3
-NVIDIA GeForce 9700M					.*NVIDIA .*GeForce 9700M.*				0	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	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 GeForce FX 5700					.*NVIDIA .*GeForce FX 57.*				0	1	1	2.1
-NVIDIA GeForce FX 5800					.*NVIDIA .*GeForce FX 58.*				1	1	0	0
-NVIDIA GeForce FX 5900					.*NVIDIA .*GeForce FX 59.*				1	1	1	2.1
-NVIDIA GeForce FX Go5100				.*NVIDIA .*GeForce FX Go51.*			0	1	0	0
-NVIDIA GeForce FX Go5200				.*NVIDIA .*GeForce FX Go52.*			0	1	0	0
-NVIDIA GeForce FX Go5300				.*NVIDIA .*GeForce FX Go53.*			0	1	0	0
-NVIDIA GeForce FX Go5500				.*NVIDIA .*GeForce FX Go55.*			0	1	0	0
-NVIDIA GeForce FX Go5600				.*NVIDIA .*GeForce FX Go56.*			0	1	1	2.1
-NVIDIA GeForce FX Go5700				.*NVIDIA .*GeForce FX Go57.*			1	1	1	1.5
-NVIDIA GeForce FX Go5800				.*NVIDIA .*GeForce FX Go58.*			1	1	0	0
-NVIDIA GeForce FX Go5900				.*NVIDIA .*GeForce FX Go59.*			1	1	0	0
-NVIDIA GeForce FX Go5xxx				.*NVIDIA .*GeForce FX Go.*				0	1	0	0
-NVIDIA GeForce Go 6100					.*NVIDIA .*GeForce Go 61.*				0	1	1	2.1
-NVIDIA GeForce Go 6200					.*NVIDIA .*GeForce Go 62.*				0	1	0	0
-NVIDIA GeForce Go 6400					.*NVIDIA .*GeForce Go 64.*				1	1	1	2
-NVIDIA GeForce Go 6500					.*NVIDIA .*GeForce Go 65.*				1	1	0	0
-NVIDIA GeForce Go 6600					.*NVIDIA .*GeForce Go 66.*				0	1	1	2.1
-NVIDIA GeForce Go 6700					.*NVIDIA .*GeForce Go 67.*				1	1	0	0
-NVIDIA GeForce Go 6800					.*NVIDIA .*GeForce Go 68.*				0	1	1	2.1
-NVIDIA GeForce Go 7200					.*NVIDIA .*GeForce Go 72.*				1	1	0	0
-NVIDIA GeForce Go 7300 LE				.*NVIDIA .*GeForce Go 73.*LE.*			1	1	0	0
-NVIDIA GeForce Go 7300					.*NVIDIA .*GeForce Go 73.*				1	1	1	2.1
-NVIDIA GeForce Go 7400					.*NVIDIA .*GeForce Go 74.*				1	1	1	2.1
-NVIDIA GeForce Go 7600					.*NVIDIA .*GeForce Go 76.*				1	1	1	2.1
-NVIDIA GeForce Go 7700					.*NVIDIA .*GeForce Go 77.*				0	1	1	2.1
-NVIDIA GeForce Go 7800					.*NVIDIA .*GeForce Go 78.*				2	1	0	0
-NVIDIA GeForce Go 7900					.*NVIDIA .*GeForce Go 79.*				1	1	1	2.1
-NVIDIA D9M								.*NVIDIA .*D9M.*						1	1	0	0
-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	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 NB9M								.*NVIDIA .*NB9M.*						1	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	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 NV36								.*NVIDIA .*NV36.*						1	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	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 MCP68							.*NVIDIA .*MCP68.*						1	1	0	0
-NVIDIA MCP73							.*NVIDIA .*MCP73.*						1	1	0	0
-NVIDIA MCP77							.*NVIDIA .*MCP77.*						1	1	0	0
-NVIDIA MCP78							.*NVIDIA .*MCP78.*						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	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	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	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	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	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	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	3.3
-NVIDIA Quadro FX 4800					.*NVIDIA .*Quadro *FX *4800.*			3	1	0	0
-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	4.1
-NVIDIA Quadro NVS 5100M					.*NVIDIA .*NVS *5100M.*					2	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
-S3										.*S3 Graphics.*							0	0	1	1.4
-SiS										SiS.*									0	0	1	1.5
-Trident									Trident.*								0	0	0	0
-Tungsten Graphics						Tungsten.*								0	0	0	0
-XGI										XGI.*									0	0	0	0
-VIA										VIA.*									0	0	0	0
-Apple Generic							Apple.*Generic.*						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
+3Dfx									.*3Dfx.*											0	0	0	0
+3Dlabs									.*3Dlabs.*											0	0	0	0
+ATI 3D-Analyze							.*ATI.*3D-Analyze.*									0	0	0	0
+ATI All-in-Wonder 7500					.*ATI.*All-in-Wonder 75.*							0	1	0	0
+ATI All-in-Wonder 8500					.*ATI.*All-in-Wonder 85.*							0	1	0	0
+ATI All-in-Wonder 9200					.*ATI.*All-in-Wonder 92.*							0	1	0	0
+ATI All-in-Wonder 9xxx					.*ATI.*All-in-Wonder 9.*							1	1	0	2.1
+ATI All-in-Wonder HD					.*ATI.*All-in-Wonder HD.*							1	1	1	3.3
+ATI All-in-Wonder X600					.*ATI.*All-in-Wonder X6.*							1	1	0	0
+ATI All-in-Wonder X800					.*ATI.*All-in-Wonder X8.*							1	1	1	2.1
+ATI All-in-Wonder X1800					.*ATI.*All-in-Wonder X18.*							3	1	0	0
+ATI All-in-Wonder X1900					.*ATI.*All-in-Wonder X19.*							3	1	0	0
+ATI All-in-Wonder PCI-E					.*ATI.*All-in-Wonder.*PCI-E.*						1	1	0	0
+ATI All-in-Wonder Radeon				.*ATI.*All-in-Wonder Radeon.*						0	1	0	0
+ATI Radeon X1300						.*ATI.*(ASUS|Radeon).*X13.*							2	1	1	2.1
+ATI Radeon X1500						.*ATI.*(ASUS|Radeon).*X15.*							2	1	1	2.1
+ATI Radeon X1600						.*ATI.*(ASUS|Radeon).*X16.*							2	1	1	2.1
+ATI Radeon X1700						.*ATI.*(ASUS|Radeon).*X17.*							2	1	1	2.1
+ATI Radeon X1800						.*ATI.*(Radeon|Diamond) X18.* ?.*					3	1	1	2.1
+ATI Radeon X1900						.*ATI.*(Radeon|Diamond|ASUS) X19.* ?.*				2	1	1	2.1
+ATI Radeon X17xx						.*ATI.*(Radeon|Diamond) X17.* ?.*					1	1	1	2.1
+ATI Radeon X16xx						.*ATI.*(Radeon|Diamond) X17.* ?.*					1	1	1	2.1
+ATI Radeon X28xx						.*ATI.*(Radeon|Diamond) X28.. ?.*					1	1	1	2.1
+ATI Display Adapter						.*ATI.*display adapter.*							1	1	1	4.1
+ATI FireGL 5200							.*ATI.*FireGL V52.*									1	1	1	2.1
+ATI FireGL 5xxx							.*ATI.*FireGL V5.*									2	1	1	3.3
+ATI FireGL								.*ATI.*Fire.*GL.*									4	1	1	4.2
+ATI FirePro M3900						.*ATI.*FirePro.*M39.*								2	1	0	4.1
+ATI FirePro M5800						.*ATI.*FirePro.*M58.*								3	1	0	0
+ATI FirePro M7740						.*ATI.*FirePro.*M77.*								3	1	0	0
+ATI FirePro M7820						.*ATI.*FirePro.*M78.*								5	1	1	4.2
+ATI FireMV								.*ATI.*FireMV.*										0	1	1	3.2
+ATI Generic								.*ATI.*Generic.*									0	0	0	0
+ATI Hercules 9800						.*ATI.*Hercules.* 9800.*							1	1	0	0
+ATI IGP 340M							.*ATI.*IGP.* 34[0-9]M.*								0	0	0	1.3
+ATI M52									.*ATI.*M52.*										1	1	0	0
+ATI M54									.*ATI.*M54.*										1	1	0	0
+ATI M56									.*ATI.*M56.*										1	1	0	0
+ATI M71									.*ATI.*M71.*										1	1	0	0
+ATI M72									.*ATI.*M72.*										1	1	0	0
+ATI M76									.*ATI.*M76.*										3	1	0	0
+ATI Radeon HD 6300M						.*ATI.*AMD Radeon.* (HD|HD )63..M					2	1	1	4.2
+ATI Radeon HD 6400M						.*ATI.*AMD Radeon.* (HD|HD )64..M					2	1	1	4.2
+ATI Radeon HD 6500M						.*ATI.*AMD Radeon.* (HD|HD )65..M					2	1	1	4.2
+ATI Radeon HD 6600M						.*ATI.*AMD Radeon.* (HD 6|6)6..M					3	1	1	4.2
+ATI Radeon HD 6700M						.*ATI.*AMD Radeon.* (HD|HD )67..M					3	1	1	4.2
+ATI Radeon HD 6800M						.*ATI.*AMD Radeon.* (HD|HD )68..M					3	1	1	4.2
+ATI Radeon HD 6300G						.*ATI.*AMD Radeon.* (HD|HD )63..G					2	1	1	4.2
+ATI Radeon HD 6400G						.*ATI.*AMD Radeon.* (HD|HD )64..G					2	1	1	4.2
+ATI Radeon HD 6500G						.*ATI.*AMD Radeon.* (HD|HD )65..G					2	1	1	4.2
+ATI Radeon HD 6600G						.*ATI.*AMD Radeon.* (HD|HD )66..G					3	1	1	4.2
+ATI Radeon HD 7100						.*ATI.*(Radeon|ASUS).* (HD|HD )71.*					2	1	0	0
+ATI Radeon HD 7200						.*ATI.*(Radeon|ASUS).* (HD|HD )72.*					2	1	0	4.2
+ATI Radeon HD 7300						.*ATI.*(Radeon|ASUS).* (HD|HD )73.*					2	1	0	4.2
+ATI Radeon HD 7400						.*ATI.*(Radeon|ASUS).* (HD|HD )74.*					2	1	0	4.2
+ATI Radeon HD 7500						.*ATI.*(Radeon|ASUS).* (HD|HD )75.*					3	1	1	4.2
+ATI Radeon HD 7600						.*ATI.*(Radeon|ASUS).* (HD|HD )76.*					3	1	0	4.2
+ATI Radeon HD 7700						.*ATI.*(Radeon|ASUS).* (HD|HD )77.*					4	1	1	4.2
+ATI Radeon HD 7800						.*ATI.*(Radeon|ASUS).* (HD|HD )78.*					5	1	1	4.2
+ATI Radeon HD 7900						.*ATI.*(Radeon|ASUS).* (HD|HD )79.*					5	1	1	4.2
+ATI Radeon HD 7000 Series				.*ATI.*(Radeon|ASUS).* (HD|HD )7000 Series.*		3	1	1	4.2
+ATI Mobility Radeon 4100				.*ATI.*Mobility.* 41..								1	1	1	3.3
+ATI Mobility Radeon 5000				.*ATI.*Mobility.* 50..								1	1	1	4.2
+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 Mobility Radeon 9800				.*ATI.*Mobility.* 98.*								1	1	0	0
+ATI Mobility Radeon 9700				.*ATI.*Mobility.* 97.*								0	1	1	2.1
+ATI Mobility Radeon 9600				.*ATI.*Mobility.* 96.*								1	1	1	2.1
+ATI Mobility Radeon HD 530v				.*ATI.*Mobility.*HD 530v.*							1	1	1	3.3
+ATI Mobility Radeon HD 540v				.*ATI.*Mobility.*HD 540v.*							1	1	1	3.3
+ATI Mobility Radeon HD 545v				.*ATI.*Mobility.*HD 545v.*							2	1	1	4
+ATI Mobility Radeon HD 550v				.*ATI.*Mobility.*HD 550v.*							3	1	1	4
+ATI Mobility Radeon HD 560v				.*ATI.*Mobility.*HD 560v.*							3	1	1	3.2
+ATI Mobility Radeon HD 565v				.*ATI.*Mobility.*HD 565v.*							3	1	1	3.3
+ATI Mobility Radeon HD 2300				.*ATI.*Mobility.*HD 23.*							0	1	1	2.1
+ATI Mobility Radeon HD 2400				.*ATI.*Mobility.*HD 24.*							1	1	1	3.3
+ATI Mobility Radeon HD 2600				.*ATI.*Mobility.*HD 26.*							1	1	1	3.3
+ATI Mobility Radeon HD 2700				.*ATI.*Mobility.*HD 27.*							3	1	0	0
+ATI Mobility Radeon HD 3100				.*ATI.*Mobility.*HD 31.*							0	1	0	0
+ATI Mobility Radeon HD 3200				.*ATI.*Mobility.*HD 32.*							0	1	0	0
+ATI Mobility Radeon HD 3400				.*ATI.*Mobility.*HD 34.*							1	1	1	4
+ATI Mobility Radeon HD 3600				.*ATI.*Mobility.*HD 36.*							1	1	1	4
+ATI Mobility Radeon HD 3800				.*ATI.*Mobility.*HD 38.*							3	1	1	3.3
+ATI Mobility Radeon HD 4200				.*ATI.*Mobility.*HD 42.*							1	1	1	4
+ATI Mobility Radeon HD 4300				.*ATI.*Mobility.*(HD |HD)43.*						1	1	1	4
+ATI Mobility Radeon HD 4500				.*ATI.*Mobility.*HD 45.*							1	1	1	4
+ATI Mobility Radeon HD 4600				.*ATI.*Mobility.*HD 46.*							2	1	1	3.3
+ATI Mobility Radeon HD 4800				.*ATI.*Mobility.*HD 48.*							3	1	1	3.3
+ATI Mobility Radeon HD 5000 Series		.*ATI.*Mobility.*HD 50.*							3	1	1	3.2
+ATI Mobility Radeon HD 5100				.*ATI.*Mobility.*HD 51.*							3	1	1	3.2
+ATI Mobility Radeon HD 5300				.*ATI.*Mobility.*HD 53.*							3	1	0	0
+ATI Mobility Radeon HD 5400				.*ATI.*Mobility.*HD 54.*							2	1	1	4.2
+ATI Mobility Radeon HD 5500				.*ATI.*Mobility.*HD 55.*							3	1	0	4.2
+ATI Mobility Radeon HD 5600				.*ATI.*Mobility.*HD 56.*							3	1	1	4.2
+ATI Mobility Radeon HD 5700				.*ATI.*Mobility.*HD 57.*							3	1	1	4.1
+ATI Mobility Radeon HD 6200				.*ATI.*Mobility.*HD 62.*							3	1	0	0
+ATI Mobility Radeon HD 6300				.*ATI.*Mobility.*HD 63.*							3	1	1	4.2
+ATI Mobility Radeon HD 6400M			.*ATI.*Mobility.*HD 64.*							3	1	0	0
+ATI Mobility Radeon HD 6500M			.*ATI.*Mobility.*HD 65.*							5	1	1	4.2
+ATI Mobility Radeon HD 6600M			.*ATI.*Mobility.*HD 66.*							5	1	0	0
+ATI Mobility Radeon HD 6700M			.*ATI.*Mobility.*HD 67.*							5	1	0	0
+ATI Mobility Radeon HD 6800M			.*ATI.*Mobility.*HD 68.*							5	1	0	0
+ATI Mobility Radeon HD 6900M			.*ATI.*Mobility.*HD 69.*							5	1	0	0
+ATI Mobility Radeon Graphics			.*ATI Mobility Radeon Graphics.*					1	1	0	4
+ATI Radeon HD 2300						.*ATI.*Radeon.* (HD|HD )23..						0	1	1	3.3
+ATI Radeon HD 2400						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)24..				1	1	1	4
+ATI Radeon HD 2600						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)26..				2	1	1	4
+ATI Radeon HD 2900						.*ATI.*Radeon.* (HD|HD )29..						3	1	1	3.3
+ATI Radeon HD 3000						.*ATI.*Radeon.* (HD|HD )30..						0	1	0	0
+ATI Radeon HD 3100						.*ATI.*Radeon.* (HD|HD )31..						1	1	0	0
+ATI Radeon HD 3200						.*ATI.*Radeon.* (HD|HD )32..						1	1	1	4
+ATI Radeon HD 3300						.*ATI.*Radeon.* (HD|HD )33..						1	1	1	3.3
+ATI Radeon HD 3400						.*ATI.*(Radeon|ASUS).* (HD|HD |AH|EAH)34..			1	1	1	4
+ATI Radeon HD 3500						.*ATI.*Radeon.* (HD|HD )35..						2	1	0	0
+ATI Radeon HD 3600						.*ATI.*(Radeon|ASUS).* (HD|HD |AH|EAH)36..			3	1	1	4
+ATI Radeon HD 3700						.*ATI.*Radeon.* (HD|HD )37..						3	1	0	3.3
+ATI HD3700								.*ATI.* HD37..										3	1	0	3.3
+ATI Radeon HD 3800						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)38..				3	1	1	4
+ATI Radeon HD 4100						.*ATI.*Radeon.* (HD|HD )41..						1	1	0	0
+ATI Radeon HD 4200						.*ATI.*Radeon.* (HD|HD )42..						1	1	1	4
+ATI Radeon HD 4300						.*ATI.*(Radeon|ASUS).* (HD4|HD 4|EAH4|4)3..			2	1	1	4
+ATI Radeon HD 4400						.*ATI.*Radeon.* (HD|HD )44..						2	1	0	0
+ATI Radeon HD 4500						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)45..				2	1	1	3.3
+ATI Radeon HD 4600						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)46..				3	1	1	4
+ATI Radeon HD 4700						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)47..				3	1	1	3.3
+ATI Radeon HD 4800						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)48..				3	1	1	4
+ATI Radeon HD 5400						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)54..				3	1	1	4.2
+ATI Radeon HD 5500						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)55..				3	1	1	4.2
+ATI Radeon HD 5600						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)56..				3	1	1	4.2
+ATI Radeon HD 5700						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)57..				3	1	1	4.2
+ATI Radeon HD 5800						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)58..				4	1	1	4.2
+ATI Radeon HD 5900						.*ATI.*Radeon.* (HD|HD )59..						4	1	1	4.2
+ATI Radeon HD 6200						.*ATI.*Radeon.* (HD|HD )62..						0	1	1	4.2
+ATI Radeon HD 6300						.*ATI.*Radeon.* (HD|HD )63..						1	1	1	4.2
+ATI Radeon HD 6400						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)64..				3	1	1	4.2
+ATI Radeon HD 6500						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)65..				3	1	1	4.2
+ATI Radeon HD 6600						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)66..				3	1	1	4.2
+ATI Radeon HD 6700						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)67..				3	1	1	4.2
+ATI Radeon HD 6800						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)68..				4	1	1	4.2
+ATI Radeon HD 6900						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)69..				5	1	1	4.2
+ATI Radeon OpenGL						.*ATI.*Radeon OpenGL.*								0	0	0	0
+ATI Radeon 2100							.*ATI.*Radeon 21..									0	1	1	2.1
+ATI Radeon 3000							.*ATI.*Radeon 30..									1	1	1	4
+ATI Radeon 3100							.*ATI.*Radeon 31..									0	1	1	3.3
+ATI Radeon 5xxx							.*ATI.*Radeon 5...									3	1	0	0
+ATI Radeon 7xxx							.*ATI.*Radeon 7...									0	1	1	2
+ATI Radeon 8xxx							.*ATI.*Radeon 8...									0	1	0	0
+ATI Radeon 9000							.*ATI.*Radeon 90..									0	1	1	1.3
+ATI Radeon 9100							.*ATI.*Radeon 91..									0	1	0	0
+ATI Radeon 9200							.*ATI.*Radeon 92..									0	1	1	1.3
+ATI Radeon 9500							.*ATI.*Radeon 95..									0	1	1	2.1
+ATI Radeon 9600							.*ATI.*Radeon 96..									0	1	1	2.1
+ATI Radeon 9700							.*ATI.*Radeon 97..									1	1	0	0
+ATI Radeon 9800							.*ATI.*Radeon 98..									1	1	1	2.1
+ATI Radeon RV250						.*ATI.*RV250.*										0	1	0	0
+ATI Radeon RV600						.*ATI.*RV6.*										1	1	0	0
+ATI Radeon RX700						.*ATI.*RX70.*										1	1	0	0
+ATI Radeon RX800						.*ATI.*Radeon RX80.*								2	1	0	0
+ATI RS880M								.*ATI.*RS880M										1	1	0	0
+ATI Radeon RX9550						.*ATI.*RX9550.*										1	1	0	0
+ATI Radeon VE							.*ATI.*Radeon.*VE.*									0	0	0	0
+ATI Radeon X300							.*ATI.*Radeon X3.*									1	1	1	2.1
+ATI Radeon X400							.*ATI.*Radeon ?X4.*									0	1	0	0
+ATI Radeon X500							.*ATI.*Radeon ?X5.*									1	1	1	2.1
+ATI Radeon X600							.*ATI.*(Radeon |ASUS Extreme A)X6.*					1	1	1	2.1
+ATI Radeon X700							.*ATI.*Radeon ?X7.*									2	1	1	2.1
+ATI Radeon X800							.*ATI.*Radeon ?X8.*									1	1	1	2.1
+ATI Radeon X900							.*ATI.*Radeon ?X9.*									2	1	0	0
+ATI Radeon X1000						.*ATI.*Radeon ?X10.*								2	1	0	2.1
+ATI Radeon X1200						.*ATI.*Radeon ?X12.*								2	1	0	2.1
+ATI Radeon X1400						.*ATI.*Radeon ?X14.*								2	1	0	2.1
+ATI Radeon X2300						.*ATI.*Radeon ?X23.*								2	1	0	2.1
+ATI Radeon Xpress						.*ATI.*Radeon Xpress.*								0	1	1	2.1
+ATI Rage 128							.*ATI.*Rage 128.*									0	1	0	0
+ATI R300 (9700)							.*R300.*											0	1	1	2.1
+ATI R350 (9800)							.*R350.*											1	1	0	0
+ATI R580 (X1900)						.*R580.*											3	1	0	0
+ATI RC410 (Xpress 200)					.*RC410.*											0	0	0	0
+ATI RS48x (Xpress 200x)					.*RS48.*											0	0	0	0
+ATI RS600 (Xpress 3200)					.*RS600.*											0	0	0	0
+ATI RV350 (9600)						.*RV350.*											0	1	0	0
+ATI RV370 (X300)						.*RV370.*											0	1	0	0
+ATI RV410 (X700)						.*RV410.*											1	1	0	0
+ATI RV515								.*RV515.*											1	1	0	0
+ATI RV570 (X1900 GT/PRO)				.*RV570.*											3	1	0	0
+ATI RV380								.*RV380.*											0	1	0	0
+ATI RV530								.*RV530.*											1	1	0	0
+ATI RX480 (Xpress 200P)					.*RX480.*											0	1	0	0
+ATI RX700								.*RX700.*											1	1	0	0
+AMD ANTILLES (HD 6990)					.*(AMD|ATI).*Antilles.*								3	1	0	0
+ATI ROBSON								.*(AMD|ATI).*ROBSON.*								3	1	0	4
+AMD BARTS (HD 6800)						.*(AMD|ATI).*Barts.*								3	1	1	2.1
+AMD WRESTLER							.*(AMD|ATI).*WRESTLER.*								3	1	1	4
+AMD SUMO								.*(AMD|ATI).*SUMO.*									3	1	1	4.1
+AMD CAICOS (HD 6400)					.*(AMD|ATI).*Caicos.*								3	1	0	0
+AMD CAYMAN (HD 6900)					.*(AMD|ATI).*(Cayman|CAYMAM).*						3	1	0	0
+AMD CEDAR (HD 5450)						.*(AMD|ATI).*Cedar.*								2	1	0	2.1
+AMD CYPRESS (HD 5800)					.*(AMD|ATI).*Cypress.*								3	1	0	0
+AMD HEMLOCK (HD 5970)					.*(AMD|ATI).*Hemlock.*								3	1	0	0
+AMD JUNIPER (HD 5700)					.*(AMD|ATI).*Juniper.*								3	1	0	0
+AMD PARK								.*(AMD|ATI).*Park.*									3	1	0	0
+AMD REDWOOD (HD 5500/5600)				.*(AMD|ATI).*Redwood.*								3	1	0	1.4
+AMD TURKS (HD 6500/6600)				.*(AMD|ATI).*Turks.*								3	1	0	2.1
+AMD RS780 (HD 3200)						.*RS780.*											0	1	1	2.1
+AMD RS880 (HD 4200)						.*RS880.*											0	1	1	3.2
+AMD RV610 (HD 2400)						.*RV610.*											1	1	0	0
+AMD RV620 (HD 3400)						.*RV620.*											1	1	0	0
+AMD RV630 (HD 2600)						.*RV630.*											2	1	0	0
+AMD RV635 (HD 3600)						.*RV635.*											3	1	0	1.4
+AMD RV670 (HD 3800)						.*RV670.*											3	1	0	0
+AMD R680 (HD 3870 X2)					.*R680.*											3	1	0	0
+AMD R700 (HD 4800 X2)					.*R700.*											3	1	0	0
+AMD RV710 (HD 4300)						.*RV710.*											0	1	1	1.4
+AMD RV730 (HD 4600)						.*RV730.*											3	1	0	1.4
+AMD RV740 (HD 4700)						.*RV740.*											3	1	0	0
+AMD RV770 (HD 4800)						.*RV770.*											3	1	0	0
+AMD RV790 (HD 4800)						.*RV790.*											3	1	0	0
+ATI 760G/Radeon 3000					.*ATI.*AMD 760G.*									1	1	1	3.3
+ATI 780L/Radeon 3000					.*ATI.*AMD 780L.*									1	1	0	0
+ATI Radeon DDR							.*ATI.*Radeon ?DDR.*								0	1	0	0
+ATI FirePro 2000						.*ATI.*FirePro 2.*									2	1	1	4.2
+ATI FirePro 3000						.*ATI.*FirePro V3.*									2	1	0	0
+ATI FirePro 4000						.*ATI.*FirePro V4.*									2	1	0	4.1
+ATI FirePro 5000						.*ATI.*FirePro V5.*									3	1	0	0
+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
+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 845G								.*Intel.*845G										0	0	1	1.4
+Intel 855GM								.*Intel.*855GM										0	0	1	1.4
+Intel 865G								.*Intel.*865G										0	0	1	1.4
+Intel 900								.*Intel.*900.*900									0	0	0	0
+Intel 915GM								.*Intel.*915GM										0	0	1	1.4
+Intel 915G								.*Intel.*915G										0	0	1	1.4
+Intel 945GM								.*Intel.*945GM.*									0	1	1	1.4
+Intel 945G								.*Intel.*945G.*										0	1	1	1.4
+Intel 950								.*Intel.*950.*										0	1	1	1.4
+Intel 965								.*Intel.*965.*										0	1	1	2.1
+Intel G33								.*Intel.*G33.*										1	0	1	1.4
+Intel G41								.*Intel.*G41.*										1	1	1	2.1
+Intel G45								.*Intel.*G45.*										1	1	1	2.1
+Intel Bear Lake							.*Intel.*Bear Lake.*								1	0	1	1.4
+Intel Broadwater						.*Intel.*Broadwater.*								0	0	1	1.4
+Intel Brookdale							.*Intel.*Brookdale.*								0	0	1	1.3
+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	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	4
+Intel HD Graphics						.*Intel.*HD Graphics.*								2	1	1	4
+Intel Mobile 4 Series					.*Intel.*Mobile.* 4 Series.*						0	1	1	2.1
+Intel 4 Series Internal					.*Intel.* 4 Series Internal.*						1	1	1	2.1
+Intel Media Graphics HD					.*Intel.*Media Graphics HD.*						0	1	0	0
+Intel Montara							.*Intel.*Montara.*									0	0	1	1.3
+Intel Pineview							.*Intel.*Pineview.*									0	1	1	1.4
+Intel Springdale						.*Intel.*Springdale.*								0	0	1	1.3
+Intel Grantsdale						.*Intel.*Grantsdale.*								1	1	0	0
+Intel Q45/Q43							.*Intel.*Q4.*										1	1	1	2.1
+Intel B45/B43							.*Intel.*B4.*										1	1	1	2.1
+Intel 3D-Analyze						.*Intel.*3D-Analyze.*								2	1	0	0
+Matrox									.*Matrox.*											0	0	0	0
+Mesa									.*Mesa.*											1	0	1	3
+Gallium									.*Gallium.*											1	1	1	2.1
+NVIDIA G100M							.*NVIDIA .* 10[0-9]M.*								4	1	1	3.3
+NVIDIA G 110M							.*NVIDIA .* 11[0-9]M.*								1	1	1	3.3
+NVIDIA G 120M							.*NVIDIA .* 12[0-9]M.*								1	1	1	3.3
+NVIDIA G 200M							.*NVIDIA .* 20[0-9]M.*								1	1	0	0
+NVIDIA G 410M							.*NVIDIA .* 41[0-9]M.*								3	1	1	4.2
+NVIDIA GT 130M							.*NVIDIA .*GT 13[0-9]M.*							3	1	1	3.3
+NVIDIA GT 140M							.*NVIDIA .*GT 14[0-9]M.*							3	1	1	3.3
+NVIDIA GT 150M							.*NVIDIA .*GTS 15[0-9]M.*							2	1	0	0
+NVIDIA GTS 160M							.*NVIDIA .*GTS 16[0-9]M.*							2	1	0	0
+NVIDIA G210M							.*NVIDIA .*G21[0-9]M.*								3	1	0	3.3
+NVIDIA GT 220M							.*NVIDIA .*GT 22[0-9]M.*							3	1	1	3.3
+NVIDIA GT 230M							.*NVIDIA .*GT 23[0-9]M.*							3	1	1	3.3
+NVIDIA GT 240M							.*NVIDIA .*GT 24[0-9]M.*							3	1	1	3.3
+NVIDIA GTS 250M							.*NVIDIA .*GTS 25[0-9]M.*							3	1	0	3.3
+NVIDIA GTS 260M							.*NVIDIA .*GTS 26[0-9]M.*							3	1	0	0
+NVIDIA GTX 260M							.*NVIDIA .*GTX 26[0-9]M.*							3	1	0	3.3
+NVIDIA GTX 270M							.*NVIDIA .*GTX 27[0-9]M.*							3	1	0	0
+NVIDIA GTX 280M							.*NVIDIA .*GTX 28[0-9]M.*							3	1	0	3.3
+NVIDIA 300M								.*NVIDIA .*GT 30[0-9]M.*							3	1	1	4.2
+NVIDIA G 310M							.*NVIDIA .* 31[0-9]M.*								2	1	0	3.3
+NVIDIA GT 320M							.*NVIDIA .* 32[0-9]M.*								3	1	0	3.3
+NVIDIA GT 330M							.*NVIDIA .*GT 33[0-9]M.*							3	1	1	3.3
+NVIDIA GT 340M							.*NVIDIA .*GT 34[0-9]M.*							4	1	1	3.3
+NVIDIA GTS 350M							.*NVIDIA .*GTS 35[0-9]M.*							4	1	1	3.3
+NVIDIA GTS 360M							.*NVIDIA .*GTS 36[0-9]M.*							5	1	1	3.3
+NVIDIA 400M								.*NVIDIA .* 40[0-9]M.*								2	1	0	0
+NVIDIA 410M								.*NVIDIA .* 41[0-9]M.*								3	1	0	0
+NVIDIA GT 420M							.*NVIDIA .*GT 42[0-9]M.*							3	1	1	4.2
+NVIDIA GT 430M							.*NVIDIA .*GT 43[0-9]M.*							3	1	1	4.2
+NVIDIA GT 440M							.*NVIDIA .*GT 44[0-9]M.*							3	1	1	4.2
+NVIDIA GT 450M							.*NVIDIA .*GT 45[0-9]M.*							3	1	0	0
+NVIDIA GTX 460M							.*NVIDIA .*GTX 46[0-9]M.*							4	1	1	4.3
+NVIDIA GTX 470M							.*NVIDIA .*GTX 47[0-9]M.*							3	1	0	4.2
+NVIDIA GTX 480M							.*NVIDIA .*GTX 48[0-9]M.*							3	1	1	4.2
+NVIDIA GT 520M							.*NVIDIA .*GT 52[0-9]M.*							3	1	1	4.2
+NVIDIA GT 530M							.*NVIDIA .*GT 53[0-9]M.*							3	1	1	4.2
+NVIDIA GT 540M							.*NVIDIA .*GT 54[0-9]M.*							3	1	1	4.2
+NVIDIA GT 550M							.*GeForce GT 55[0-9]M.*								3	1	1	4.2
+NVIDIA GTX 560M							.*NVIDIA .*GTX 56[0-9]M.*							3	1	0	4.2
+NVIDIA GTX 570M							.*NVIDIA .*GTX 57[0-9]M.*							5	1	0	4.2
+NVIDIA GTX 580M							.*NVIDIA .*GTX 58[0-9]M.*							5	1	1	4.2
+NVIDIA 610M								.*NVIDIA.* 61[0-9]M.*								3	1	1	4.2
+NVIDIA GT 620M							.*NVIDIA .*GT 62[0-9]M.*							3	1	0	4.2
+NVIDIA GT 630M							.*NVIDIA .*GT 63[0-9]M.*							3	1	0	4.2
+NVIDIA GT 640M							.*NVIDIA .*GT 64[0-9]M.*							3	1	0	4.2
+NVIDIA GT 650M							.*NVIDIA .*GT 65[0-9]M.*							3	1	0	4.2
+NVIDIA GTX 660M							.*NVIDIA .*GTX 66[0-9]M.*							5	1	0	4.3
+NVIDIA GTX 670M							.*NVIDIA .*GTX 67[0-9]M.*							5	1	1	4.2
+NVIDIA GTX 680M							.*NVIDIA .*GTX 68[0-9]M.*							5	1	0	4.2
+NVIDIA GTX 690M							.*NVIDIA .*GTX 69[0-9]M.*							5	1	0	0
+NVIDIA G100								.*NVIDIA .*G10.*									3	1	1	4.2
+NVIDIA GT 120							.*NVIDIA .*GT 12.*									2	1	0	3.3
+NVIDIA GT 130							.*NVIDIA .*GT 13.*									2	1	0	3.3
+NVIDIA GT 140							.*NVIDIA .*GT 14.*									2	1	0	3.3
+NVIDIA GTS 150							.*NVIDIA .*GTS 15.*									2	1	0	0
+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	3.3
+NVIDIA GTX 280							.*NVIDIA .*GTX 28.*									4	1	1	3.3
+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	3.3
+NVIDIA GT 330							.*NVIDIA .*GT 33.*									3	1	0	3.3
+NVIDIA GT 340							.*NVIDIA .*GT 34.*									3	1	0	3.3
+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.3
+NVIDIA GT 440							.*NVIDIA .*GT 44.*									4	1	0	4.3
+NVIDIA GTS 450							.*NVIDIA .*GTS 45.*									4	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	4.2
+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.3
+NVIDIA GTX 560							.*NVIDIA .*GTX 56.*									5	1	1	4.3
+NVIDIA GTX 570							.*NVIDIA .*GTX 57.*									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 605								.*NVIDIA .* 605.*									3	1	1	4.2
+NVIDIA GT 610							.*NVIDIA .*GT 61.*									3	1	1	4.2
+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.2
+NVIDIA GT 650							.*NVIDIA .*GT 65.*									3	1	1	4.2
+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 C51								.*NVIDIA .*C51.*									0	1	1	2
+NVIDIA G72								.*NVIDIA .*G72.*									1	1	0	0
+NVIDIA G73								.*NVIDIA .*G73.*									1	1	0	0
+NVIDIA G84								.*NVIDIA .*G84.*									2	1	0	0
+NVIDIA G86								.*NVIDIA .*G86.*									3	1	0	0
+NVIDIA G92								.*NVIDIA .*G92.*									3	1	0	0
+NVIDIA GeForce							.*GeForce 256.*										0	0	0	0
+NVIDIA GeForce 2						.*GeForce ?2 ?.*									0	1	1	1.5
+NVIDIA GeForce 4						.*NVIDIA .*GeForce ?4.*								0	1	1	1.5
+NVIDIA GeForce 6100						.*NVIDIA .*GeForce 61.*								3	1	1	4.2
+NVIDIA GeForce 6200						.*NVIDIA .*GeForce 62.*								0	1	1	2.1
+NVIDIA GeForce 6500						.*NVIDIA .*GeForce 65.*								1	1	1	2.1
+NVIDIA GeForce 6600						.*NVIDIA .*GeForce 66.*								2	1	1	2.1
+NVIDIA GeForce 6700						.*NVIDIA .*GeForce 67.*								2	1	1	2.1
+NVIDIA GeForce 6800						.*NVIDIA .*GeForce 68.*								1	1	1	2.1
+NVIDIA GeForce 7000						.*NVIDIA .*GeForce 70.*								1	1	1	2.1
+NVIDIA GeForce 7100						.*NVIDIA .*GeForce 71.*								1	1	1	2.1
+NVIDIA GeForce 7200						.*NVIDIA .*GeForce 72.*								1	1	0	0
+NVIDIA GeForce 7300						.*NVIDIA .*GeForce 73.*								1	1	1	2.1
+NVIDIA GeForce 7500						.*NVIDIA .*GeForce 75.*								2	1	1	2.1
+NVIDIA GeForce 7600						.*NVIDIA .*GeForce 76.*								2	1	1	2.1
+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	3.3
+NVIDIA GeForce 8200M					.*NVIDIA .*GeForce 820[0-9]M.*						1	1	0	3.3
+NVIDIA GeForce 8200						.*NVIDIA .*GeForce 82.*								1	1	0	3.3
+NVIDIA GeForce 8300						.*NVIDIA .*GeForce 83.*								3	1	1	3.3
+NVIDIA GeForce 8400M					.*NVIDIA .*GeForce 840[0-9]M.*						1	1	1	3.3
+NVIDIA GeForce 8400						.*NVIDIA .*GeForce 84.*								2	1	1	3.3
+NVIDIA GeForce 8500						.*NVIDIA .*GeForce 85.*								2	1	1	3.3
+NVIDIA GeForce 8600M					.*NVIDIA .*GeForce 860[0-9]M.*						2	1	1	3.3
+NVIDIA GeForce 8600						.*NVIDIA .*GeForce 86.*								3	1	1	3.3
+NVIDIA GeForce 8700M					.*NVIDIA .*GeForce 870[0-9]M.*						2	1	1	3.3
+NVIDIA GeForce 8700						.*NVIDIA .*GeForce 87.*								3	1	0	0
+NVIDIA GeForce 8800M					.*NVIDIA .*GeForce 880[0-9]M.*						2	1	1	3.3
+NVIDIA GeForce 8800						.*NVIDIA .*GeForce 88.*								3	1	1	3.3
+NVIDIA GeForce 9100M					.*NVIDIA .*GeForce 910[0-9]M.*						0	1	0	3.3
+NVIDIA GeForce 9100						.*NVIDIA .*GeForce 91.*								0	1	0	3.3
+NVIDIA GeForce 9200M					.*NVIDIA .*GeForce 920[0-9]M.*						1	1	0	3.3
+NVIDIA GeForce 9200						.*NVIDIA .*GeForce 92.*								1	1	0	3.3
+NVIDIA GeForce 9300M					.*NVIDIA .*GeForce 930[0-9]M.*						1	1	1	3.3
+NVIDIA GeForce 9300						.*NVIDIA .*GeForce 93.*								1	1	1	3.3
+NVIDIA GeForce 9400M					.*NVIDIA .*GeForce 940[0-9]M.*						2	1	1	3.3
+NVIDIA GeForce 9400						.*NVIDIA .*GeForce 94.*								3	1	1	3.3
+NVIDIA GeForce 9500M					.*NVIDIA .*GeForce 950[0-9]M.*						1	1	1	3.3
+NVIDIA GeForce 9500						.*NVIDIA .*GeForce 95.*								3	1	1	3.3
+NVIDIA GeForce 9600M					.*NVIDIA .*GeForce 960[0-9]M.*						2	1	1	3.3
+NVIDIA GeForce 9600						.*NVIDIA .*GeForce 96.*								3	1	1	3.3
+NVIDIA GeForce 9700M					.*NVIDIA .*GeForce 970[0-9]M.*						0	1	1	3.3
+NVIDIA GeForce 9800M					.*NVIDIA .*GeForce 980[0-9]M.*						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	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 GeForce FX 5700					.*NVIDIA .*GeForce FX 57.*							0	1	1	2.1
+NVIDIA GeForce FX 5800					.*NVIDIA .*GeForce FX 58.*							1	1	0	0
+NVIDIA GeForce FX 5900					.*NVIDIA .*GeForce FX 59.*							1	1	1	2.1
+NVIDIA GeForce FX Go5100				.*NVIDIA .*GeForce FX Go51.*						0	1	0	0
+NVIDIA GeForce FX Go5200				.*NVIDIA .*GeForce FX Go52.*						0	1	0	1.5
+NVIDIA GeForce FX Go5300				.*NVIDIA .*GeForce FX Go53.*						0	1	0	0
+NVIDIA GeForce FX Go5500				.*NVIDIA .*GeForce FX Go55.*						0	1	0	0
+NVIDIA GeForce FX Go5600				.*NVIDIA .*GeForce FX Go56.*						0	1	1	2.1
+NVIDIA GeForce FX Go5700				.*NVIDIA .*GeForce FX Go57.*						1	1	1	1.5
+NVIDIA GeForce FX Go5800				.*NVIDIA .*GeForce FX Go58.*						1	1	0	0
+NVIDIA GeForce FX Go5900				.*NVIDIA .*GeForce FX Go59.*						1	1	0	0
+NVIDIA GeForce FX Go5xxx				.*NVIDIA .*GeForce FX Go.*							0	1	0	0
+NVIDIA GeForce Go 6100					.*NVIDIA .*GeForce Go 61.*							0	1	1	2.1
+NVIDIA GeForce Go 6200					.*NVIDIA .*GeForce Go 62.*							0	1	0	1.5
+NVIDIA GeForce Go 6400					.*NVIDIA .*GeForce Go 64.*							1	1	1	2.1
+NVIDIA GeForce Go 6500					.*NVIDIA .*GeForce Go 65.*							1	1	0	0
+NVIDIA GeForce Go 6600					.*NVIDIA .*GeForce Go 66.*							0	1	1	2.1
+NVIDIA GeForce Go 6700					.*NVIDIA .*GeForce Go 67.*							1	1	0	0
+NVIDIA GeForce Go 6800					.*NVIDIA .*GeForce Go 68.*							0	1	1	2.1
+NVIDIA GeForce Go 7200					.*NVIDIA .*GeForce Go 72.*							1	1	0	2.1
+NVIDIA GeForce Go 7300 LE				.*NVIDIA .*GeForce Go 73.*LE.*						1	1	0	0
+NVIDIA GeForce Go 7300					.*NVIDIA .*GeForce Go 73.*							1	1	1	2.1
+NVIDIA GeForce Go 7400					.*NVIDIA .*GeForce Go 74.*							1	1	1	2.1
+NVIDIA GeForce Go 7600					.*NVIDIA .*GeForce Go 76.*							1	1	1	2.1
+NVIDIA GeForce Go 7700					.*NVIDIA .*GeForce Go 77.*							0	1	1	2.1
+NVIDIA GeForce Go 7800					.*NVIDIA .*GeForce Go 78.*							2	1	0	0
+NVIDIA GeForce Go 7900					.*NVIDIA .*GeForce Go 79.*							1	1	1	2.1
+NVIDIA D9M								.*NVIDIA .*D9M.*									1	1	0	0
+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	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 NB9M								.*NVIDIA .*NB9M.*									1	1	0	0
+NVIDIA NB9P								.*NVIDIA .*NB9P.*									2	1	0	0
+NVIDIA N10								.*NVIDIA .*N10.*									1	1	0	2.1
+NVIDIA GeForce PCX						.*GeForce PCX.*										0	1	0	1.5
+NVIDIA Generic							.*NVIDIA .*Unknown.*								0	0	0	2.1
+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 NV36								.*NVIDIA .*NV36.*									1	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	3.3
+NVIDIA MCP51							.*NVIDIA .*MCP51.*									1	1	0	0
+NVIDIA MCP61							.*NVIDIA .*MCP61.*									1	1	0	2.1
+NVIDIA MCP67							.*NVIDIA .*MCP67.*									1	1	0	0
+NVIDIA MCP68							.*NVIDIA .*MCP68.*									1	1	0	0
+NVIDIA MCP73							.*NVIDIA .*MCP73.*									1	1	0	0
+NVIDIA MCP77							.*NVIDIA .*MCP77.*									1	1	0	0
+NVIDIA MCP78							.*NVIDIA .*MCP78.*									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	1.5
+NVIDIA Quadro 1000M						.*Quadro.* (K1|1)00[0-9]M.*							2	1	0	4.2
+NVIDIA Quadro 2000 M/D					.*Quadro.* (K2|2)000.*								3	1	0	4.2
+NVIDIA Quadro 3000M						.*Quadro.* (K3|3)00[0-9]M.*							3	1	0	4.2
+NVIDIA Quadro 4000M						.*Quadro.* (K4|4)00[0-9]M.*							3	1	0	4.2
+NVIDIA Quadro 4000						.*Quadro 4000.*										3	1	0	4.2
+NVIDIA Quadro 50x0 M					.*Quadro.* 50.0.*									3	1	0	4.2
+NVIDIA Quadro 6000						.*Quadro.* 6000.*									3	1	0	0
+NVIDIA Quadro 400						.*Quadro.* 400.*									2	1	0	3.3
+NVIDIA Quadro 600						.*Quadro.* 600.*									2	1	0	4.2
+NVIDIA Quadro4							.*Quadro4.*											0	1	0	1.5
+NVIDIA Quadro DCC						.*Quadro DCC.*										0	1	0	0
+NVIDIA Quadro CX						.*Quadro.*CX.*										3	1	0	0
+NVIDIA Quadro FX 770M					.*Quadro.*FX 77[0-9]M.*								2	1	0	3.3
+NVIDIA Quadro FX 1500M					.*Quadro.*FX 150[0-9]M.*							1	1	0	2.1
+NVIDIA Quadro FX 1600M					.*Quadro.*FX 160[0-9]M.*							2	1	0	3.3
+NVIDIA Quadro FX 2500M					.*Quadro.*FX 250[0-9]M.*							2	1	0	2.1
+NVIDIA Quadro FX 2700M					.*Quadro.*FX 270[0-9]M.*							3	1	0	3.3
+NVIDIA Quadro FX 2800M					.*Quadro.*FX 280[0-9]M.*							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	3.3
+NVIDIA Quadro FX 3700					.*Quadro.*FX 3700.*									3	1	0	3.3
+NVIDIA Quadro FX 3800					.*Quadro.*FX 3800.*									3	1	0	3.3
+NVIDIA Quadro FX 4500					.*Quadro.*FX 45.*									3	1	0	2.1
+NVIDIA Quadro FX 880M					.*Quadro.*FX 88[0-9]M.*								3	1	0	3.3
+NVIDIA Quadro FX 4800					.*NVIDIA .*Quadro FX 4800.*							3	1	0	3.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 30[0-9]M.*							2	1	0	0
+NVIDIA Quadro NVS 320M					.*NVIDIA .*NVS 32[0-9]M.*							2	1	0	0
+NVIDIA Quadro NVS 2100M					.*NVIDIA .*NVS 210[0-9]M.*							2	1	0	3.3
+NVIDIA Quadro NVS 3100M					.*NVIDIA .*NVS 310[0-9]M.*							2	1	0	3.3
+NVIDIA Quadro NVS 4200M					.*NVIDIA .*NVS 420[0-9]M.*							2	1	0	4.2
+NVIDIA Quadro NVS 5100M					.*NVIDIA .*NVS 510[0-9]M.*							2	1	0	0
+NVIDIA Quadro NVS						.*NVIDIA .*NVS										0	1	0	4.2
+NVIDIA Corporation N12P					.*NVIDIA .*N12P.*									1	1	1	4.1
+NVIDIA Corporation N11M					.*NVIDIA .*N11M.*									2	1	0	3.1
+NVIDIA RIVA TNT							.*RIVA TNT.*										0	0	0	1.5
+S3										.*S3 Graphics.*										0	0	1	1.4
+SiS										SiS.*												0	0	1	1.5
+Trident									Trident.*											0	0	0	0
+Tungsten Graphics						Tungsten.*											0	0	0	0
+XGI										XGI.*												0	0	0	0
+VIA										VIA.*												0	0	0	0
+Apple Generic							Apple.*Generic.*									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
diff --git a/indra/newview/llfloaterdebugmaterials.cpp b/indra/newview/llfloaterdebugmaterials.cpp
deleted file mode 100644
index c9f15a9c3559be961b9ec70e611b24d68cd8df45..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterdebugmaterials.cpp
+++ /dev/null
@@ -1,1245 +0,0 @@
-/** 
-* @file llfloaterdebugmaterials.cpp
-* @brief Implementation of llfloaterdebugmaterials
-* @author Stinson@lindenlab.com
-*
-* $LicenseInfo:firstyear=2012&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2012, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterdebugmaterials.h"
-
-#include <string>
-#include <vector>
-#include <map>
-
-#include <boost/shared_ptr.hpp>
-#include <boost/bind.hpp>
-#include <boost/function.hpp>
-#include <boost/signals2.hpp>
-
-#include "llagent.h"
-#include "llbutton.h"
-#include "llcolorswatch.h"
-#include "llenvmanager.h"
-#include "llfloater.h"
-#include "llfloaterreg.h"
-#include "llfontgl.h"
-#include "llhttpclient.h"
-#include "lllineeditor.h"
-#include "llmaterialid.h"
-#include "llresmgr.h"
-#include "llscrolllistcell.h"
-#include "llscrolllistctrl.h"
-#include "llscrolllistitem.h"
-#include "llsd.h"
-#include "llsdserialize.h"
-#include "llselectmgr.h"
-#include "llspinctrl.h"
-#include "llstring.h"
-#include "llstyle.h"
-#include "lltextbase.h"
-#include "lltexturectrl.h"
-#include "lltextvalidate.h"
-#include "llthread.h"
-#include "lluicolortable.h"
-#include "lluictrl.h"
-#include "lluuid.h"
-#include "llviewerobject.h"
-#include "llviewerobjectlist.h"
-#include "llviewerparcelmgr.h"
-#include "llviewerregion.h"
-#include "v4color.h"
-#include "v4coloru.h"
-
-#define MATERIALS_CAPABILITY_NAME                 "RenderMaterials"
-
-#define VIEWABLE_OBJECTS_REGION_ID_FIELD          "regionId"
-#define VIEWABLE_OBJECTS_OBJECT_ID_FIELD          "objectId"
-#define VIEWABLE_OBJECTS_MATERIAL_ID_FIELD        "materialId"
-
-BOOL LLFloaterDebugMaterials::postBuild()
-{
-	mStatusText = findChild<LLTextBase>("material_status");
-	llassert(mStatusText != NULL);
-
-	mGetButton = findChild<LLButton>("get_button");
-	llassert(mGetButton != NULL);
-	mGetButton->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onGetClicked, this));
-
-	mParsingStatusText = findChild<LLTextBase>("loading_status");
-	llassert(mParsingStatusText != NULL);
-
-	mGetNormalMapScrollList = findChild<LLScrollListCtrl>("get_normal_map_scroll_list");
-	llassert(mGetNormalMapScrollList != NULL);
-	mGetNormalMapScrollList->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onGetScrollListSelectionChange, this, _1));
-
-	mGetSpecularMapScrollList = findChild<LLScrollListCtrl>("get_specular_map_scroll_list");
-	llassert(mGetSpecularMapScrollList != NULL);
-	mGetSpecularMapScrollList->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onGetScrollListSelectionChange, this, _1));
-
-	mGetOtherDataScrollList = findChild<LLScrollListCtrl>("get_other_data_scroll_list");
-	llassert(mGetOtherDataScrollList != NULL);
-	mGetOtherDataScrollList->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onGetScrollListSelectionChange, this, _1));
-
-	mNormalMap = findChild<LLTextureCtrl>("normal_map");
-	llassert(mNormalMap != NULL);
-
-	mNormalMapOffsetX = findChild<LLSpinCtrl>("normal_map_offset_x");
-	llassert(mNormalMapOffsetX != NULL);
-
-	mNormalMapOffsetY = findChild<LLSpinCtrl>("normal_map_offset_y");
-	llassert(mNormalMapOffsetY != NULL);
-
-	mNormalMapRepeatX = findChild<LLSpinCtrl>("normal_map_repeat_x");
-	llassert(mNormalMapRepeatX != NULL);
-
-	mNormalMapRepeatY = findChild<LLSpinCtrl>("normal_map_repeat_y");
-	llassert(mNormalMapRepeatY != NULL);
-
-	mNormalMapRotation = findChild<LLSpinCtrl>("normal_map_rotation");
-	llassert(mNormalMapRotation != NULL);
-
-	mSpecularMap = findChild<LLTextureCtrl>("specular_map");
-	llassert(mSpecularMap != NULL);
-
-	mSpecularMapOffsetX = findChild<LLSpinCtrl>("specular_map_offset_x");
-	llassert(mSpecularMapOffsetX != NULL);
-
-	mSpecularMapOffsetY = findChild<LLSpinCtrl>("specular_map_offset_y");
-	llassert(mSpecularMapOffsetY != NULL);
-
-	mSpecularMapRepeatX = findChild<LLSpinCtrl>("specular_map_repeat_x");
-	llassert(mSpecularMapRepeatX != NULL);
-
-	mSpecularMapRepeatY = findChild<LLSpinCtrl>("specular_map_repeat_y");
-	llassert(mSpecularMapRepeatY != NULL);
-
-	mSpecularMapRotation = findChild<LLSpinCtrl>("specular_map_rotation");
-	llassert(mSpecularMapRotation != NULL);
-
-	mSpecularColor = findChild<LLColorSwatchCtrl>("specular_color");
-	llassert(mSpecularColor != NULL);
-
-	mSpecularColorAlpha = findChild<LLSpinCtrl>("specular_color_alpha");
-	llassert(mSpecularColorAlpha != NULL);
-
-	mSpecularExponent = findChild<LLLineEditor>("specular_exponent");
-	llassert(mSpecularExponent != NULL);
-	mSpecularExponent->setPrevalidate(LLTextValidate::validateInt);
-	mSpecularExponent->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onValueEntered, this, _1));
-
-	mEnvironmentExponent = findChild<LLLineEditor>("environment_exponent");
-	llassert(mEnvironmentExponent != NULL);
-	mEnvironmentExponent->setPrevalidate(LLTextValidate::validateInt);
-	mEnvironmentExponent->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onValueEntered, this, _1));
-
-	mAlphaMaskCutoff = findChild<LLLineEditor>("alpha_mask_cutoff");
-	llassert(mAlphaMaskCutoff != NULL);
-	mAlphaMaskCutoff->setPrevalidate(LLTextValidate::validateInt);
-	mAlphaMaskCutoff->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onValueEntered, this, _1));
-
-	mDiffuseAlphaMode = findChild<LLLineEditor>("diffuse_alpha_mode");
-	llassert(mDiffuseAlphaMode != NULL);
-	mDiffuseAlphaMode->setPrevalidate(LLTextValidate::validateInt);
-	mDiffuseAlphaMode->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onValueEntered, this, _1));
-
-	mPutSetButton = findChild<LLButton>("put_set_button");
-	llassert(mPutSetButton != NULL);
-	mPutSetButton->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onPutSetClicked, this));
-
-	mPutClearButton = findChild<LLButton>("put_clear_button");
-	llassert(mPutClearButton != NULL);
-	mPutClearButton->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onPutClearClicked, this));
-
-	LLButton* resetPutValuesButton = findChild<LLButton>("reset_put_values_button");
-	llassert(resetPutValuesButton != NULL);
-	resetPutValuesButton->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onResetPutValuesClicked, this));
-
-	mPutScrollList = findChild<LLScrollListCtrl>("put_scroll_list");
-	llassert(mPutScrollList != NULL);
-
-	mQueryViewableObjectsButton = findChild<LLButton>("query_viewable_objects_button");
-	llassert(mQueryViewableObjectsButton != NULL);
-	mQueryViewableObjectsButton->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onQueryVisibleObjectsClicked, this));
-
-	mQueryStatusText = findChild<LLTextBase>("query_status");
-	llassert(mQueryStatusText != NULL);
-
-	mViewableObjectsScrollList = findChild<LLScrollListCtrl>("viewable_objects_scroll_list");
-	llassert(mViewableObjectsScrollList != NULL);
-	mViewableObjectsScrollList->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onViewableObjectsScrollListSelectionChange, this));
-
-	mPostButton = findChild<LLButton>("post_button");
-	llassert(mPostButton != NULL);
-	mPostButton->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onPostClicked, this));
-
-	mPostNormalMapScrollList = findChild<LLScrollListCtrl>("post_normal_map_scroll_list");
-	llassert(mPostNormalMapScrollList != NULL);
-	mPostNormalMapScrollList->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onPostScrollListSelectionChange, this, _1));
-
-	mPostSpecularMapScrollList = findChild<LLScrollListCtrl>("post_specular_map_scroll_list");
-	llassert(mPostSpecularMapScrollList != NULL);
-	mPostSpecularMapScrollList->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onPostScrollListSelectionChange, this, _1));
-
-	mPostOtherDataScrollList = findChild<LLScrollListCtrl>("post_other_data_scroll_list");
-	llassert(mPostOtherDataScrollList != NULL);
-	mPostOtherDataScrollList->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onPostScrollListSelectionChange, this, _1));
-
-	mDefaultSpecularColor = LLUIColorTable::instance().getColor("White");
-
-	mWarningColor = LLUIColorTable::instance().getColor("MaterialWarningColor");
-	mErrorColor = LLUIColorTable::instance().getColor("MaterialErrorColor");
-
-	setState(kNoRegion);
-
-	return LLFloater::postBuild();
-}
-
-void LLFloaterDebugMaterials::onOpen(const LLSD& pKey)
-{
-	LLFloater::onOpen(pKey);
-
-	if (!mRegionCrossConnection.connected())
-	{
-		mRegionCrossConnection = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterDebugMaterials::onRegionCross, this));
-	}
-
-	if (!mTeleportFailedConnection.connected())
-	{
-		mTeleportFailedConnection = LLViewerParcelMgr::getInstance()->setTeleportFailedCallback(boost::bind(&LLFloaterDebugMaterials::onRegionCross, this));
-	}
-
-	if (!mSelectionUpdateConnection.connected())
-	{
-		mSelectionUpdateConnection = LLSelectMgr::getInstance()->mUpdateSignal.connect(boost::bind(&LLFloaterDebugMaterials::onInWorldSelectionChange, this));
-	}
-
-	checkRegionMaterialStatus();
-	resetObjectEditInputs();
-	clearGetResults();
-	clearViewableObjectsResults();
-	clearPostResults();
-}
-
-void LLFloaterDebugMaterials::onClose(bool pIsAppQuitting)
-{
-	resetObjectEditInputs();
-	clearGetResults();
-	clearViewableObjectsResults();
-	clearPostResults();
-
-	if (mSelectionUpdateConnection.connected())
-	{
-		mSelectionUpdateConnection.disconnect();
-	}
-
-	if (mTeleportFailedConnection.connected())
-	{
-		mTeleportFailedConnection.disconnect();
-	}
-
-	if (mRegionCrossConnection.connected())
-	{
-		mRegionCrossConnection.disconnect();
-	}
-
-	LLFloater::onClose(pIsAppQuitting);
-}
-
-void LLFloaterDebugMaterials::draw()
-{
-	if (mNextUnparsedQueryDataIndex >= 0)
-	{
-		parseQueryViewableObjects();
-	}
-	if (LLSelectMgr::instance().getSelection().notNull())
-	{
-		refreshObjectEdit();
-	}
-	LLFloater::draw();
-}
-
-LLFloaterDebugMaterials::LLFloaterDebugMaterials(const LLSD& pParams)
-	: LLFloater(pParams),
-	mStatusText(NULL),
-	mGetButton(NULL),
-	mParsingStatusText(NULL),
-	mGetNormalMapScrollList(NULL),
-	mGetSpecularMapScrollList(NULL),
-	mGetOtherDataScrollList(NULL),
-	mNormalMap(NULL),
-	mNormalMapOffsetX(NULL),
-	mNormalMapOffsetY(NULL),
-	mNormalMapRepeatX(NULL),
-	mNormalMapRepeatY(NULL),
-	mNormalMapRotation(NULL),
-	mSpecularMap(NULL),
-	mSpecularMapOffsetX(NULL),
-	mSpecularMapOffsetY(NULL),
-	mSpecularMapRepeatX(NULL),
-	mSpecularMapRepeatY(NULL),
-	mSpecularMapRotation(NULL),
-	mSpecularColor(NULL),
-	mSpecularColorAlpha(NULL),
-	mSpecularExponent(NULL),
-	mEnvironmentExponent(NULL),
-	mAlphaMaskCutoff(NULL),
-	mDiffuseAlphaMode(NULL),
-	mPutSetButton(NULL),
-	mPutClearButton(NULL),
-	mPutScrollList(NULL),
-	mQueryViewableObjectsButton(NULL),
-	mQueryStatusText(NULL),
-	mViewableObjectsScrollList(NULL),
-	mPostButton(NULL),
-	mPostNormalMapScrollList(NULL),
-	mPostSpecularMapScrollList(NULL),
-	mPostOtherDataScrollList(NULL),
-	mState(kNoRegion),
-	mWarningColor(),
-	mErrorColor(),
-	mRegionCrossConnection(),
-	mTeleportFailedConnection(),
-	mSelectionUpdateConnection(),
-	mNextUnparsedQueryDataIndex(-1)
-{
-}
-
-LLFloaterDebugMaterials::~LLFloaterDebugMaterials()
-{
-}
-
-void LLFloaterDebugMaterials::onGetClicked()
-{
-	requestGetMaterials();
-}
-
-void LLFloaterDebugMaterials::onValueEntered(LLUICtrl* pUICtrl)
-{
-	LLLineEditor *pLineEditor = static_cast<LLLineEditor *>(pUICtrl);
-	llassert(pLineEditor != NULL);
-
-	const std::string &valueString = pLineEditor->getText();
-
-	S32 intValue = 0;
-	bool doResetValue = (!valueString.empty() && !LLStringUtil::convertToS32(valueString, intValue));
-
-	if (doResetValue)
-	{
-		LL_WARNS("debugMaterials") << "cannot parse string '" << valueString << "' to an S32 value" <<LL_ENDL;
-		LLSD value = static_cast<LLSD::Integer>(intValue);
-		pLineEditor->setValue(value);
-	}
-}
-
-void LLFloaterDebugMaterials::onPutSetClicked()
-{
-	requestPutMaterials(true);
-}
-
-void LLFloaterDebugMaterials::onPutClearClicked()
-{
-	requestPutMaterials(false);
-}
-
-void LLFloaterDebugMaterials::onResetPutValuesClicked()
-{
-	resetObjectEditInputs();
-}
-
-void LLFloaterDebugMaterials::onQueryVisibleObjectsClicked()
-{
-	clearViewableObjectsResults();
-	setUnparsedQueryData();
-}
-
-void LLFloaterDebugMaterials::onPostClicked()
-{
-	clearPostResults();
-
-	std::vector<LLScrollListItem*> selectedItems = mViewableObjectsScrollList->getAllSelected();
-	if (!selectedItems.empty())
-	{
-		for (std::vector<LLScrollListItem*>::const_iterator selectedItemIter = selectedItems.begin();
-			selectedItemIter != selectedItems.end(); ++selectedItemIter)
-		{
-			const LLScrollListItem* selectedItem = *selectedItemIter;
-			const LLSD& selectedItemValue = selectedItem->getValue();
-			llassert(selectedItemValue.isMap());
-
-			llassert(selectedItemValue.has(VIEWABLE_OBJECTS_REGION_ID_FIELD));
-			llassert(selectedItemValue.get(VIEWABLE_OBJECTS_REGION_ID_FIELD).isUUID());
-			const LLUUID& region_id = selectedItemValue.get(VIEWABLE_OBJECTS_REGION_ID_FIELD).asUUID();
-
-			llassert(selectedItemValue.has(VIEWABLE_OBJECTS_MATERIAL_ID_FIELD));
-			llassert(selectedItemValue.get(VIEWABLE_OBJECTS_MATERIAL_ID_FIELD).isBinary());
-			const LLMaterialID material_id(selectedItemValue.get(VIEWABLE_OBJECTS_MATERIAL_ID_FIELD).asBinary());
-
-			LLMaterialMgr::instance().get(region_id, material_id, boost::bind(&LLFloaterDebugMaterials::onPostMaterial, _1, _2));
-		}
-	}
-}
-
-void LLFloaterDebugMaterials::onRegionCross()
-{
-	checkRegionMaterialStatus();
-	clearGetResults();
-	clearViewableObjectsResults();
-	clearPostResults();
-}
-
-void LLFloaterDebugMaterials::onInWorldSelectionChange()
-{
-	updateControls();
-}
-
-void LLFloaterDebugMaterials::onGetScrollListSelectionChange(LLUICtrl* pUICtrl)
-{
-	LLScrollListCtrl* scrollListCtrl = dynamic_cast<LLScrollListCtrl*>(pUICtrl);
-	llassert(scrollListCtrl != NULL);
-
-	if (scrollListCtrl != mGetNormalMapScrollList)
-	{
-		mGetNormalMapScrollList->deselectAllItems(TRUE);
-	}
-	if (scrollListCtrl != mGetSpecularMapScrollList)
-	{
-		mGetSpecularMapScrollList->deselectAllItems(TRUE);
-	}
-	if (scrollListCtrl != mGetOtherDataScrollList)
-	{
-		mGetOtherDataScrollList->deselectAllItems(TRUE);
-	}
-
-	std::vector<LLScrollListItem*> selectedItems = scrollListCtrl->getAllSelected();
-	if (!selectedItems.empty())
-	{
-		llassert(selectedItems.size() == 1);
-		LLScrollListItem* selectedItem = selectedItems.front();
-
-		llassert(selectedItem != NULL);
-		const LLSD& selectedIdValue = selectedItem->getValue();
-
-		if (scrollListCtrl != mGetNormalMapScrollList)
-		{
-			mGetNormalMapScrollList->selectByValue(selectedIdValue);
-			mGetNormalMapScrollList->scrollToShowSelected();
-		}
-		if (scrollListCtrl != mGetSpecularMapScrollList)
-		{
-			mGetSpecularMapScrollList->selectByValue(selectedIdValue);
-			mGetSpecularMapScrollList->scrollToShowSelected();
-		}
-		if (scrollListCtrl != mGetOtherDataScrollList)
-		{
-			mGetOtherDataScrollList->selectByValue(selectedIdValue);
-			mGetOtherDataScrollList->scrollToShowSelected();
-		}
-	}
-}
-
-void LLFloaterDebugMaterials::onPostScrollListSelectionChange(LLUICtrl* pUICtrl)
-{
-	LLScrollListCtrl* scrollListCtrl = dynamic_cast<LLScrollListCtrl*>(pUICtrl);
-	llassert(scrollListCtrl != NULL);
-
-	if (scrollListCtrl != mPostNormalMapScrollList)
-	{
-		mPostNormalMapScrollList->deselectAllItems(TRUE);
-	}
-	if (scrollListCtrl != mPostSpecularMapScrollList)
-	{
-		mPostSpecularMapScrollList->deselectAllItems(TRUE);
-	}
-	if (scrollListCtrl != mPostOtherDataScrollList)
-	{
-		mPostOtherDataScrollList->deselectAllItems(TRUE);
-	}
-
-	std::vector<LLScrollListItem*> selectedItems = scrollListCtrl->getAllSelected();
-	if (!selectedItems.empty())
-	{
-		llassert(selectedItems.size() == 1);
-		LLScrollListItem* selectedItem = selectedItems.front();
-
-		llassert(selectedItem != NULL);
-		const LLSD& selectedIdValue = selectedItem->getValue();
-
-		if (scrollListCtrl != mPostNormalMapScrollList)
-		{
-			mPostNormalMapScrollList->selectByValue(selectedIdValue);
-			mPostNormalMapScrollList->scrollToShowSelected();
-		}
-		if (scrollListCtrl != mPostSpecularMapScrollList)
-		{
-			mPostSpecularMapScrollList->selectByValue(selectedIdValue);
-			mPostSpecularMapScrollList->scrollToShowSelected();
-		}
-		if (scrollListCtrl != mPostOtherDataScrollList)
-		{
-			mPostOtherDataScrollList->selectByValue(selectedIdValue);
-			mPostOtherDataScrollList->scrollToShowSelected();
-		}
-	}
-}
-
-void LLFloaterDebugMaterials::onViewableObjectsScrollListSelectionChange()
-{
-	updateControls();
-}
-
-void LLFloaterDebugMaterials::onDeferredCheckRegionMaterialStatus(LLUUID regionId)
-{
-	checkRegionMaterialStatus(regionId);
-}
-
-void LLFloaterDebugMaterials::onDeferredRequestGetMaterials(LLUUID regionId)
-{
-	requestGetMaterials(regionId);
-}
-
-void LLFloaterDebugMaterials::onDeferredRequestPutMaterials(LLUUID regionId, bool pIsDoSet)
-{
-	requestPutMaterials(regionId, pIsDoSet);
-}
-
-void LLFloaterDebugMaterials::checkRegionMaterialStatus()
-{
-	LLViewerRegion *region = gAgent.getRegion();
-
-	if (region == NULL)
-	{
-		LL_WARNS("debugMaterials") << "Region is NULL" << LL_ENDL;
-		setState(kNoRegion);
-	}
-	else if (!region->capabilitiesReceived())
-	{
-		setState(kCapabilitiesLoading);
-		region->setCapabilitiesReceivedCallback(boost::bind(&LLFloaterDebugMaterials::onDeferredCheckRegionMaterialStatus, this, region->getRegionID()));
-	}
-	else
-	{
-		std::string capURL = region->getCapability(MATERIALS_CAPABILITY_NAME);
-
-		if (capURL.empty())
-		{
-			LL_WARNS("debugMaterials") << "Capability '" << MATERIALS_CAPABILITY_NAME
-				<< "' is not defined on the current region '" << region->getName() << "'" << LL_ENDL;
-			setState(kNotEnabled);
-		}
-		else
-		{
-			setState(kReady);
-		}
-	}
-}
-
-void LLFloaterDebugMaterials::checkRegionMaterialStatus(const LLUUID& regionId)
-{
-	const LLViewerRegion *region = gAgent.getRegion();
-
-	if ((region != NULL) && (region->getRegionID() == regionId))
-	{
-		checkRegionMaterialStatus();
-	}
-}
-
-void LLFloaterDebugMaterials::requestGetMaterials()
-{
-	LLViewerRegion *region = gAgent.getRegion();
-
-	if (region == NULL)
-	{
-		LL_WARNS("debugMaterials") << "Region is NULL" << LL_ENDL;
-		setState(kNoRegion);
-	}
-	else if (!region->capabilitiesReceived())
-	{
-		setState(kCapabilitiesLoading);
-		region->setCapabilitiesReceivedCallback(boost::bind(&LLFloaterDebugMaterials::onDeferredRequestGetMaterials, this, region->getRegionID()));
-	}
-	else
-	{
-		std::string capURL = region->getCapability(MATERIALS_CAPABILITY_NAME);
-
-		if (capURL.empty())
-		{
-			LL_WARNS("debugMaterials") << "Capability '" << MATERIALS_CAPABILITY_NAME
-				<< "' is not defined on the current region '" << region->getName() << "'" << LL_ENDL;
-			setState(kNotEnabled);
-		}
-		else
-		{
-			setState(kReady);
-			LLMaterialMgr::instance().getAll(region->getRegionID(), boost::bind(&LLFloaterDebugMaterials::onGetMaterials, _1, _2));
-		}
-	}
-}
-
-void LLFloaterDebugMaterials::requestGetMaterials(const LLUUID& regionId)
-{
-	const LLViewerRegion *region = gAgent.getRegion();
-
-	if ((region != NULL) && (region->getRegionID() == regionId))
-	{
-		requestGetMaterials();
-	}
-}
-
-void LLFloaterDebugMaterials::requestPutMaterials(bool pIsDoSet)
-{
-	LLViewerRegion *region = gAgent.getRegion();
-
-	if (region == NULL)
-	{
-		LL_WARNS("debugMaterials") << "Region is NULL" << LL_ENDL;
-		setState(kNoRegion);
-	}
-	else if (!region->capabilitiesReceived())
-	{
-		setState(kCapabilitiesLoading);
-		region->setCapabilitiesReceivedCallback(boost::bind(&LLFloaterDebugMaterials::onDeferredRequestPutMaterials, this, region->getRegionID(), pIsDoSet));
-	}
-	else
-	{
-		std::string capURL = region->getCapability(MATERIALS_CAPABILITY_NAME);
-
-		if (capURL.empty())
-		{
-			LL_WARNS("debugMaterials") << "Capability '" << MATERIALS_CAPABILITY_NAME
-				<< "' is not defined on the current region '" << region->getName() << "'" << LL_ENDL;
-			setState(kNotEnabled);
-		}
-		else
-		{
-			setState(kReady);
-
-			LLMaterial material = (pIsDoSet) ? getMaterial() : LLMaterial::null;
-
-			LLObjectSelectionHandle selectionHandle = LLSelectMgr::getInstance()->getEditSelection();
-			for (LLObjectSelection::valid_iterator objectIter = selectionHandle->valid_begin();
-				objectIter != selectionHandle->valid_end(); ++objectIter)
-			{
-				LLSelectNode* objectNode = *objectIter;
-				LLViewerObject* viewerObject = objectNode->getObject();
-
-				if (viewerObject != NULL)
-				{
-					const LLViewerRegion* viewerRegion = viewerObject->getRegion();
-					if (region != viewerRegion)
-					{
-						LL_ERRS("debugMaterials") << "cannot currently edit an object on a different region through the debug materials floater" << llendl;
-					}
-					S32 numTEs = llmin(static_cast<S32>(viewerObject->getNumTEs()), viewerObject->getNumFaces());
-					for (S32 curTEIndex = 0; curTEIndex < numTEs; ++curTEIndex)
-					{
-						if (objectNode->isTESelected(curTEIndex))
-						{
-							LLMaterialMgr::instance().put(viewerObject->getID(), curTEIndex, material);
-						}
-					}
-				}
-			}
-		}
-	}
-}
-
-void LLFloaterDebugMaterials::requestPutMaterials(const LLUUID& regionId, bool pIsDoSet)
-{
-	const LLViewerRegion *region = gAgent.getRegion();
-
-	if ((region != NULL) && (region->getRegionID() == regionId))
-	{
-		requestPutMaterials(pIsDoSet);
-	}
-}
-
-void LLFloaterDebugMaterials::parseQueryViewableObjects()
-{
-	llassert(mNextUnparsedQueryDataIndex >= 0);
-
-	if (mNextUnparsedQueryDataIndex >= 0)
-	{
-		LLScrollListCell::Params cellParams;
-		LLScrollListItem::Params rowParams;
-
-		S32 numViewerObjects = gObjectList.getNumObjects();
-		S32 viewerObjectIndex = mNextUnparsedQueryDataIndex;
-		for (S32 currentParseCount = 0;
-			(currentParseCount < 10) && (viewerObjectIndex < numViewerObjects);
-			++currentParseCount, ++viewerObjectIndex)
-		{
-			const LLViewerObject *viewerObject = gObjectList.getObject(viewerObjectIndex);
-			if ((viewerObject != NULL) && !viewerObject->isDead())
-			{
-				U8 objectNumTEs = viewerObject->getNumTEs();
-
-				if (objectNumTEs > 0U)
-				{
-					const LLUUID& objectId = viewerObject->getID();
-					U32 objectLocalId = viewerObject->getLocalID();
-					const LLViewerRegion* objectRegion = viewerObject->getRegion();
-
-					for (U8 curTEIndex = 0U; curTEIndex < objectNumTEs; ++curTEIndex)
-					{
-						const LLTextureEntry* objectTE = viewerObject->getTE(curTEIndex);
-						llassert(objectTE != NULL);
-						const LLMaterialID& objectMaterialID = objectTE->getMaterialID();
-						if (!objectMaterialID.isNull())
-						{
-							cellParams.font = LLFontGL::getFontMonospace();
-
-							cellParams.column = "object_id";
-							cellParams.value = objectId.asString();
-							rowParams.columns.add(cellParams);
-
-							cellParams.font = LLFontGL::getFontSansSerif();
-
-							cellParams.column = "region";
-							cellParams.value = ((objectRegion == NULL) ? "<null>" : objectRegion->getName());
-							rowParams.columns.add(cellParams);
-
-							cellParams.column = "local_id";
-							cellParams.value = llformat("%d", objectLocalId);
-							rowParams.columns.add(cellParams);
-
-							cellParams.column = "face_index";
-							cellParams.value = llformat("%u", static_cast<unsigned int>(curTEIndex));
-							rowParams.columns.add(cellParams);
-							cellParams.font = LLFontGL::getFontMonospace();
-
-							cellParams.column = "material_id";
-							cellParams.value = objectMaterialID.asString();
-							rowParams.columns.add(cellParams);
-
-							LLSD rowValue = LLSD::emptyMap();
-							rowValue[VIEWABLE_OBJECTS_REGION_ID_FIELD] = objectRegion->getRegionID();
-							rowValue[VIEWABLE_OBJECTS_OBJECT_ID_FIELD] = objectId;
-							rowValue[VIEWABLE_OBJECTS_MATERIAL_ID_FIELD] = objectMaterialID.asLLSD();
-
-							rowParams.value = rowValue;
-
-							mViewableObjectsScrollList->addRow(rowParams);
-						}
-					}
-				}
-			}
-		}
-
-		if (viewerObjectIndex < numViewerObjects)
-		{
-			mNextUnparsedQueryDataIndex = viewerObjectIndex;
-			updateQueryParsingStatus();
-		}
-		else
-		{
-			clearUnparsedQueryData();
-		}
-	}
-}
-
-void LLFloaterDebugMaterials::onGetMaterials(const LLUUID& region_id, const LLMaterialMgr::material_map_t& materials)
-{
-	LLFloaterDebugMaterials* instancep = LLFloaterReg::findTypedInstance<LLFloaterDebugMaterials>("floater_debug_materials");
-	if (!instancep)
-	{
-		return;
-	}
-
-	LLViewerRegion* regionp = gAgent.getRegion();
-	if ( (!regionp) || (regionp->getRegionID() != region_id) )
-	{
-		return;
-	}
-
-	LLScrollListCell::Params cellParams;
-	LLScrollListItem::Params normalMapRowParams;
-	LLScrollListItem::Params specularMapRowParams;
-	LLScrollListItem::Params otherDataRowParams;
-
-	instancep->clearGetResults();
-	for (LLMaterialMgr::material_map_t::const_iterator itMaterial = materials.begin(); itMaterial != materials.end(); ++itMaterial)
-	{
-		const LLMaterialID& material_id = itMaterial->first;
-		const LLMaterialPtr material = itMaterial->second;
-
-		F32 x, y;
-
-		cellParams.font = LLFontGL::getFontMonospace();
-
-		cellParams.column = "id";
-		cellParams.value = material_id.asString();
-		normalMapRowParams.columns.add(cellParams);
-		specularMapRowParams.columns.add(cellParams);
-		otherDataRowParams.columns.add(cellParams);
-
-		cellParams.column = "normal_map_list_map";
-		cellParams.value = material->getNormalID().asString();
-		normalMapRowParams.columns.add(cellParams);
-
-		cellParams.font = LLFontGL::getFontSansSerif();
-
-		material->getNormalOffset(x, y);
-		cellParams.column = "normal_map_list_offset_x";
-		cellParams.value = llformat("%f", x);
-		normalMapRowParams.columns.add(cellParams);
-		cellParams.column = "normal_map_list_offset_y";
-		cellParams.value = llformat("%f", y);
-		normalMapRowParams.columns.add(cellParams);
-
-		material->getNormalRepeat(x, y);
-		cellParams.column = "normal_map_list_repeat_x";
-		cellParams.value = llformat("%f", x);
-		normalMapRowParams.columns.add(cellParams);
-		cellParams.column = "normal_map_list_repeat_y";
-		cellParams.value = llformat("%f", y);
-		normalMapRowParams.columns.add(cellParams);
-
-		cellParams.column = "normal_map_list_rotation";
-		cellParams.value = llformat("%f", material->getNormalRotation());
-		normalMapRowParams.columns.add(cellParams);
-
-		cellParams.font = LLFontGL::getFontMonospace();
-
-		cellParams.column = "specular_map_list_map";
-		cellParams.value = material->getSpecularID().asString();
-		specularMapRowParams.columns.add(cellParams);
-
-		cellParams.font = LLFontGL::getFontSansSerif();
-
-		material->getSpecularOffset(x, y);
-		cellParams.column = "specular_map_list_offset_x";
-		cellParams.value = llformat("%f", x);
-		specularMapRowParams.columns.add(cellParams);
-		cellParams.column = "specular_map_list_offset_y";
-		cellParams.value = llformat("%f", y);
-		specularMapRowParams.columns.add(cellParams);
-
-		material->getSpecularRepeat(x, y);
-		cellParams.column = "specular_map_list_repeat_x";
-		cellParams.value = llformat("%f", x);
-		specularMapRowParams.columns.add(cellParams);
-
-		cellParams.column = "specular_map_list_repeat_y";
-		cellParams.value = llformat("%f", y);
-		specularMapRowParams.columns.add(cellParams);
-
-		cellParams.column = "specular_map_list_rotation";
-		cellParams.value = llformat("%f", material->getSpecularRotation());
-		specularMapRowParams.columns.add(cellParams);
-
-		const LLColor4U& specularColor = material->getSpecularLightColor();
-		cellParams.column = "specular_color";
-		cellParams.value = llformat("(%d, %d, %d, %d)", specularColor.mV[0],
-			specularColor.mV[1], specularColor.mV[2], specularColor.mV[3]);
-		otherDataRowParams.columns.add(cellParams);
-
-		cellParams.column = "specular_exponent";
-		cellParams.value = llformat("%d", material->getSpecularLightExponent());
-		otherDataRowParams.columns.add(cellParams);
-
-		cellParams.column = "env_intensity";
-		cellParams.value = llformat("%d", material->getEnvironmentIntensity());
-		otherDataRowParams.columns.add(cellParams);
-
-		cellParams.column = "alpha_mask_cutoff";
-		cellParams.value = llformat("%d", material->getAlphaMaskCutoff());
-		otherDataRowParams.columns.add(cellParams);
-
-		cellParams.column = "diffuse_alpha_mode";
-		cellParams.value = llformat("%d", material->getDiffuseAlphaMode());
-		otherDataRowParams.columns.add(cellParams);
-
-		normalMapRowParams.value = cellParams.value;
-		specularMapRowParams.value = cellParams.value;
-		otherDataRowParams.value = cellParams.value;
-
-		instancep->mGetNormalMapScrollList->addRow(normalMapRowParams);
-		instancep->mGetSpecularMapScrollList->addRow(specularMapRowParams);
-		instancep->mGetOtherDataScrollList->addRow(otherDataRowParams);
-	}
-}
-
-void LLFloaterDebugMaterials::onPostMaterial(const LLMaterialID& material_id, const LLMaterialPtr materialp)
-{
-	LLFloaterDebugMaterials* instancep = LLFloaterReg::findTypedInstance<LLFloaterDebugMaterials>("floater_debug_materials");
-	if ( (!instancep) || (!materialp.get()) )
-	{
-		return;
-	}
-
-	LLScrollListCell::Params cellParams;
-	LLScrollListItem::Params normalMapRowParams;
-	LLScrollListItem::Params specularMapRowParams;
-	LLScrollListItem::Params otherDataRowParams;
-
-	cellParams.font = LLFontGL::getFontMonospace();
-
-	cellParams.column = "id";
-	cellParams.value = material_id.asString();
-	normalMapRowParams.columns.add(cellParams);
-	specularMapRowParams.columns.add(cellParams);
-	otherDataRowParams.columns.add(cellParams);
-
-	cellParams.column = "normal_map_list_map";
-	cellParams.value = materialp->getNormalID().asString();
-	normalMapRowParams.columns.add(cellParams);
-
-	cellParams.font = LLFontGL::getFontSansSerif();
-
-	F32 x, y;
-	materialp->getNormalOffset(x, y);
-	cellParams.column = "normal_map_list_offset_x";
-	cellParams.value = llformat("%f", x);
-	normalMapRowParams.columns.add(cellParams);
-	cellParams.column = "normal_map_list_offset_y";
-	cellParams.value = llformat("%f", y);
-	normalMapRowParams.columns.add(cellParams);
-
-	materialp->getNormalRepeat(x, y);
-	cellParams.column = "normal_map_list_repeat_x";
-	cellParams.value = llformat("%f", x);
-	normalMapRowParams.columns.add(cellParams);
-	cellParams.column = "normal_map_list_repeat_y";
-	cellParams.value = llformat("%f", y);
-	normalMapRowParams.columns.add(cellParams);
-
-	cellParams.column = "normal_map_list_rotation";
-	cellParams.value = llformat("%f", materialp->getNormalRotation());
-	normalMapRowParams.columns.add(cellParams);
-
-	cellParams.font = LLFontGL::getFontMonospace();
-
-	cellParams.column = "specular_map_list_map";
-	cellParams.value = materialp->getSpecularID().asString();
-	specularMapRowParams.columns.add(cellParams);
-
-	cellParams.font = LLFontGL::getFontSansSerif();
-
-	materialp->getSpecularOffset(x, y);
-	cellParams.column = "specular_map_list_offset_x";
-	cellParams.value = llformat("%f", x);
-	specularMapRowParams.columns.add(cellParams);
-	cellParams.column = "specular_map_list_offset_y";
-	cellParams.value = llformat("%f", y);
-	specularMapRowParams.columns.add(cellParams);
-
-	materialp->getSpecularRepeat(x, y);
-	cellParams.column = "specular_map_list_repeat_x";
-	cellParams.value = llformat("%f", x);
-	specularMapRowParams.columns.add(cellParams);
-	cellParams.column = "specular_map_list_repeat_y";
-	cellParams.value = llformat("%f", y);
-	specularMapRowParams.columns.add(cellParams);
-
-	cellParams.column = "specular_map_list_rotation";
-	cellParams.value = llformat("%d", materialp->getSpecularRotation());
-	specularMapRowParams.columns.add(cellParams);
-
-	const LLColor4U& specularColor =materialp->getSpecularLightColor();
-	cellParams.column = "specular_color";
-	cellParams.value = llformat("(%d, %d, %d, %d)", specularColor.mV[0],
-		specularColor.mV[1], specularColor.mV[2], specularColor.mV[3]);
-	otherDataRowParams.columns.add(cellParams);
-
-	cellParams.column = "specular_exponent";
-	cellParams.value = llformat("%d", materialp->getSpecularLightExponent());
-	otherDataRowParams.columns.add(cellParams);
-
-	cellParams.column = "env_intensity";
-	cellParams.value = llformat("%d", materialp->getEnvironmentIntensity());
-	otherDataRowParams.columns.add(cellParams);
-
-	cellParams.column = "alpha_mask_cutoff";
-	cellParams.value = llformat("%d", materialp->getAlphaMaskCutoff());
-	otherDataRowParams.columns.add(cellParams);
-
-	cellParams.column = "diffuse_alpha_mode";
-	cellParams.value = llformat("%d", materialp->getDiffuseAlphaMode());
-	otherDataRowParams.columns.add(cellParams);
-
-	normalMapRowParams.value = cellParams.value;
-	specularMapRowParams.value = cellParams.value;
-	otherDataRowParams.value = cellParams.value;
-
-	instancep->mPostNormalMapScrollList->addRow(normalMapRowParams);
-	instancep->mPostSpecularMapScrollList->addRow(specularMapRowParams);
-	instancep->mPostOtherDataScrollList->addRow(otherDataRowParams);
-}
-
-void LLFloaterDebugMaterials::setState(EState pState)
-{
-	mState = pState;
-	updateStatusMessage();
-	updateControls();
-}
-
-void LLFloaterDebugMaterials::refreshObjectEdit()
-{
-	mPutScrollList->deleteAllItems();
-
-	LLScrollListCell::Params cellParams;
-	LLScrollListItem::Params rowParams;
-
-	LLObjectSelectionHandle selectionHandle = LLSelectMgr::getInstance()->getEditSelection();
-	for (LLObjectSelection::valid_iterator objectIter = selectionHandle->valid_begin();
-			objectIter != selectionHandle->valid_end(); ++objectIter)
-	{
-		LLSelectNode* nodep = *objectIter;
-
-		LLViewerObject* objectp = nodep->getObject();
-		if (objectp != NULL)
-		{
-			S32 numTEs = llmin(static_cast<S32>(objectp->getNumTEs()), objectp->getNumFaces());
-			for (S32 curTEIndex = 0; curTEIndex < numTEs; ++curTEIndex)
-			{
-				if (nodep->isTESelected(curTEIndex))
-				{
-					const LLTextureEntry* tep = objectp->getTE(curTEIndex);
-
-					cellParams.font = LLFontGL::getFontMonospace();
-
-					cellParams.column = "material_id";
-					cellParams.value = tep->getMaterialID().asString();
-					rowParams.columns.add(cellParams);
-
-					cellParams.font = LLFontGL::getFontSansSerif();
-
-					cellParams.column = "object_id";
-					cellParams.value = objectp->getID().asString();
-					rowParams.columns.add(cellParams);
-
-					cellParams.column = "face_index";
-					cellParams.value = llformat("%d", curTEIndex);
-					rowParams.columns.add(cellParams);
-
-					mPutScrollList->addRow(rowParams);
-				}
-			}
-		}
-	}
-}
-
-void LLFloaterDebugMaterials::resetObjectEditInputs()
-{
-	const LLSD zeroValue = static_cast<LLSD::Integer>(0);
-	const LLSD maxAlphaValue = static_cast<LLSD::Integer>(255);
-
-	mNormalMap->clear();
-	mNormalMapOffsetX->setValue(zeroValue);
-	mNormalMapOffsetY->setValue(zeroValue);
-	mNormalMapRepeatX->setValue(zeroValue);
-	mNormalMapRepeatY->setValue(zeroValue);
-	mNormalMapRotation->setValue(zeroValue);
-
-	mSpecularMap->clear();
-	mSpecularMapOffsetX->setValue(zeroValue);
-	mSpecularMapOffsetY->setValue(zeroValue);
-	mSpecularMapRepeatX->setValue(zeroValue);
-	mSpecularMapRepeatY->setValue(zeroValue);
-	mSpecularMapRotation->setValue(zeroValue);
-
-	mSpecularColor->set(mDefaultSpecularColor);
-	mSpecularColorAlpha->setValue(maxAlphaValue);
-	mSpecularExponent->setValue(zeroValue);
-	mEnvironmentExponent->setValue(zeroValue);
-	mAlphaMaskCutoff->setValue(zeroValue);
-	mDiffuseAlphaMode->setValue(zeroValue);
-}
-
-void LLFloaterDebugMaterials::clearGetResults()
-{
-	mGetNormalMapScrollList->deleteAllItems();
-	mGetSpecularMapScrollList->deleteAllItems();
-	mGetOtherDataScrollList->deleteAllItems();
-}
-
-void LLFloaterDebugMaterials::clearPostResults()
-{
-	mPostNormalMapScrollList->deleteAllItems();
-	mPostSpecularMapScrollList->deleteAllItems();
-	mPostOtherDataScrollList->deleteAllItems();
-}
-
-void LLFloaterDebugMaterials::clearViewableObjectsResults()
-{
-	mViewableObjectsScrollList->deleteAllItems();
-	clearUnparsedQueryData();
-}
-
-void LLFloaterDebugMaterials::setUnparsedQueryData()
-{
-	mNextUnparsedQueryDataIndex = 0;
-
-	updateQueryParsingStatus();
-}
-
-void LLFloaterDebugMaterials::clearUnparsedQueryData()
-{
-	mNextUnparsedQueryDataIndex = -1;
-
-	updateQueryParsingStatus();
-}
-
-void LLFloaterDebugMaterials::updateQueryParsingStatus()
-{
-	std::string queryStatus;
-
-	if (mNextUnparsedQueryDataIndex >= 0)
-	{
-		LLLocale locale(LLStringUtil::getLocale());
-		std::string numProcessedString;
-		LLResMgr::getInstance()->getIntegerString(numProcessedString, mNextUnparsedQueryDataIndex);
-
-		std::string numTotalString;
-		LLResMgr::getInstance()->getIntegerString(numTotalString, gObjectList.getNumObjects());
-
-		LLStringUtil::format_map_t stringArgs;
-		stringArgs["[NUM_PROCESSED]"] = numProcessedString;
-		stringArgs["[NUM_TOTAL]"] = numTotalString;
-
-		queryStatus = getString("querying_status_in_progress", stringArgs);
-	}
-	else
-	{
-		queryStatus = getString("querying_status_done");
-	}
-
-	mQueryStatusText->setText(static_cast<const LLStringExplicit>(queryStatus));
-}
-
-void LLFloaterDebugMaterials::updateStatusMessage()
-{
-	std::string statusText;
-	LLStyle::Params styleParams;
-
-	switch (getState())
-	{
-	case kNoRegion :
-		statusText = getString("status_no_region");
-		styleParams.color = mErrorColor;
-		break;
-	case kCapabilitiesLoading :
-		statusText = getString("status_capabilities_loading");
-		styleParams.color = mWarningColor;
-		break;
-	case kReady :
-		statusText = getString("status_ready");
-		break;
-	case kRequestStarted :
-		statusText = getString("status_request_started");
-		styleParams.color = mWarningColor;
-		break;
-	case kRequestCompleted :
-		statusText = getString("status_request_completed");
-		break;
-	case kNotEnabled :
-		statusText = getString("status_not_enabled");
-		styleParams.color = mErrorColor;
-		break;
-	case kError :
-		statusText = getString("status_error");
-		styleParams.color = mErrorColor;
-		break;
-	default :
-		statusText = getString("status_ready");
-		llassert(0);
-		break;
-	}
-
-	mStatusText->setText((LLStringExplicit)statusText, styleParams);
-}
-
-void LLFloaterDebugMaterials::updateControls()
-{
-	LLObjectSelectionHandle selectionHandle = LLSelectMgr::getInstance()->getEditSelection();
-	bool isPutEnabled = (selectionHandle->valid_begin() != selectionHandle->valid_end());
-	bool isPostEnabled = (mViewableObjectsScrollList->getNumSelected() > 0);
-
-	switch (getState())
-	{
-	case kNoRegion :
-	case kCapabilitiesLoading :
-	case kRequestStarted :
-	case kNotEnabled :
-		mGetButton->setEnabled(FALSE);
-		mPutSetButton->setEnabled(FALSE);
-		mPutClearButton->setEnabled(FALSE);
-		mPostButton->setEnabled(FALSE);
-		break;
-	case kReady :
-	case kRequestCompleted :
-	case kError :
-		mGetButton->setEnabled(TRUE);
-		mPutSetButton->setEnabled(isPutEnabled);
-		mPutClearButton->setEnabled(isPutEnabled);
-		mPostButton->setEnabled(isPostEnabled);
-		break;
-	default :
-		mGetButton->setEnabled(TRUE);
-		mPutSetButton->setEnabled(isPutEnabled);
-		mPutClearButton->setEnabled(isPutEnabled);
-		mPostButton->setEnabled(isPostEnabled);
-		llassert(0);
-		break;
-	}
-}
-
-template<typename T> T getLineEditorValue(const LLLineEditor *pLineEditor);
-
-template<> U8 getLineEditorValue(const LLLineEditor *pLineEditor)
-{
-	U8 value = 0;
-
-	LLStringUtil::convertToU8(pLineEditor->getText(), value);
-
-	return value;
-}
-
-LLMaterial LLFloaterDebugMaterials::getMaterial() const
-{
-	LLMaterial material;
-
-	material.setNormalID(mNormalMap->getImageAssetID());
-	material.setNormalOffset(mNormalMapOffsetX->get(), mNormalMapOffsetY->get());
-	material.setNormalRepeat(mNormalMapRepeatX->get(), mNormalMapRepeatY->get());
-	material.setNormalRotation(mNormalMapRotation->get());
-
-	material.setSpecularID(mSpecularMap->getImageAssetID());
-	material.setSpecularOffset(mSpecularMapOffsetX->get(), mSpecularMapOffsetY->get());
-	material.setSpecularRepeat(mSpecularMapRepeatX->get(), mSpecularMapRepeatY->get());
-	material.setSpecularRotation(mSpecularMapRotation->get());
-
-	const LLColor4& specularColor = mSpecularColor->get();
-	LLColor4U specularColor4U = specularColor;
-	specularColor4U.setAlpha(static_cast<U8>(llclamp(llround(mSpecularColorAlpha->get()), 0, 255)));
-	material.setSpecularLightColor(specularColor4U);
-
-	material.setSpecularLightExponent(getLineEditorValue<U8>(mSpecularExponent));
-	material.setEnvironmentIntensity(getLineEditorValue<U8>(mEnvironmentExponent));
-	material.setDiffuseAlphaMode(getLineEditorValue<U8>(mDiffuseAlphaMode));
-	material.setAlphaMaskCutoff(getLineEditorValue<U8>(mAlphaMaskCutoff));
-
-	return material;
-}
diff --git a/indra/newview/llfloaterdebugmaterials.h b/indra/newview/llfloaterdebugmaterials.h
deleted file mode 100644
index 0bd33d7cd0be52405d02b4abc52c490d560e83d7..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterdebugmaterials.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/** 
-* @file   llfloaterdebugmaterials.h
-* @brief  Header file for llfloaterdebugmaterials
-* @author Stinson@lindenlab.com
-*
-* $LicenseInfo:firstyear=2012&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2012, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-#ifndef LL_LLFLOATERDEBUGMATERIALS_H
-#define LL_LLFLOATERDEBUGMATERIALS_H
-
-#include <string>
-
-#include <boost/shared_ptr.hpp>
-#include <boost/signals2.hpp>
-
-#include "llfloater.h"
-#include "llmaterial.h"
-#include "llmaterialmgr.h"
-#include "lluuid.h"
-#include "v4color.h"
-
-class LLButton;
-class LLColorSwatchCtrl;
-class LLColor4U;
-class LLLineEditor;
-class LLMaterialID;
-class LLScrollListCtrl;
-class LLSD;
-class LLSpinCtrl;
-class LLTextBase;
-class LLTextureCtrl;
-class LLUICtrl;
-class MultiMaterialsResponder;
-
-typedef boost::shared_ptr<MultiMaterialsResponder> MultiMaterialsResponderPtr;
-
-class LLFloaterDebugMaterials : public LLFloater
-{
-public:
-	virtual BOOL postBuild();
-
-	virtual void onOpen(const LLSD& pKey);
-	virtual void onClose(bool pIsAppQuitting);
-
-	virtual void draw();
-
-protected:
-
-private:
-	friend class LLFloaterReg;
-
-	typedef enum {
-		kNoRegion,
-		kCapabilitiesLoading,
-		kReady,
-		kRequestStarted,
-		kRequestCompleted,
-		kNotEnabled,
-		kError
-	} EState;
-
-	LLFloaterDebugMaterials(const LLSD& pParams);
-	virtual ~LLFloaterDebugMaterials();
-
-	void          onGetClicked();
-	void          onValueEntered(LLUICtrl* pUICtrl);
-	void          onPutSetClicked();
-	void          onPutClearClicked();
-	void          onResetPutValuesClicked();
-	void          onQueryVisibleObjectsClicked();
-	void          onPostClicked();
-	void          onRegionCross();
-	void          onInWorldSelectionChange();
-	void          onGetScrollListSelectionChange(LLUICtrl* pUICtrl);
-	void          onPostScrollListSelectionChange(LLUICtrl* pUICtrl);
-	void          onViewableObjectsScrollListSelectionChange();
-	void          onDeferredCheckRegionMaterialStatus(LLUUID regionId);
-	void          onDeferredRequestGetMaterials(LLUUID regionId);
-	void          onDeferredRequestPutMaterials(LLUUID regionId, bool pIsDoSet);
-
-	void          checkRegionMaterialStatus();
-	void          checkRegionMaterialStatus(const LLUUID& regionId);
-
-	void          requestGetMaterials();
-	void          requestGetMaterials(const LLUUID& regionId);
-
-	void          requestPutMaterials(bool pIsDoSet);
-	void          requestPutMaterials(const LLUUID& regionId, bool pIsDoSet);
-
-	static void   onGetMaterials(const LLUUID& region_id, const LLMaterialMgr::material_map_t& materials);
-	static void   onPostMaterial(const LLMaterialID& material_id, const LLMaterialPtr materialp);
-
-	void          parseQueryViewableObjects();
-
-	void          setState(EState pState);
-	inline EState getState() const;
-
-	void          refreshObjectEdit();
-	void          resetObjectEditInputs();
-	void          clearGetResults();
-	void          clearPostResults();
-	void          clearViewableObjectsResults();
-
-	void          setUnparsedQueryData();
-	void          clearUnparsedQueryData();
-	void          updateQueryParsingStatus();
-
-	void          updateStatusMessage();
-	void          updateControls();
-
-	LLMaterial    getMaterial() const;
-
-	LLTextBase*                 mStatusText;
-	LLButton*                   mGetButton;
-	LLTextBase*                 mParsingStatusText;
-	LLScrollListCtrl*           mGetNormalMapScrollList;
-	LLScrollListCtrl*           mGetSpecularMapScrollList;
-	LLScrollListCtrl*           mGetOtherDataScrollList;
-	LLTextureCtrl*              mNormalMap;
-	LLSpinCtrl*                 mNormalMapOffsetX;
-	LLSpinCtrl*                 mNormalMapOffsetY;
-	LLSpinCtrl*                 mNormalMapRepeatX;
-	LLSpinCtrl*                 mNormalMapRepeatY;
-	LLSpinCtrl*                 mNormalMapRotation;
-	LLTextureCtrl*              mSpecularMap;
-	LLSpinCtrl*                 mSpecularMapOffsetX;
-	LLSpinCtrl*                 mSpecularMapOffsetY;
-	LLSpinCtrl*                 mSpecularMapRepeatX;
-	LLSpinCtrl*                 mSpecularMapRepeatY;
-	LLSpinCtrl*                 mSpecularMapRotation;
-	LLColorSwatchCtrl*          mSpecularColor;
-	LLSpinCtrl*                 mSpecularColorAlpha;
-	LLLineEditor*               mSpecularExponent;
-	LLLineEditor*               mEnvironmentExponent;
-	LLLineEditor*               mAlphaMaskCutoff;
-	LLLineEditor*               mDiffuseAlphaMode;
-	LLButton*                   mPutSetButton;
-	LLButton*                   mPutClearButton;
-	LLScrollListCtrl*           mPutScrollList;
-	LLButton*                   mQueryViewableObjectsButton;
-	LLTextBase*                 mQueryStatusText;
-	LLScrollListCtrl*           mViewableObjectsScrollList;
-	LLButton*                   mPostButton;
-	LLScrollListCtrl*           mPostNormalMapScrollList;
-	LLScrollListCtrl*           mPostSpecularMapScrollList;
-	LLScrollListCtrl*           mPostOtherDataScrollList;
-
-	LLColor4                    mDefaultSpecularColor;
-
-	EState                      mState;
-	LLColor4                    mWarningColor;
-	LLColor4                    mErrorColor;
-
-	boost::signals2::connection mRegionCrossConnection;
-	boost::signals2::connection mTeleportFailedConnection;
-	boost::signals2::connection mSelectionUpdateConnection;
-
-	S32                         mNextUnparsedQueryDataIndex;
-};
-
-
-LLFloaterDebugMaterials::EState LLFloaterDebugMaterials::getState() const
-{
-	return mState;
-}
-
-#endif // LL_LLFLOATERDEBUGMATERIALS_H
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index e74c8509ce4702f456f7fcdc9bdf65f9c9495978..024265b377f8280733658e82a3baaec49c676eff 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -46,6 +46,7 @@
 #include "lldrawpoolbump.h"
 #include "llface.h"
 #include "lllineeditor.h"
+#include "llmaterialmgr.h"
 #include "llmediaentry.h"
 #include "llnotificationsutil.h"
 #include "llresmgr.h"
@@ -59,22 +60,37 @@
 #include "llviewercontrol.h"
 #include "llviewermedia.h"
 #include "llviewerobject.h"
+#include "llviewerregion.h"
 #include "llviewerstats.h"
 #include "llvovolume.h"
 #include "lluictrlfactory.h"
 #include "llpluginclassmedia.h"
 #include "llviewertexturelist.h"
 
+//
+// Constant definitions for comboboxes
+// Must match the commbobox definitions in panel_tools_texture.xml
+//
+const S32 MATMEDIA_MATERIAL = 0;	// Material
+const S32 MATMEDIA_MEDIA = 1;		// Media
+const S32 MATTYPE_DIFFUSE = 0;		// Diffuse material texture
+const S32 MATTYPE_NORMAL = 1;		// Normal map
+const S32 MATTYPE_SPECULAR = 2;		// Specular map
+const S32 ALPHAMODE_NONE = 0;		// No alpha mask applied
+const S32 ALPHAMODE_BLEND = 1;		// Alpha blending mode
+const S32 ALPHAMODE_MASK = 2;		// Alpha masking mode
+const S32 BUMPY_TEXTURE = 18;		// use supplied normal map
+const S32 SHINY_TEXTURE = 4;		// use supplied specular map
+
 //
 // Methods
 //
 
 BOOL	LLPanelFace::postBuild()
 {
-	childSetCommitCallback("combobox matmedia",&LLPanelFace::onCommitMaterialsMedia,this);
-	childSetCommitCallback("combobox mattype",&LLPanelFace::onCommitMaterialType,this);
 	childSetCommitCallback("combobox shininess",&LLPanelFace::onCommitShiny,this);
 	childSetCommitCallback("combobox bumpiness",&LLPanelFace::onCommitBump,this);
+	childSetCommitCallback("combobox alphamode",&LLPanelFace::onCommitAlphaMode,this);
 	childSetCommitCallback("TexScaleU",&LLPanelFace::onCommitTextureInfo, this);
 	childSetCommitCallback("TexScaleV",&LLPanelFace::onCommitTextureInfo, this);
 	childSetCommitCallback("TexRot",&LLPanelFace::onCommitTextureInfo, this);
@@ -82,13 +98,31 @@ BOOL	LLPanelFace::postBuild()
 	childSetCommitCallback("checkbox planar align",&LLPanelFace::onCommitPlanarAlign, this);
 	childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureInfo, this);
 	childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureInfo, this);
+	childSetCommitCallback("bumpyScaleU",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("bumpyScaleV",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("bumpyRot",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("bumpyOffsetU",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("bumpyOffsetV",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("shinyScaleU",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("shinyScaleV",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("shinyRot",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("shinyOffsetU",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("shinyOffsetV",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("glossiness",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("environment",&LLPanelFace::onCommitMaterial, this);
+	childSetCommitCallback("maskcutoff",&LLPanelFace::onCommitMaterial, this);
 	childSetAction("button align",&LLPanelFace::onClickAutoFix,this);
 
 	LLRect	rect = this->getRect();
 	LLTextureCtrl*	mTextureCtrl;
+	LLTextureCtrl*	mShinyTextureCtrl;
+	LLTextureCtrl*	mBumpyTextureCtrl;
 	LLColorSwatchCtrl*	mColorSwatch;
+	LLColorSwatchCtrl*	mShinyColorSwatch;
 
 	LLComboBox*		mComboTexGen;
+	LLComboBox*		mComboMatMedia;
+	LLComboBox*		mComboMatType;
 
 	LLCheckBoxCtrl	*mCheckFullbright;
 	
@@ -114,6 +148,36 @@ BOOL	LLPanelFace::postBuild()
 		mTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
 	}
 
+	mShinyTextureCtrl = getChild<LLTextureCtrl>("shinytexture control");
+	if(mShinyTextureCtrl)
+	{
+		mShinyTextureCtrl->setDefaultImageAssetID(LLUUID( gSavedSettings.getString( "DefaultObjectTexture" )));
+		mShinyTextureCtrl->setCommitCallback( boost::bind(&LLPanelFace::onCommitMaterialTexture, this, _2) );
+		mShinyTextureCtrl->setOnCancelCallback( boost::bind(&LLPanelFace::onCancelMaterialTexture, this, _2) );
+		mShinyTextureCtrl->setOnSelectCallback( boost::bind(&LLPanelFace::onSelectMaterialTexture, this, _2) );
+		mShinyTextureCtrl->setDragCallback(boost::bind(&LLPanelFace::onDragTexture, this, _2));
+		mShinyTextureCtrl->setOnTextureSelectedCallback(boost::bind(&LLPanelFace::onTextureSelectionChanged, this, _1));
+		mShinyTextureCtrl->setFollowsTop();
+		mShinyTextureCtrl->setFollowsLeft();
+		mShinyTextureCtrl->setImmediateFilterPermMask(PERM_NONE);
+		mShinyTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
+	}
+
+	mBumpyTextureCtrl = getChild<LLTextureCtrl>("bumpytexture control");
+	if(mBumpyTextureCtrl)
+	{
+		mBumpyTextureCtrl->setDefaultImageAssetID(LLUUID( gSavedSettings.getString( "DefaultObjectTexture" )));
+		mBumpyTextureCtrl->setCommitCallback( boost::bind(&LLPanelFace::onCommitMaterialTexture, this, _2) );
+		mBumpyTextureCtrl->setOnCancelCallback( boost::bind(&LLPanelFace::onCancelMaterialTexture, this, _2) );
+		mBumpyTextureCtrl->setOnSelectCallback( boost::bind(&LLPanelFace::onSelectMaterialTexture, this, _2) );
+		mBumpyTextureCtrl->setDragCallback(boost::bind(&LLPanelFace::onDragTexture, this, _2));
+		mBumpyTextureCtrl->setOnTextureSelectedCallback(boost::bind(&LLPanelFace::onTextureSelectionChanged, this, _1));
+		mBumpyTextureCtrl->setFollowsTop();
+		mBumpyTextureCtrl->setFollowsLeft();
+		mBumpyTextureCtrl->setImmediateFilterPermMask(PERM_NONE);
+		mBumpyTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
+	}
+
 	mColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
 	if(mColorSwatch)
 	{
@@ -125,6 +189,15 @@ BOOL	LLPanelFace::postBuild()
 		mColorSwatch->setCanApplyImmediately(TRUE);
 	}
 
+	mShinyColorSwatch = getChild<LLColorSwatchCtrl>("shinycolorswatch");
+	if(mShinyColorSwatch)
+	{
+		mShinyColorSwatch->setCommitCallback(boost::bind(&LLPanelFace::onCommitShinyColor, this, _2));
+		mShinyColorSwatch->setFollowsTop();
+		mShinyColorSwatch->setFollowsLeft();
+		mShinyColorSwatch->setCanApplyImmediately(TRUE);
+	}
+
 	mLabelColorTransp = getChild<LLTextBox>("color trans");
 	if(mLabelColorTransp)
 	{
@@ -154,6 +227,20 @@ BOOL	LLPanelFace::postBuild()
 		mComboTexGen->setFollows(FOLLOWS_LEFT | FOLLOWS_TOP);	
 	}
 
+	mComboMatMedia = getChild<LLComboBox>("combobox matmedia");
+	if(mComboMatMedia)
+	{
+		mComboMatMedia->setCommitCallback(LLPanelFace::onCommitMaterialsMedia,this);
+		mComboMatMedia->selectNthItem(MATMEDIA_MATERIAL);
+	}
+
+	mComboMatType = getChild<LLComboBox>("combobox mattype");
+	if(mComboMatType)
+	{
+		mComboMatType->setCommitCallback(LLPanelFace::onCommitMaterialType, this);
+		mComboMatType->selectNthItem(MATTYPE_DIFFUSE);
+	}
+
 	mCtrlGlow = getChild<LLSpinCtrl>("glow");
 	if(mCtrlGlow)
 	{
@@ -167,7 +254,10 @@ BOOL	LLPanelFace::postBuild()
 }
 
 LLPanelFace::LLPanelFace()
-:	LLPanel()
+:	LLPanel(),
+	mMaterialID(LLMaterialID::null),
+	mMaterial(LLMaterialPtr()),
+	mIsAlpha(FALSE)
 {
 }
 
@@ -492,30 +582,33 @@ void LLPanelFace::getState()
 		BOOL editable = objectp->permModify() && !objectp->isPermanentEnforced();
 
 		// only turn on auto-adjust button if there is a media renderer and the media is loaded
-		getChildView("textbox autofix")->setEnabled(editable);
 		getChildView("button align")->setEnabled(editable);
 
-		LLCtrlSelectionInterface* combobox_matmedia =
-		      childGetSelectionInterface("combobox matmedia");
+		LLComboBox* combobox_matmedia = getChild<LLComboBox>("combobox matmedia");
 		if (combobox_matmedia)
 		{
-			combobox_matmedia->selectNthItem(0);
+			if (combobox_matmedia->getCurrentIndex() < MATMEDIA_MATERIAL)
+			{
+				combobox_matmedia->selectNthItem(MATMEDIA_MATERIAL);
+			}
 		}
 		else
 		{
-			llwarns << "failed childGetSelectionInterface for 'combobox matmedia'" << llendl;
+			llwarns << "failed getChild for 'combobox matmedia'" << llendl;
 		}
 		getChildView("combobox matmedia")->setEnabled(editable);
 
-		LLCtrlSelectionInterface* combobox_mattype =
-		      childGetSelectionInterface("combobox mattype");
+		LLComboBox* combobox_mattype = getChild<LLComboBox>("combobox mattype");
 		if (combobox_mattype)
 		{
-			combobox_mattype->selectNthItem(0);
+			if (combobox_mattype->getCurrentIndex() < MATTYPE_DIFFUSE)
+			{
+				combobox_mattype->selectNthItem(MATTYPE_DIFFUSE);
+			}
 		}
 		else
 		{
-			llwarns << "failed childGetSelectionInterface for 'combobox mattype'" << llendl;
+			llwarns << "failed getChild for 'combobox mattype'" << llendl;
 		}
 		getChildView("combobox mattype")->setEnabled(editable);
 		onCommitMaterialsMedia(NULL, this);
@@ -531,6 +624,8 @@ void LLPanelFace::getState()
 
 		bool identical;
 		LLTextureCtrl*	texture_ctrl = getChild<LLTextureCtrl>("texture control");
+		LLTextureCtrl*	shinytexture_ctrl = getChild<LLTextureCtrl>("shinytexture control");
+		LLTextureCtrl*	bumpytexture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
 		
 		// Texture
 		{
@@ -565,12 +660,48 @@ void LLPanelFace::getState()
 			} func;
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, id );
 
+			mIsAlpha = FALSE;
+			LLGLenum image_format;
+			struct f2 : public LLSelectedTEGetFunctor<LLGLenum>
+			{
+				LLGLenum get(LLViewerObject* object, S32 te_index)
+				{
+					LLGLenum image_format = GL_RGB;
+					
+					LLViewerTexture* image = object->getTEImage(te_index);
+					if (image) image_format  = image->getPrimaryFormat();
+					return image_format;
+				}
+			} func2;
+			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func2, image_format );
+			mIsAlpha = image_format != GL_RGB;
+
 			if(LLViewerMedia::textureHasMedia(id))
 			{
-				getChildView("textbox autofix")->setEnabled(editable);
 				getChildView("button align")->setEnabled(editable);
 			}
 			
+			{
+				// Default alpha mode to None if texture has no alpha, or Alpha Blending if present
+				// Will be overridden later if a material is present for this face
+				S32 default_alpha = ALPHAMODE_NONE;
+				if (mIsAlpha)
+				{
+					default_alpha = ALPHAMODE_BLEND;
+				}
+				LLCtrlSelectionInterface* combobox_alphamode =
+				      childGetSelectionInterface("combobox alphamode");
+				if (combobox_alphamode)
+				{
+					combobox_alphamode->selectNthItem(default_alpha);
+				}
+				else
+				{
+					llwarns << "failed childGetSelectionInterface for 'combobox alphamode'" << llendl;
+				}
+				onCommitAlphaMode(getChild<LLComboBox>("combobox alphamode"),this);
+			}
+			
 			if (identical)
 			{
 				// All selected have the same texture
@@ -579,6 +710,16 @@ void LLPanelFace::getState()
 					texture_ctrl->setTentative( FALSE );
 					texture_ctrl->setEnabled( editable );
 					texture_ctrl->setImageAssetID( id );
+					shinytexture_ctrl->setTentative( FALSE );
+					shinytexture_ctrl->setEnabled( editable );
+					shinytexture_ctrl->setImageAssetID( id );
+					bumpytexture_ctrl->setTentative( FALSE );
+					bumpytexture_ctrl->setEnabled( editable );
+					bumpytexture_ctrl->setImageAssetID( id );
+					getChildView("combobox alphamode")->setEnabled(editable && mIsAlpha);
+					getChildView("label alphamode")->setEnabled(editable && mIsAlpha);
+					getChildView("maskcutoff")->setEnabled(editable && mIsAlpha);
+					getChildView("label maskcutoff")->setEnabled(editable && mIsAlpha);
 				}
 			}
 			else
@@ -591,6 +732,16 @@ void LLPanelFace::getState()
 						texture_ctrl->setTentative( FALSE );
 						texture_ctrl->setEnabled( FALSE );
 						texture_ctrl->setImageAssetID( LLUUID::null );
+						shinytexture_ctrl->setTentative( FALSE );
+						shinytexture_ctrl->setEnabled( FALSE );
+						shinytexture_ctrl->setImageAssetID( LLUUID::null );
+						bumpytexture_ctrl->setTentative( FALSE );
+						bumpytexture_ctrl->setEnabled( FALSE );
+						bumpytexture_ctrl->setImageAssetID( LLUUID::null );
+						getChildView("combobox alphamode")->setEnabled( FALSE );
+						getChildView("label alphamode")->setEnabled( FALSE );
+						getChildView("maskcutoff")->setEnabled( FALSE);
+						getChildView("label maskcutoff")->setEnabled( FALSE );
 					}
 					else
 					{
@@ -598,6 +749,16 @@ void LLPanelFace::getState()
 						texture_ctrl->setTentative( TRUE );
 						texture_ctrl->setEnabled( editable );
 						texture_ctrl->setImageAssetID( id );
+						shinytexture_ctrl->setTentative( TRUE );
+						shinytexture_ctrl->setEnabled( editable );
+						shinytexture_ctrl->setImageAssetID( id );
+						bumpytexture_ctrl->setTentative( TRUE );
+						bumpytexture_ctrl->setEnabled( editable );
+						bumpytexture_ctrl->setImageAssetID( id );
+						getChildView("combobox alphamode")->setEnabled(editable && mIsAlpha);
+						getChildView("label alphamode")->setEnabled(editable && mIsAlpha);
+						getChildView("maskcutoff")->setEnabled(editable && mIsAlpha);
+						getChildView("label maskcutoff")->setEnabled(editable && mIsAlpha);
 					}
 				}
 			}
@@ -656,6 +817,12 @@ void LLPanelFace::getState()
 			getChild<LLUICtrl>("TexScaleU")->setValue(editable ? scale_s : 0);
 			getChild<LLUICtrl>("TexScaleU")->setTentative(LLSD((BOOL)(!identical)));
 			getChildView("TexScaleU")->setEnabled(editable);
+			getChild<LLUICtrl>("shinyScaleU")->setValue(editable ? scale_s : 0);
+			getChild<LLUICtrl>("shinyScaleU")->setTentative(LLSD((BOOL)(!identical)));
+			getChildView("shinyScaleU")->setEnabled(FALSE);
+			getChild<LLUICtrl>("bumpyScaleU")->setValue(editable ? scale_s : 0);
+			getChild<LLUICtrl>("bumpyScaleU")->setTentative(LLSD((BOOL)(!identical)));
+			getChildView("bumpyScaleU")->setEnabled(FALSE);
 		}
 
 		{
@@ -673,6 +840,12 @@ void LLPanelFace::getState()
 			getChild<LLUICtrl>("TexScaleV")->setValue(editable ? scale_t : 0);
 			getChild<LLUICtrl>("TexScaleV")->setTentative(LLSD((BOOL)(!identical)));
 			getChildView("TexScaleV")->setEnabled(editable);
+			getChild<LLUICtrl>("shinyScaleV")->setValue(editable ? scale_t : 0);
+			getChild<LLUICtrl>("shinyScaleV")->setTentative(LLSD((BOOL)(!identical)));
+			getChildView("shinyScaleV")->setEnabled(FALSE);
+			getChild<LLUICtrl>("bumpyScaleV")->setValue(editable ? scale_t : 0);
+			getChild<LLUICtrl>("bumpyScaleV")->setTentative(LLSD((BOOL)(!identical)));
+			getChildView("bumpyScaleV")->setEnabled(FALSE);
 		}
 
 		// Texture offset
@@ -691,6 +864,12 @@ void LLPanelFace::getState()
 			getChild<LLUICtrl>("TexOffsetU")->setValue(editable ? offset_s : 0);
 			getChild<LLUICtrl>("TexOffsetU")->setTentative(!identical);
 			getChildView("TexOffsetU")->setEnabled(editable);
+			getChild<LLUICtrl>("shinyOffsetU")->setValue(editable ? offset_s : 0);
+			getChild<LLUICtrl>("shinyOffsetU")->setTentative(!identical);
+			getChildView("shinyOffsetU")->setEnabled(FALSE);
+			getChild<LLUICtrl>("bumpyOffsetU")->setValue(editable ? offset_s : 0);
+			getChild<LLUICtrl>("bumpyOffsetU")->setTentative(!identical);
+			getChildView("bumpyOffsetU")->setEnabled(FALSE);
 		}
 
 		{
@@ -707,6 +886,12 @@ void LLPanelFace::getState()
 			getChild<LLUICtrl>("TexOffsetV")->setValue(editable ? offset_t : 0);
 			getChild<LLUICtrl>("TexOffsetV")->setTentative(!identical);
 			getChildView("TexOffsetV")->setEnabled(editable);
+			getChild<LLUICtrl>("shinyOffsetV")->setValue(editable ? offset_t : 0);
+			getChild<LLUICtrl>("shinyOffsetV")->setTentative(!identical);
+			getChildView("shinyOffsetV")->setEnabled(FALSE);
+			getChild<LLUICtrl>("bumpyOffsetV")->setValue(editable ? offset_t : 0);
+			getChild<LLUICtrl>("bumpyOffsetV")->setTentative(!identical);
+			getChildView("bumpyOffsetV")->setEnabled(FALSE);
 		}
 
 		// Texture rotation
@@ -724,6 +909,12 @@ void LLPanelFace::getState()
 			getChild<LLUICtrl>("TexRot")->setValue(editable ? rotation * RAD_TO_DEG : 0);
 			getChild<LLUICtrl>("TexRot")->setTentative(!identical);
 			getChildView("TexRot")->setEnabled(editable);
+			getChild<LLUICtrl>("shinyRot")->setValue(editable ? rotation * RAD_TO_DEG : 0);
+			getChild<LLUICtrl>("shinyRot")->setTentative(!identical);
+			getChildView("shinyRot")->setEnabled(FALSE);
+			getChild<LLUICtrl>("bumpyRot")->setValue(editable ? rotation * RAD_TO_DEG : 0);
+			getChild<LLUICtrl>("bumpyRot")->setTentative(!identical);
+			getChildView("bumpyRot")->setEnabled(FALSE);
 		}
 
 		// Color swatch
@@ -779,7 +970,7 @@ void LLPanelFace::getState()
 
 		}
 
-		// Bump
+		// Shiny
 		{
 			F32 shinyf = 0.f;
 			struct f9 : public LLSelectedTEGetFunctor<F32>
@@ -803,8 +994,18 @@ void LLPanelFace::getState()
 			getChildView("combobox shininess")->setEnabled(editable);
 			getChild<LLUICtrl>("combobox shininess")->setTentative(!identical);
 			getChildView("label shininess")->setEnabled(editable);
+			getChildView("glossiness")->setEnabled(editable);
+			getChild<LLUICtrl>("glossiness")->setTentative(!identical);
+			getChildView("label glossiness")->setEnabled(editable);
+			getChildView("environment")->setEnabled(editable);
+			getChild<LLUICtrl>("environment")->setTentative(!identical);
+			getChildView("label environment")->setEnabled(editable);
+			getChildView("shinycolorswatch")->setEnabled(editable);
+			getChild<LLUICtrl>("shinycolorswatch")->setTentative(!identical);
+			getChildView("label shinycolor")->setEnabled(editable);
 		}
 
+		// Bumpy
 		{
 			F32 bumpf = 0.f;
 			struct f10 : public LLSelectedTEGetFunctor<F32>
@@ -859,6 +1060,10 @@ void LLPanelFace::getState()
 			{
 				getChild<LLUICtrl>("TexScaleU")->setValue(2.0f * getChild<LLUICtrl>("TexScaleU")->getValue().asReal() );
 				getChild<LLUICtrl>("TexScaleV")->setValue(2.0f * getChild<LLUICtrl>("TexScaleV")->getValue().asReal() );
+				getChild<LLUICtrl>("shinyScaleU")->setValue(2.0f * getChild<LLUICtrl>("TexScaleU")->getValue().asReal() );
+				getChild<LLUICtrl>("shinyScaleV")->setValue(2.0f * getChild<LLUICtrl>("TexScaleV")->getValue().asReal() );
+				getChild<LLUICtrl>("bumpyScaleU")->setValue(2.0f * getChild<LLUICtrl>("TexScaleU")->getValue().asReal() );
+				getChild<LLUICtrl>("bumpyScaleV")->setValue(2.0f * getChild<LLUICtrl>("TexScaleV")->getValue().asReal() );
 
 				// EXP-1507 (change label based on the mapping mode)
 				getChild<LLUICtrl>("rpt")->setValue(getString("string repeats per meter"));
@@ -918,6 +1123,29 @@ void LLPanelFace::getState()
 			}
 		}
 
+		// Materials
+		{
+			mMaterialID = LLMaterialID::null;
+			//mMaterial = LLMaterialPtr();
+			struct f1 : public LLSelectedTEGetFunctor<LLMaterialID>
+			{
+				LLMaterialID get(LLViewerObject* object, S32 te_index)
+				{
+					LLMaterialID material_id;
+					
+					return object->getTE(te_index)->getMaterialID();
+				}
+			} func;
+			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, mMaterialID );
+			llinfos << "Material ID returned: '"
+				<< mMaterialID.asString() << "', isNull? "
+				<< (mMaterialID.isNull()?"TRUE":"FALSE") << llendl;
+			if (!mMaterialID.isNull() && editable)
+			{
+				LLMaterialMgr::getInstance()->get(objectp->getRegion()->getRegionID(),mMaterialID,boost::bind(&LLPanelFace::onMaterialLoaded, this, _1, _2));
+			}
+		}
+
 		// Set variable values for numeric expressions
 		LLCalc* calcp = LLCalc::getInstance();
 		calcp->setVar(LLCalc::TEX_U_SCALE, childGetValue("TexScaleU").asReal());
@@ -955,12 +1183,11 @@ void LLPanelFace::getState()
 		getChildView("label shininess")->setEnabled(FALSE);
 		getChildView("label bumpiness")->setEnabled(FALSE);
 
-		getChildView("textbox autofix")->setEnabled(FALSE);
-
 		getChildView("button align")->setEnabled(FALSE);
 		//getChildView("has media")->setEnabled(FALSE);
 		//getChildView("media info set")->setEnabled(FALSE);
-		
+
+		onCommitMaterialsMedia(NULL,this);
 
 		// Set variable values for numeric expressions
 		LLCalc* calcp = LLCalc::getInstance();
@@ -980,6 +1207,126 @@ void LLPanelFace::refresh()
 	getState();
 }
 
+void LLPanelFace::onMaterialLoaded(const LLMaterialID& material_id, const LLMaterialPtr material)
+{
+	llinfos << "Material loaded: " << material_id.asString()
+		<< ", LLSD: " << material->asLLSD() << llendl;
+	mMaterial = material;
+	getChild<LLUICtrl>("maskcutoff")->setValue(material->getAlphaMaskCutoff());
+	getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(material->getSpecularLightColor());
+	getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE);
+	getChild<LLUICtrl>("glossiness")->setValue((F32)(material->getSpecularLightExponent())/255.0);
+	getChild<LLUICtrl>("environment")->setValue((F32)(material->getEnvironmentIntensity())/255.0);
+	LLCtrlSelectionInterface* combobox_alphamode =
+	      childGetSelectionInterface("combobox alphamode");
+	if (combobox_alphamode)
+	{
+		combobox_alphamode->selectNthItem(material->getDiffuseAlphaMode());
+	}
+	else
+	{
+		llwarns << "failed childGetSelectionInterface for 'combobox alphamode'" << llendl;
+	}
+	onCommitAlphaMode(getChild<LLComboBox>("combobox alphamode"),this);
+	LLComboBox* comboMaterialType = getChild<LLComboBox>("combobox mattype");
+	F32 offset_x, offset_y, repeat_x, repeat_y, rot;
+	if ((comboMaterialType->getCurrentIndex() == MATTYPE_SPECULAR) &&
+		!material->getSpecularID().isNull())
+	{
+		material->getSpecularOffset(offset_x,offset_y);
+		material->getSpecularRepeat(repeat_x,repeat_y);
+		rot = material->getSpecularRotation();
+		LLTextureCtrl*	texture_ctrl = getChild<LLTextureCtrl>("shinytexture control");
+		texture_ctrl->setImageAssetID(material->getSpecularID());
+		LLCtrlSelectionInterface* combobox_shininess =
+		      childGetSelectionInterface("combobox shininess");
+		if (combobox_shininess)
+		{
+			combobox_shininess->selectNthItem(SHINY_TEXTURE);
+		}
+		else
+		{
+			llwarns << "failed childGetSelectionInterface for 'combobox shininess'" << llendl;
+		}
+		getChild<LLUICtrl>("shinyScaleU")->setValue(repeat_x);
+		getChild<LLUICtrl>("shinyScaleV")->setValue(repeat_y);
+		getChild<LLUICtrl>("shinyRot")->setValue(rot);
+		getChild<LLUICtrl>("shinyOffsetU")->setValue(offset_x);
+		getChild<LLUICtrl>("shinyOffsetV")->setValue(offset_y);
+	}
+	if ((comboMaterialType->getCurrentIndex() == MATTYPE_NORMAL) &&
+		!material->getNormalID().isNull())
+	{
+		material->getNormalOffset(offset_x,offset_y);
+		material->getNormalRepeat(repeat_x,repeat_y);
+		rot = material->getNormalRotation();
+		LLTextureCtrl*	texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
+		texture_ctrl->setImageAssetID(material->getNormalID());
+		LLCtrlSelectionInterface* combobox_bumpiness =
+		      childGetSelectionInterface("combobox bumpiness");
+		if (combobox_bumpiness)
+		{
+			combobox_bumpiness->selectNthItem(BUMPY_TEXTURE);
+		}
+		else
+		{
+			llwarns << "failed childGetSelectionInterface for 'combobox bumpiness'" << llendl;
+		}
+		getChild<LLUICtrl>("bumpyScaleU")->setValue(repeat_x);
+		getChild<LLUICtrl>("bumpyScaleV")->setValue(repeat_y);
+		getChild<LLUICtrl>("bumpyRot")->setValue(rot);
+		getChild<LLUICtrl>("bumpyOffsetU")->setValue(offset_x);
+		getChild<LLUICtrl>("bumpyOffsetV")->setValue(offset_y);
+	}
+}
+
+void LLPanelFace::updateMaterial()
+{
+	LLComboBox* comboAlphaMode = getChild<LLComboBox>("combobox alphamode");
+	LLComboBox* comboBumpiness = getChild<LLComboBox>("combobox bumpiness");
+	LLComboBox* comboShininess = getChild<LLComboBox>("combobox shininess");
+	if (!comboAlphaMode || !comboBumpiness || !comboShininess)
+	{
+		return;
+	}
+	if ((mIsAlpha && (comboAlphaMode->getCurrentIndex() != ALPHAMODE_BLEND))
+		|| (comboBumpiness->getCurrentIndex() != BUMPY_TEXTURE)
+		|| (comboShininess->getCurrentIndex() != SHINY_TEXTURE))
+	{
+		// The user's specified something that needs a material.
+		if (!mMaterial)
+		{
+			mMaterial = LLMaterialPtr(new LLMaterial());
+		}
+		mMaterial->setNormalID(getChild<LLTextureCtrl>("bumpytexture control")->getImageAssetID());
+		mMaterial->setNormalOffset(getChild<LLUICtrl>("bumpyOffsetU")->getValue().asReal(),
+						getChild<LLUICtrl>("bumpyOffsetV")->getValue().asReal());
+		mMaterial->setNormalRepeat(getChild<LLUICtrl>("bumpyScaleU")->getValue().asReal(),
+						getChild<LLUICtrl>("bumpyScaleV")->getValue().asReal());
+		mMaterial->setNormalRotation(getChild<LLUICtrl>("bumpyRot")->getValue().asReal());
+		mMaterial->setSpecularID(getChild<LLTextureCtrl>("shinytexture control")->getImageAssetID());
+		mMaterial->setSpecularOffset(getChild<LLUICtrl>("shinyOffsetU")->getValue().asReal(),
+						getChild<LLUICtrl>("shinyOffsetV")->getValue().asReal());
+		mMaterial->setSpecularRepeat(getChild<LLUICtrl>("shinyScaleU")->getValue().asReal(),
+						getChild<LLUICtrl>("shinyScaleV")->getValue().asReal());
+		mMaterial->setSpecularRotation(getChild<LLUICtrl>("shinyRot")->getValue().asReal());
+		mMaterial->setSpecularLightColor(getChild<LLColorSwatchCtrl>("shinycolorswatch")->get());
+		mMaterial->setSpecularLightExponent((U8)(255*getChild<LLUICtrl>("glossiness")->getValue().asReal()));
+		mMaterial->setEnvironmentIntensity((U8)(255*getChild<LLUICtrl>("environment")->getValue().asReal()));
+		mMaterial->setDiffuseAlphaMode(getChild<LLComboBox>("combobox alphamode")->getCurrentIndex());
+		mMaterial->setAlphaMaskCutoff((U8)(getChild<LLUICtrl>("maskcutoff")->getValue().asInteger()));
+	}
+	else
+	{
+		// The user has specified settings that don't need a material.
+		if (mMaterial)
+		{
+			mMaterial.reset();
+		}
+	}
+	LLSelectMgr::getInstance()->selectionSetMaterial( *mMaterial );
+}
+
 //
 // Static functions
 //
@@ -996,6 +1343,11 @@ void LLPanelFace::onCommitColor(const LLSD& data)
 	sendColor();
 }
 
+void LLPanelFace::onCommitShinyColor(const LLSD& data)
+{
+	updateMaterial();
+}
+
 void LLPanelFace::onCommitAlpha(const LLSD& data)
 {
 	sendAlpha();
@@ -1016,32 +1368,106 @@ void LLPanelFace::onSelectColor(const LLSD& data)
 void LLPanelFace::onCommitMaterialsMedia(LLUICtrl* ctrl, void* userdata)
 {
 	LLPanelFace* self = (LLPanelFace*) userdata;
-	LLComboBox* mComboMaterialsMedia = self->getChild<LLComboBox>("combobox matmedia");
-	if (!mComboMaterialsMedia)
+	// Get material info so we can use it later
+	if (self->mMaterial)
 	{
-		return;
+		self->onMaterialLoaded(self->mMaterialID,self->mMaterial);
 	}
-	U32 materials_media = mComboMaterialsMedia->getCurrentIndex();
-	LLComboBox* mComboMaterialType = self->getChild<LLComboBox>("combobox mattype");
-	if (!mComboMaterialType)
+	LLComboBox* comboMaterialsMedia = self->getChild<LLComboBox>("combobox matmedia");
+	LLComboBox* comboMaterialType = self->getChild<LLComboBox>("combobox mattype");
+	if (!comboMaterialType || !comboMaterialsMedia)
 	{
 		return;
 	}
-	U32 material_type = mComboMaterialType->getCurrentIndex();
-	bool show_media = (materials_media == 1);
-	bool show_texture = (!show_media) && (material_type == 0);
-	bool show_bumpiness = (!show_media) && (material_type == 1);
-	bool show_shininess = (!show_media) && (material_type == 2);
+	U32 materials_media = comboMaterialsMedia->getCurrentIndex();
+	U32 material_type = comboMaterialType->getCurrentIndex();
+	bool show_media = (materials_media == MATMEDIA_MEDIA) && comboMaterialsMedia->getEnabled();
+	bool show_texture = (!show_media) && (material_type == MATTYPE_DIFFUSE) && comboMaterialsMedia->getEnabled();
+	bool show_bumpiness = (!show_media) && (material_type == MATTYPE_NORMAL) && comboMaterialsMedia->getEnabled();
+	bool show_shininess = (!show_media) && (material_type == MATTYPE_SPECULAR) && comboMaterialsMedia->getEnabled();
 	self->getChildView("combobox mattype")->setVisible(!show_media);
+	self->getChildView("rptctrl")->setVisible(!show_media);
+
+	// Media controls
 	self->getChildView("media_info")->setVisible(show_media);
 	self->getChildView("add_media")->setVisible(show_media);
 	self->getChildView("delete_media")->setVisible(show_media);
 	self->getChildView("button align")->setVisible(show_media);
+
+	// Diffuse texture controls
 	self->getChildView("texture control")->setVisible(show_texture);
+	self->getChildView("label alphamode")->setVisible(show_texture);
+	self->getChildView("combobox alphamode")->setVisible(show_texture);
+	self->getChildView("label maskcutoff")->setVisible(false);
+	self->getChildView("maskcutoff")->setVisible(false);
+	if (show_texture)
+	{
+		onCommitAlphaMode(ctrl, userdata);
+	}
+	self->getChildView("TexScaleU")->setVisible(show_texture);
+	self->getChildView("TexScaleV")->setVisible(show_texture);
+	self->getChildView("TexRot")->setVisible(show_texture);
+	self->getChildView("TexOffsetU")->setVisible(show_texture);
+	self->getChildView("TexOffsetV")->setVisible(show_texture);
+
+	// Specular map controls
+	self->getChildView("shinytexture control")->setVisible(show_shininess);
 	self->getChildView("combobox shininess")->setVisible(show_shininess);
 	self->getChildView("label shininess")->setVisible(show_shininess);
+	self->getChildView("label glossiness")->setVisible(false);
+	self->getChildView("glossiness")->setVisible(false);
+	self->getChildView("label environment")->setVisible(false);
+	self->getChildView("environment")->setVisible(false);
+	self->getChildView("label shinycolor")->setVisible(false);
+	self->getChildView("shinycolorswatch")->setVisible(false);
+	if (show_shininess)
+	{
+		onCommitShiny(ctrl, userdata);
+	}
+	self->getChildView("shinyScaleU")->setVisible(show_shininess);
+	self->getChildView("shinyScaleV")->setVisible(show_shininess);
+	self->getChildView("shinyRot")->setVisible(show_shininess);
+	self->getChildView("shinyOffsetU")->setVisible(show_shininess);
+	self->getChildView("shinyOffsetV")->setVisible(show_shininess);
+
+	// Normal map controls
+	self->getChildView("bumpytexture control")->setVisible(show_bumpiness);
 	self->getChildView("combobox bumpiness")->setVisible(show_bumpiness);
 	self->getChildView("label bumpiness")->setVisible(show_bumpiness);
+	self->getChildView("bumpyScaleU")->setVisible(show_bumpiness);
+	self->getChildView("bumpyScaleV")->setVisible(show_bumpiness);
+	self->getChildView("bumpyRot")->setVisible(show_bumpiness);
+	self->getChildView("bumpyOffsetU")->setVisible(show_bumpiness);
+	self->getChildView("bumpyOffsetV")->setVisible(show_bumpiness);
+
+	// Enable texture scale/rotation/offset parameters if there's one
+	// present to set for
+	bool texParmsEnable = show_texture;
+	if (self->mMaterial)
+	{
+		texParmsEnable = texParmsEnable ||
+				(!self->mMaterial->getNormalID().isNull() && show_bumpiness) ||
+				(!self->mMaterial->getSpecularID().isNull() && show_shininess);
+	}
+	self->getChildView("tex gen")->setEnabled(texParmsEnable);
+	self->getChildView("combobox texgen")->setEnabled(texParmsEnable);
+	self->getChildView("rptctrl")->setEnabled(texParmsEnable);
+	self->getChildView("TexScaleU")->setEnabled(texParmsEnable);
+	self->getChildView("TexScaleV")->setEnabled(texParmsEnable);
+	self->getChildView("TexRot")->setEnabled(texParmsEnable);
+	self->getChildView("TexOffsetU")->setEnabled(texParmsEnable);
+	self->getChildView("TexOffsetV")->setEnabled(texParmsEnable);
+	self->getChildView("shinyScaleU")->setEnabled(texParmsEnable);
+	self->getChildView("shinyScaleV")->setEnabled(texParmsEnable);
+	self->getChildView("shinyRot")->setEnabled(texParmsEnable);
+	self->getChildView("shinyOffsetU")->setEnabled(texParmsEnable);
+	self->getChildView("shinyOffsetV")->setEnabled(texParmsEnable);
+	self->getChildView("bumpyScaleU")->setEnabled(texParmsEnable);
+	self->getChildView("bumpyScaleV")->setEnabled(texParmsEnable);
+	self->getChildView("bumpyRot")->setEnabled(texParmsEnable);
+	self->getChildView("bumpyOffsetU")->setEnabled(texParmsEnable);
+	self->getChildView("bumpyOffsetV")->setEnabled(texParmsEnable);
+	self->getChildView("checkbox planar align")->setEnabled(texParmsEnable);
 }
 
 // static
@@ -1068,9 +1494,38 @@ void LLPanelFace::onCommitTexGen(LLUICtrl* ctrl, void* userdata)
 void LLPanelFace::onCommitShiny(LLUICtrl* ctrl, void* userdata)
 {
 	LLPanelFace* self = (LLPanelFace*) userdata;
+	LLComboBox* comboShiny = self->getChild<LLComboBox>("combobox shininess");
+	if (!comboShiny)
+	{
+		return;
+	}
+	U32 shiny_value = comboShiny->getCurrentIndex();
+	bool show_shinyctrls = (shiny_value == SHINY_TEXTURE); // Use texture
+	self->getChildView("label glossiness")->setVisible(show_shinyctrls);
+	self->getChildView("glossiness")->setVisible(show_shinyctrls);
+	self->getChildView("label environment")->setVisible(show_shinyctrls);
+	self->getChildView("environment")->setVisible(show_shinyctrls);
+	self->getChildView("label shinycolor")->setVisible(show_shinyctrls);
+	self->getChildView("shinycolorswatch")->setVisible(show_shinyctrls);
 	self->sendShiny();
 }
 
+// static
+void LLPanelFace::onCommitAlphaMode(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	LLComboBox* comboAlphaMode = self->getChild<LLComboBox>("combobox alphamode");
+	if (!comboAlphaMode)
+	{
+		return;
+	}
+	U32 alpha_value = comboAlphaMode->getCurrentIndex();
+	bool show_alphactrls = (alpha_value == ALPHAMODE_MASK); // Alpha masking
+	self->getChildView("label maskcutoff")->setVisible(show_alphactrls);
+	self->getChildView("maskcutoff")->setVisible(show_alphactrls);
+	self->updateMaterial();
+}
+
 // static
 void LLPanelFace::onCommitFullbright(LLUICtrl* ctrl, void* userdata)
 {
@@ -1120,6 +1575,28 @@ void LLPanelFace::onSelectTexture(const LLSD& data)
 	sendTexture();
 }
 
+void LLPanelFace::onCommitMaterialTexture( const LLSD& data )
+{
+	updateMaterial();
+}
+
+void LLPanelFace::onCancelMaterialTexture(const LLSD& data)
+{
+	// not sure what to do here other than
+	updateMaterial();
+}
+
+void LLPanelFace::onSelectMaterialTexture(const LLSD& data)
+{
+	updateMaterial();
+}
+
+//static
+void LLPanelFace::onCommitMaterial(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	self->updateMaterial();
+}
 
 // static
 void LLPanelFace::onCommitTextureInfo( LLUICtrl* ctrl, void* userdata )
@@ -1212,7 +1689,25 @@ void LLPanelFace::onCommitPlanarAlign(LLUICtrl* ctrl, void* userdata)
 
 void LLPanelFace::onTextureSelectionChanged(LLInventoryItem* itemp)
 {
-	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("texture control");
+	LLComboBox* combo_mattype = getChild<LLComboBox>("combobox mattype");
+	if (!combo_mattype)
+	{
+		return;
+	}
+	U32 mattype = combo_mattype->getCurrentIndex();
+	std::string which_control="texture control";
+	switch (mattype)
+	{
+		case MATTYPE_SPECULAR:
+			which_control = "shinytexture_control";
+			break;
+		case MATTYPE_NORMAL:
+			which_control = "bumpytexture_control";
+			break;
+		// no default needed
+	}
+		
+	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>(which_control);
 	if (texture_ctrl)
 	{
 		LLUUID obj_owner_id;
diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h
index acac2c1bf522317288c7684f6b82f5ea9b631011..c6322d59b27da1ae8ba0957f7689d22b76b634c3 100644
--- a/indra/newview/llpanelface.h
+++ b/indra/newview/llpanelface.h
@@ -29,6 +29,7 @@
 
 #include "v4color.h"
 #include "llpanel.h"
+#include "llmaterial.h"
 
 class LLButton;
 class LLCheckBoxCtrl;
@@ -42,6 +43,7 @@ class LLTextureCtrl;
 class LLUICtrl;
 class LLViewerObject;
 class LLFloater;
+class LLMaterialID;
 
 class LLPanelFace : public LLPanel
 {
@@ -74,17 +76,25 @@ class LLPanelFace : public LLPanel
 	void 	onCommitTexture(const LLSD& data);
 	void 	onCancelTexture(const LLSD& data);
 	void 	onSelectTexture(const LLSD& data);
+	void 	onCommitMaterialTexture(const LLSD& data);
+	void 	onCancelMaterialTexture(const LLSD& data);
+	void 	onSelectMaterialTexture(const LLSD& data);
 	void 	onCommitColor(const LLSD& data);
+	void 	onCommitShinyColor(const LLSD& data);
 	void 	onCommitAlpha(const LLSD& data);
 	void 	onCancelColor(const LLSD& data);
 	void 	onSelectColor(const LLSD& data);
+	void    onMaterialLoaded(const LLMaterialID& material_id, const LLMaterialPtr material);
+	void    updateMaterial();
 	
 	static 	void onCommitTextureInfo( 		LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterial(		LLUICtrl* ctrl, void* userdata);
 	static void		onCommitMaterialsMedia(		LLUICtrl* ctrl, void* userdata);
 	static void		onCommitMaterialType(		LLUICtrl* ctrl, void* userdata);
 	static void		onCommitBump(			LLUICtrl* ctrl, void* userdata);
 	static void		onCommitTexGen(			LLUICtrl* ctrl, void* userdata);
 	static void		onCommitShiny(			LLUICtrl* ctrl, void* userdata);
+	static void		onCommitAlphaMode(		LLUICtrl* ctrl, void* userdata);
 	static void		onCommitFullbright(		LLUICtrl* ctrl, void* userdata);
 	static void     onCommitGlow(           LLUICtrl* ctrl, void *userdata);
 	static void		onCommitPlanarAlign(	LLUICtrl* ctrl, void* userdata);
@@ -102,6 +112,9 @@ class LLPanelFace : public LLPanel
 	 */
 	void onTextureSelectionChanged(LLInventoryItem* itemp);
 
+	LLMaterialID mMaterialID;
+	LLMaterialPtr mMaterial;
+	BOOL mIsAlpha;
 };
 
 #endif
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index ff4c120623585138363d48e5d2237ef43de80fef..b5dc1dae9082ec091f73e1e3177e7e7c1be0ff53 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -63,6 +63,7 @@
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
 #include "llinventorymodel.h"
+#include "llmaterialmgr.h"
 #include "llmenugl.h"
 #include "llmeshrepository.h"
 #include "llmutelist.h"
@@ -2009,6 +2010,37 @@ void LLSelectMgr::selectionSetGlow(F32 glow)
 	mSelectedObjects->applyToObjects( &func2 );
 }
 
+void LLSelectMgr::selectionSetMaterial(LLMaterial& material)
+{
+	struct f1 : public LLSelectedTEFunctor
+	{
+		LLMaterial mMaterial;
+		f1(LLMaterial material) : mMaterial(material) {};
+		bool apply(LLViewerObject* object, S32 face)
+		{
+			if (object->permModify())
+			{
+				LLMaterialMgr::getInstance()->put(object->getID(),face,mMaterial);
+			}
+			return true;
+		}
+	} func1(material);
+	mSelectedObjects->applyToTEs( &func1 );
+
+	struct f2 : public LLSelectedObjectFunctor
+	{
+		virtual bool apply(LLViewerObject* object)
+		{
+			if (object->permModify())
+			{
+				object->sendTEUpdate();
+			}
+			return true;
+		}
+	} func2;
+	mSelectedObjects->applyToObjects( &func2 );
+}
+
 
 //-----------------------------------------------------------------------------
 // findObjectPermissions()
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index ecbb20df1bb1292f7e580765588cc28ba5e796f8..f1da18dcc360ce1b7686868cfabc5ea6c8b91e93 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -43,6 +43,7 @@
 #include "llpermissions.h"
 #include "llcontrol.h"
 #include "llviewerobject.h"	// LLObjectSelection::getSelectedTEValue template
+#include "llmaterial.h"
 
 #include <deque>
 #include <boost/iterator/filter_iterator.hpp>
@@ -537,6 +538,7 @@ class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
 	void selectionSetClickAction(U8 action);
 	void selectionSetIncludeInSearch(bool include_in_search);
 	void selectionSetGlow(const F32 glow);
+	void selectionSetMaterial(LLMaterial& material);
 
 	void selectionSetObjectPermissions(U8 perm_field, BOOL set, U32 perm_mask, BOOL override = FALSE);
 	void selectionSetObjectName(const std::string& name);
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index e3fc957fd264b65651c0ce0fbf9ba65b01b45d1a..deaacc49759552f30d9f5e6777b0f833148e1010 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -24,7 +24,7 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_LLTEXTURECACHE_
+#ifndef LL_LLTEXTURECACHE_H
 #define LL_LLTEXTURECACHE_H
 
 #include "lldir.h"
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index b630b5bbe6e4e887cbc3a238219405b21e69bbdb..05fc3fe7d1cab2db52a5e33420d7b85fa9d1e451 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -50,7 +50,6 @@
 #include "llfloaterbump.h"
 #include "llfloaterbvhpreview.h"
 #include "llfloatercamera.h"
-#include "llfloaterdebugmaterials.h"
 #include "llfloaterdeleteenvpreset.h"
 #include "llfloaterdisplayname.h"
 #include "llfloatereditdaycycle.h"
@@ -256,7 +255,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("pathfinding_characters", "floater_pathfinding_characters.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPathfindingCharacters>);
 	LLFloaterReg::add("pathfinding_linksets", "floater_pathfinding_linksets.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPathfindingLinksets>);
 	LLFloaterReg::add("pathfinding_console", "floater_pathfinding_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPathfindingConsole>);
-	LLFloaterReg::add("floater_debug_materials", "floater_debug_materials.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDebugMaterials>);
+
 	LLFloaterReg::add("people", "floater_people.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
 	LLFloaterReg::add("places", "floater_places.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
 	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index c9d6a34b8a03a6e1b8b1deb12bd05a3e5acc2b75..6c073a8e20cac194056afe9aefe1f4d31f6c11b4 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -4172,7 +4172,6 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
 				specColor.mV[2] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightColor().mV[2] * (1.0 / 255);
 				specColor.mV[3] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightExponent() * (1.0 / 255);
 				draw_info->mSpecColor = specColor;
-				LL_INFOS("Materials") << "Specular Color: " << specColor << LL_ENDL;
 				draw_info->mEnvIntensity = facep->getTextureEntry()->getMaterialParams()->getEnvironmentIntensity() * (1.0 / 255);
 				draw_info->mAlphaMaskCutoff = facep->getTextureEntry()->getMaterialParams()->getAlphaMaskCutoff() * (1.0 / 255);
 				draw_info->mDiffuseAlphaMode = facep->getTextureEntry()->getMaterialParams()->getDiffuseAlphaMode();
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index d695cd1f896c446899361f744610017d054bba3f..f2ed7c2e64cf19dac5530625dece1f272c4b2c6f 100644
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -245,7 +245,7 @@
 		<menu label="Gengivelse" name="Rendering">
 			<menu_item_check label="Akser" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Lys og skygger" name="Lighting and Shadows"/>
+			<menu_item_check label="Lys og skygger" name="Advanced Lighting Model"/>
 			<menu_item_check label="Skygger fra sol/måne/andre lyskilder" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO og skygge udjævning" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Globalt lys (eksperimentiel)" name="Global Illumination"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 845df1f0503fdbb9c11a0e8b6702d337dd68888c..8277174cdadb5dceb8b252053b073977e3286951 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -307,7 +307,7 @@
 			<menu_item_call label="Texturinfo für ausgewähltes Objekt" name="Selected Texture Info Basis"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
 			<menu_item_check label="Objekt-Objekt Okklusion" name="Object-Object Occlusion"/>
-			<menu_item_check label="Licht und Schatten" name="Lighting and Shadows"/>
+			<menu_item_check label="Licht und Schatten" name="Advanced Lighting Model"/>
 			<menu_item_check label="Schatten von Sonne-/Mond-Projektoren" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO und Schattenglättung" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Fehler in GL beseitigen" name="Debug GL"/>
diff --git a/indra/newview/skins/default/xui/en/floater_debug_materials.xml b/indra/newview/skins/default/xui/en/floater_debug_materials.xml
deleted file mode 100644
index 3a450fdeffe687868fc05e6c3da9447ce82cd7fd..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_debug_materials.xml
+++ /dev/null
@@ -1,995 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
-    positioning="cascading"
-    can_tear_off="false"
-    can_resize="true"
-    height="770"
-    width="1040"
-    min_height="795"
-    min_width="1040"
-    layout="topleft"
-    name="floater_debug_materials"
-    reuse_instance="true"
-    save_rect="false"
-    single_instance="true"
-    title="Debug materials">
-  <floater.string name="status_no_region">No current region available.</floater.string>
-  <floater.string name="status_capabilities_loading">Region capabilities are loading.</floater.string>
-  <floater.string name="status_ready">Materials are enabled for this region.</floater.string>
-  <floater.string name="status_request_started">Request sent.</floater.string>
-  <floater.string name="status_request_completed">Request received.</floater.string>
-  <floater.string name="status_not_enabled">Materials are not enabled for this region.</floater.string>
-  <floater.string name="status_error">An error occurred during the request.</floater.string>
-  <floater.string name="loading_status_in_progress">Processing [NUM_PROCESSED] out of [NUM_TOTAL]</floater.string>
-  <floater.string name="loading_status_done">Complete</floater.string>
-  <floater.string name="querying_status_in_progress">Processing [NUM_PROCESSED] out of [NUM_TOTAL]</floater.string>
-  <floater.string name="querying_status_done">Complete</floater.string>
-  <panel
-      border="false"
-      bevel_style="none"
-      follows="left|top"
-      layout="topleft"
-      left="12"
-      top_pad="10"
-      height="61"
-      width="214">
-    <text
-        height="13"
-        word_wrap="true"
-        use_ellipses="false"
-        type="string"
-        text_color="LabelTextColor"
-        length="1"
-        layout="topleft"
-        left="0"
-        top_pad="0"
-        width="214">
-      Status
-    </text>
-    <text
-        height="40"
-        word_wrap="true"
-        use_ellipses="false"
-        type="string"
-        text_color="MaterialGoodColor"
-        length="1"
-        follows="left|top"
-        layout="topleft"
-        left="0"
-        name="material_status"
-        top_pad="8"
-        width="214">
-    </text>
-  </panel>
-  <tab_container
-      follows="left|top|right"
-      layout="topleft"
-      tab_position="top"
-      left="10"
-      top_pad="10"
-      height="670"
-      width="1020">
-    <panel
-        border="true"
-        bevel_style="none"
-        follows="left|top|right"
-        layout="topleft"
-        label="Current region"
-        height="641"
-        top_pad="10"
-        width="1020">
-      <panel
-          border="false"
-          bevel_style="none"
-          follows="left|top|right"
-          layout="topleft"
-          height="479"
-          top_pad="10"
-          width="1020">
-        <button
-            follows="left|top"
-            height="22"
-            label="Get"
-            layout="topleft"
-            name="get_button"
-            top_pad="0"
-            width="214"/>
-        <text
-            height="13"
-            word_wrap="true"
-            use_ellipses="false"
-            type="string"
-            text_color="LabelTextColor"
-            length="1"
-            follows="left|top"
-            layout="topleft"
-            left="2"
-            top_pad="8"
-            width="150">
-          Loading Status
-        </text>
-        <text
-            height="13"
-            word_wrap="true"
-            use_ellipses="false"
-            type="string"
-            text_color="MaterialGoodColor"
-            length="1"
-            follows="left|top"
-            layout="topleft"
-            left_pad="0"
-            name="loading_status"
-            top_pad="-13"
-            width="400">
-        </text>
-        <scroll_list
-            column_padding="0"
-            draw_heading="true"
-            follows="left|top|right"
-            height="135"
-            layout="topleft"
-            left="0"
-            top_pad="10"
-            tab_stop="false"
-            multi_select="false"
-            name="get_other_data_scroll_list"
-            width="775">
-          <scroll_list.columns
-              label="Material ID"
-              name="id"
-              dynamic_width="true" />
-          <scroll_list.columns
-              label="Specular Color"
-              name="specular_color"
-              width="120" />
-          <scroll_list.columns
-              label="Specular Exponent"
-              name="specular_exponent"
-              width="112" />
-          <scroll_list.columns
-              label="Env Intensity"
-              name="env_intensity"
-              width="80" />
-          <scroll_list.columns
-              label="Alpha Mask Cutoff"
-              name="alpha_mask_cutoff"
-              width="110" />
-          <scroll_list.columns
-              label="Diffuse Alpha Mode"
-              name="diffuse_alpha_mode"
-              width="118" />
-        </scroll_list>
-        <scroll_list
-            column_padding="0"
-            draw_heading="true"
-            follows="left|top|right"
-            height="135"
-            layout="topleft"
-            top_pad="10"
-            tab_stop="false"
-            multi_select="false"
-            name="get_specular_map_scroll_list"
-            width="1020">
-          <scroll_list.columns
-              label="Material ID"
-              name="id"
-              dynamic_width="true" />
-          <scroll_list.columns
-              label="Specular Map"
-              name="specular_map_list_map"
-              width="225" />
-          <scroll_list.columns
-              label="Offset X"
-              name="specular_map_list_offset_x"
-              width="112" />
-          <scroll_list.columns
-              label="Offset Y"
-              name="specular_map_list_offset_y"
-              width="112" />
-          <scroll_list.columns
-              label="Repeat X"
-              name="specular_map_list_repeat_x"
-              width="112" />
-          <scroll_list.columns
-              label="Repeat Y"
-              name="specular_map_list_repeat_y"
-              width="112" />
-          <scroll_list.columns
-              label="Rotation"
-              name="specular_map_list_rotation"
-              width="112" />
-        </scroll_list>
-        <scroll_list
-            column_padding="0"
-            draw_heading="true"
-            follows="left|top|right"
-            height="135"
-            layout="topleft"
-            top_pad="10"
-            tab_stop="false"
-            multi_select="false"
-            name="get_normal_map_scroll_list"
-            width="1020">
-          <scroll_list.columns
-              label="Material ID"
-              name="id"
-              dynamic_width="true" />
-          <scroll_list.columns
-              label="Normal Map"
-              name="normal_map_list_map"
-              width="225" />
-          <scroll_list.columns
-              label="Offset X"
-              name="normal_map_list_offset_x"
-              width="112" />
-          <scroll_list.columns
-              label="Offset Y"
-              name="normal_map_list_offset_y"
-              width="112" />
-          <scroll_list.columns
-              label="Repeat X"
-              name="normal_map_list_repeat_x"
-              width="112" />
-          <scroll_list.columns
-              label="Repeat Y"
-              name="normal_map_list_repeat_y"
-              width="112" />
-          <scroll_list.columns
-              label="Rotation"
-              name="normal_map_list_rotation"
-              width="112" />
-        </scroll_list>
-      </panel>
-    </panel>
-    <panel
-        border="true"
-        bevel_style="none"
-        follows="left|top|right"
-        layout="topleft"
-        label="Object editing"
-        height="641"
-        top_pad="10"
-        width="1010">
-      <panel
-          border="false"
-          bevel_style="none"
-          follows="left|top|right"
-          layout="topleft"
-          left="2"
-          top_pad="10"
-          height="420"
-          width="810">
-        <panel
-            border="false"
-            bevel_style="none"
-            follows="left|top|right"
-            layout="topleft"
-            height="265"
-            top_pad="0"
-            width="810">
-          <panel
-              border="false"
-              bevel_style="none"
-              follows="left|top|right"
-              layout="topleft"
-              height="226"
-              top_pad="0"
-              width="263">
-            <text
-                height="13"
-                word_wrap="false"
-                use_ellipses="false"
-                type="string"
-                text_color="LabelTextColor"
-                length="1"
-                follows="left|top"
-                layout="topleft"
-                left="0"
-                top_pad="38"
-                width="160">
-              Normal Map
-            </text>
-            <texture_picker
-                allow_no_texture="true"
-                can_apply_immediately="true"
-                default_image_name="Default"
-                follows="left|top"
-                left_pad="0"
-                top_pad="-50"
-                label_width="0"
-                height="100"
-                width="100"
-                mouse_opaque="true"
-                name="normal_map"
-                tool_tip="Click to open texture picker" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="0.1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-260"
-                label="Normal Map Offset X"
-                max_val="1.0"
-                min_val="-1.0"
-                name="normal_map_offset_x"
-                width="240" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="0.1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-240"
-                label="Normal Map Offset Y"
-                max_val="1.0"
-                min_val="-1.0"
-                name="normal_map_offset_y"
-                top_pad="10"
-                width="240" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="0.1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-240"
-                label="Normal Map Repeat X"
-                max_val="64"
-                min_val="0.0"
-                name="normal_map_repeat_x"
-                top_pad="10"
-                width="240" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="0.1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-240"
-                max_val="64"
-                min_val="0.0"
-                label="Normal Map Repeat Y"
-                name="normal_map_repeat_y"
-                top_pad="10"
-                width="240" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-240"
-                label="Normal Map Rotation"
-                max_val="9999"
-                min_val="-9999"
-                name="normal_map_rotation"
-                top_pad="10"
-                width="240" />
-          </panel>
-          <panel
-              border="false"
-              bevel_style="none"
-              follows="left|top|right"
-              layout="topleft"
-              height="226"
-              top_pad="-226"
-              left_pad="20"
-              width="263">
-            <text
-                height="13"
-                word_wrap="false"
-                use_ellipses="false"
-                type="string"
-                text_color="LabelTextColor"
-                length="1"
-                follows="left|top"
-                layout="topleft"
-                left="0"
-                top_pad="38"
-                width="160">
-              Specular Map
-            </text>
-            <texture_picker
-                allow_no_texture="true"
-                can_apply_immediately="true"
-                default_image_name="Default"
-                follows="left|top"
-                left_pad="0"
-                top_pad="-50"
-                label_width="0"
-                height="100"
-                width="100"
-                mouse_opaque="true"
-                name="specular_map"
-                tool_tip="Click to open texture picker" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="0.1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-260"
-                label="Specular Map Offset X"
-                max_val="1.0"
-                min_val="-1.0"
-                name="specular_map_offset_x"
-                width="240" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="0.1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-240"
-                label="Specular Map Offset Y"
-                max_val="1.0"
-                min_val="-1.0"
-                name="specular_map_offset_y"
-                top_pad="10"
-                width="240" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="0.1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-240"
-                label="Specular Map Repeat X"
-                max_val="64"
-                min_val="0.0"
-                name="specular_map_repeat_x"
-                top_pad="10"
-                width="240" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="0.1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-240"
-                label="Specular Map Repeat Y"
-                max_val="64"
-                min_val="0.0"
-                name="specular_map_repeat_y"
-                top_pad="10"
-                width="240" />
-            <spinner
-                allow_text_entry="true"
-                follows="left|top"
-                height="20"
-                initial_value="0"
-                increment="1"
-                decimal_digits="4"
-                label_width="160"
-                layout="topleft"
-                left_pad="-240"
-                label="Specular Map Rotation"
-                max_val="9999"
-                min_val="-9999"
-                name="specular_map_rotation"
-                top_pad="10"
-                width="240" />
-          </panel>
-          <panel
-              border="false"
-              bevel_style="none"
-              follows="left|top|right"
-              layout="topleft"
-              height="162"
-              top_pad="-226"
-              left_pad="20"
-              width="243">
-            <text
-                height="13"
-                word_wrap="false"
-                use_ellipses="false"
-                type="string"
-                text_color="LabelTextColor"
-                length="1"
-                follows="left|top"
-                layout="topleft"
-                left="0"
-                top_pad="10"
-                width="160">
-              Specular Color
-            </text>
-            <color_swatch
-                can_apply_immediately="true"
-                color="1 1 1 1"
-                follows="left|top"
-                height="30"
-                layout="topleft"
-                label_height="0"
-                label_width="0"
-                left_pad="0"
-                top_pad="-22"
-                name="specular_color"
-                tool_tip="Click to open color picker"
-                width="40" />
-            <spinner
-                follows="left|top"
-                height="20"
-                initial_value="255"
-                max_val="255"
-                min_val="0"
-                increment="1"
-                decimal_digits="0"
-                allow_text_entry="true"
-                layout="topleft"
-                label_width="160"
-                left="0"
-                top_pad="10"
-                label="Specular Color Alpha"
-                name="specular_color_alpha"
-                width="240" />
-            <text
-                height="13"
-                word_wrap="false"
-                use_ellipses="false"
-                type="string"
-                text_color="LabelTextColor"
-                length="1"
-                follows="left|top"
-                layout="topleft"
-                left_pad="-240"
-                top_pad="13"
-                width="160">
-              Specular Exponent
-            </text>
-            <line_editor
-                border_style="line"
-                border_thickness="1"
-                default_text="0"
-                follows="left|top"
-                height="20"
-                layout="topleft"
-                left_pad="0"
-                top_pad="-18"
-                max_length_chars="255"
-                name="specular_exponent"
-                width="80" />
-            <text
-                height="13"
-                word_wrap="false"
-                use_ellipses="false"
-                type="string"
-                text_color="LabelTextColor"
-                length="1"
-                follows="left|top"
-                layout="topleft"
-                left_pad="-240"
-                top_pad="10"
-                width="160">
-              Environment Exponent
-            </text>
-            <line_editor
-                border_style="line"
-                border_thickness="1"
-                default_text="0"
-                follows="left|top"
-                height="20"
-                layout="topleft"
-                left_pad="0"
-                top_pad="-18"
-                max_length_chars="255"
-                name="environment_exponent"
-                width="80" />
-            <text
-                height="13"
-                word_wrap="false"
-                use_ellipses="false"
-                type="string"
-                text_color="LabelTextColor"
-                length="1"
-                follows="left|top"
-                layout="topleft"
-                left_pad="-240"
-                top_pad="10"
-                width="160">
-              Alpha Mask Cuttoff
-            </text>
-            <line_editor
-                border_style="line"
-                border_thickness="1"
-                default_text="0"
-                follows="left|top"
-                height="20"
-                layout="topleft"
-                left_pad="0"
-                top_pad="-18"
-                max_length_chars="255"
-                name="alpha_mask_cutoff"
-                width="80" />
-            <text
-                height="13"
-                word_wrap="false"
-                use_ellipses="false"
-                type="string"
-                text_color="LabelTextColor"
-                length="1"
-                follows="left|top"
-                layout="topleft"
-                left_pad="-240"
-                top_pad="10"
-                width="160">
-              Diffuse Alpha Mode
-            </text>
-            <line_editor
-                border_style="line"
-                border_thickness="1"
-                default_text="0"
-                follows="left|top"
-                height="20"
-                layout="topleft"
-                left_pad="0"
-                top_pad="-18"
-                max_length_chars="255"
-                name="diffuse_alpha_mode"
-                width="80" />
-          </panel>
-          <panel
-              border="false"
-              bevel_style="none"
-              follows="left|top|right"
-              layout="topleft"
-              height="22"
-              left="0"
-              top_pad="80"
-              width="810">
-            <button
-                follows="left|top"
-                height="22"
-                label="Set Face Data"
-                layout="topleft"
-                name="put_set_button"
-                left="0"
-                top="0"
-                width="214"/>
-            <button
-                follows="left|top"
-                height="22"
-                label="Clear Face Data"
-                layout="topleft"
-                name="put_clear_button"
-                left_pad="20"
-                width="214"/>
-            <button
-                follows="left|top"
-                height="22"
-                label="Reset Input Values"
-                layout="topleft"
-                name="reset_put_values_button"
-                left_pad="146"
-                width="214"/>
-          </panel>
-        </panel>
-        <view_border
-            bevel_style="none"
-            follows="left|top"
-            height="0"
-            layout="topleft"
-            name="horiz_separator"
-            top_pad="10"
-            left="0"
-            width="810"/>
-        <panel
-            border="false"
-            bevel_style="none"
-            follows="left|top|right"
-            layout="topleft"
-            height="125"
-            top_pad="20"
-            width="400">
-          <text
-              height="13"
-              word_wrap="false"
-              use_ellipses="false"
-              type="string"
-              text_color="LabelTextColor"
-              length="1"
-              follows="left|top"
-              layout="topleft"
-              left="0"
-              top_pad="0"
-              width="160">
-            Active selection
-          </text>
-          <scroll_list
-              column_padding="0"
-              draw_heading="true"
-              follows="left|top|right"
-              height="300"
-              layout="topleft"
-              left="0"
-              top_pad="10"
-              tab_stop="false"
-              multi_select="true"
-              name="put_scroll_list"
-              width="600">
-            <scroll_list.columns
-                label="Object ID"
-                name="object_id"
-                width="225" />
-            <scroll_list.columns
-                label="Face Index"
-                name="face_index"
-                width="70" />
-            <scroll_list.columns
-                label="MaterialID"
-                name="material_id"
-                dynamic_width="true" />
-          </scroll_list>
-        </panel>
-      </panel>
-    </panel>
-    <panel
-        border="true"
-        bevel_style="none"
-        follows="left|top|right"
-        layout="topleft"
-        label="Viewable objects"
-        height="641"
-        top_pad="10"
-        width="1020">
-      <panel
-          border="false"
-          bevel_style="none"
-          follows="left|top|right"
-          layout="topleft"
-          height="641"
-          top_pad="0"
-          width="1020">
-        <panel
-            border="false"
-            bevel_style="none"
-            follows="left|top|right"
-            layout="topleft"
-            left="0"
-            top_pad="10"
-            height="153"
-            width="835">
-          <button
-              follows="left|top"
-              height="22"
-              label="Query Viewable Objects"
-              layout="topleft"
-              name="query_viewable_objects_button"
-              top_pad="0"
-              width="214"/>
-          <text
-              height="13"
-              word_wrap="true"
-              use_ellipses="false"
-              type="string"
-              text_color="LabelTextColor"
-              length="1"
-              follows="left|top"
-              layout="topleft"
-              left="2"
-              top_pad="8"
-              width="150">
-            Loading Status
-          </text>
-          <text
-              height="13"
-              word_wrap="true"
-              use_ellipses="false"
-              type="string"
-              text_color="MaterialGoodColor"
-              length="1"
-              follows="left|top"
-              layout="topleft"
-              left_pad="0"
-              name="query_status"
-              top_pad="-13"
-              width="400">
-          </text>
-          <scroll_list
-              column_padding="0"
-              draw_heading="true"
-              follows="left|top|right"
-              height="100"
-              layout="topleft"
-              top_pad="10"
-              left="0"
-              tab_stop="false"
-              multi_select="true"
-              name="viewable_objects_scroll_list"
-              width="835">
-            <scroll_list.columns
-                label="Object ID"
-                name="object_id"
-                width="225" />
-            <scroll_list.columns
-                label="Region"
-                name="region"
-                width="225" />
-            <scroll_list.columns
-                label="Local ID"
-                name="local_id"
-                width="70" />
-            <scroll_list.columns
-                label="Face"
-                name="face_index"
-                width="70" />
-            <scroll_list.columns
-                label="Material ID"
-                name="material_id"
-                dynamic_width="true" />
-          </scroll_list>
-        </panel>
-        <view_border
-            bevel_style="none"
-            follows="left|right|top"
-            height="0"
-            layout="topleft"
-            name="horiz_separator"
-            top_pad="10"
-            left="0"
-            width="1020"/>
-        <panel
-            border="false"
-            bevel_style="none"
-            follows="left|top|right"
-            layout="topleft"
-            height="457"
-            top_pad="10"
-            width="1020">
-          <button
-              follows="left|top"
-              height="22"
-              label="Post Material ID"
-              layout="topleft"
-              name="post_button"
-              top_pad="0"
-              width="214"/>
-          <scroll_list
-              column_padding="0"
-              draw_heading="true"
-              follows="left|top|right"
-              height="135"
-              layout="topleft"
-              top_pad="10"
-              left="0"
-              tab_stop="false"
-              multi_select="false"
-              name="post_other_data_scroll_list"
-              width="775">
-            <scroll_list.columns
-                label="Material ID"
-                name="id"
-                dynamic_width="true" />
-            <scroll_list.columns
-                label="Specular Color"
-                name="specular_color"
-                width="120" />
-            <scroll_list.columns
-                label="Specular Exponent"
-                name="specular_exponent"
-                width="112" />
-            <scroll_list.columns
-                label="Env Intensity"
-                name="env_intensity"
-                width="80" />
-            <scroll_list.columns
-                label="Alpha Mask Cutoff"
-                name="alpha_mask_cutoff"
-                width="110" />
-            <scroll_list.columns
-                label="Diffuse Alpha Mode"
-                name="diffuse_alpha_mode"
-                width="118" />
-          </scroll_list>
-          <scroll_list
-              column_padding="0"
-              draw_heading="true"
-              follows="left|top|right"
-              height="135"
-              layout="topleft"
-              top_pad="10"
-              tab_stop="false"
-              multi_select="false"
-              name="post_specular_map_scroll_list"
-              width="1020">
-            <scroll_list.columns
-                label="Material ID"
-                name="id"
-                dynamic_width="true" />
-            <scroll_list.columns
-                label="Specular Map"
-                name="specular_map_list_map"
-                width="225" />
-            <scroll_list.columns
-                label="Offset X"
-                name="specular_map_list_offset_x"
-                width="112" />
-            <scroll_list.columns
-                label="Offset Y"
-                name="specular_map_list_offset_y"
-                width="112" />
-            <scroll_list.columns
-                label="Repeat X"
-                name="specular_map_list_repeat_x"
-                width="112" />
-            <scroll_list.columns
-                label="Repeat Y"
-                name="specular_map_list_repeat_y"
-                width="112" />
-            <scroll_list.columns
-                label="Rotation"
-                name="specular_map_list_rotation"
-                width="112" />
-          </scroll_list>
-          <scroll_list
-              column_padding="0"
-              draw_heading="true"
-              follows="left|top|right"
-              height="135"
-              layout="topleft"
-              top_pad="10"
-              tab_stop="false"
-              multi_select="false"
-              name="post_normal_map_scroll_list"
-              width="1020">
-            <scroll_list.columns
-                label="Material ID"
-                name="id"
-                dynamic_width="true" />
-            <scroll_list.columns
-                label="Normal Map"
-                name="normal_map_list_map"
-                width="225" />
-            <scroll_list.columns
-                label="Offset X"
-                name="normal_map_list_offset_x"
-                width="112" />
-            <scroll_list.columns
-                label="Offset Y"
-                name="normal_map_list_offset_y"
-                width="112" />
-            <scroll_list.columns
-                label="Repeat X"
-                name="normal_map_list_repeat_x"
-                width="112" />
-            <scroll_list.columns
-                label="Repeat Y"
-                name="normal_map_list_repeat_y"
-                width="112" />
-            <scroll_list.columns
-                label="Rotation"
-                name="normal_map_list_rotation"
-                width="112" />
-          </scroll_list>
-        </panel>
-      </panel>
-    </panel>
-  </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 721a1818dd8145fbcc27d466d9dac59b07691ae3..7e21013caccb5a9f59d6efc4d3b94a6aec663937 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2584,8 +2584,8 @@
           <menu_item_separator />
 
           <menu_item_check
-                       label="Lighting and Shadows"
-                       name="Lighting and Shadows">
+                       label="Advanced Lighting Model"
+                       name="Advanced Lighting Model">
             <menu_item_check.on_check
              function="CheckControl"
              parameter="RenderDeferred" />
@@ -2622,16 +2622,6 @@
 
           <menu_item_separator/>
 
-          <menu_item_call
-              label="Debug materials ..."
-              name="DebugMaterialsMenu">
-            <menu_item_call.on_click
-                function="Floater.ToggleOrBringToFront"
-                parameter="floater_debug_materials" />
-          </menu_item_call>
-
-          <menu_item_separator />
-
           <menu_item_check
              label="Debug GL"
              name="Debug GL">
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 849f3ef73d6a714c1f3e84a3998b103d337ca80b..e249d51d91db9df4a58f3457ca355c7d98e58190 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -262,7 +262,7 @@
 		 control_name="RenderDeferred"
 		 height="16"
 		 initial_value="true"
-		 label="Lighting and Shadows"
+		 label="Advance Lighting Model"
 		 layout="topleft"
 		 left_delta="0"
 		 name="UseLightShaders"
diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
index 26b2d833513a7098728f0dab3fb69276cbcec256..8382ad69d12843e745097763fab72793361225c4 100644
--- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml
+++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
@@ -155,36 +155,36 @@
              follows="left|top"
              height="10"
              layout="topleft"
-             name="label shininess"
              left_pad="10"
+             name="label alphamode"
              text_readonly_color="LabelDisabledColor"
-             top_delta="6"
+             top_delta="0"
              width="90">
-                Shininess
+                Alpha mode
             </text>
             <combo_box
              height="23"
              layout="topleft"
-             left_pad="10"
-             name="combobox shininess"
-             top_delta="-6"
-             width="90">
+             left_delta="0"
+             name="combobox alphamode"
+             top_pad="4"
+             width="120">
                 <combo_box.item
                  label="None"
                  name="None"
                  value="None" />
                 <combo_box.item
-                 label="Low"
-                 name="Low"
-                 value="Low" />
+                 label="Alpha blending"
+                 name="Alpha blending"
+                 value="Alpha blending" />
                 <combo_box.item
-                 label="Medium"
-                 name="Medium"
-                 value="Medium" />
+                 label="Alpha masking"
+                 name="Alpha masking"
+                 value="Alpha masking" />
                 <combo_box.item
-                 label="High"
-                 name="High"
-                 value="High" />
+                 label="Emissive mask"
+                 name="Emissive mask"
+                 value="Emissive mask" />
             </combo_box>
             <text
              type="string"
@@ -192,7 +192,45 @@
              follows="left|top"
              height="10"
              layout="topleft"
-             left_delta="-100"
+             left_delta="0"
+             name="label maskcutoff"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="4"
+             width="90">
+                Mask cutoff
+            </text>
+            <spinner
+             decimal_digits="0"
+             min_val="0"
+             max_val="255"
+             follows="left|top"
+             height="19"
+             initial_value="55"
+             layout="topleft"
+             top_pad="4"
+             left_delta="0"
+             name="maskcutoff"
+             width="80" />
+            <texture_picker
+             can_apply_immediately="true"
+             default_image_name="Default"
+             fallback_image="locked_image.j2c"
+             follows="left|top"
+             height="80"
+             label="Texture       "
+             layout="topleft"
+             left="10"
+             name="bumpytexture control"
+             tool_tip="Click to choose a picture"
+             top_delta="-55"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_pad="10"
              name="label bumpiness"
              text_readonly_color="LabelDisabledColor"
              top_delta="0"
@@ -278,13 +316,146 @@
                  label="weave"
                  name="weave"
                  value="weave" />
+                <combo_box.item
+                 label="Use texture"
+                 name="Use texture"
+                 value="Use texture" />
+            </combo_box>
+            <texture_picker
+             can_apply_immediately="true"
+             default_image_name="Default"
+             fallback_image="locked_image.j2c"
+             follows="left|top"
+             height="80"
+             label="Texture       "
+             layout="topleft"
+             left="10"
+             name="shinytexture control"
+             tool_tip="Click to choose a picture"
+             top_delta="-14"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             name="label shininess"
+             left_pad="10"
+             text_readonly_color="LabelDisabledColor"
+             top_delta="6"
+             width="90">
+                Shininess
+            </text>
+            <combo_box
+             height="23"
+             layout="topleft"
+             left_pad="10"
+             name="combobox shininess"
+             top_delta="-6"
+             width="90">
+                <combo_box.item
+                 label="None"
+                 name="None"
+                 value="None" />
+                <combo_box.item
+                 label="Low"
+                 name="Low"
+                 value="Low" />
+                <combo_box.item
+                 label="Medium"
+                 name="Medium"
+                 value="Medium" />
+                <combo_box.item
+                 label="High"
+                 name="High"
+                 value="High" />
+                <combo_box.item
+                 label="Use texture"
+                 name="Use texture"
+                 value="Use texture" />
             </combo_box>
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_delta="-100"
+             name="label glossiness"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="8"
+             width="116">
+                Glossiness
+            </text>
+            <spinner
+             decimal_digits="3"
+             min_value="0"
+             max_value="1"
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             layout="topleft"
+             top_delta="-4"
+             left_pad="10"
+             name="glossiness"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_delta="-126"
+             name="label environment"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="8"
+             width="116">
+                Environment
+            </text>
+            <spinner
+             decimal_digits="3"
+             min_value="0"
+             max_value="1"
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             layout="topleft"
+             top_delta="-4"
+             left_pad="10"
+             name="environment"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_delta="-126"
+             name="label shinycolor"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="8"
+             width="116">
+                Color
+            </text>
+            <!-- label is blank because control places it below the box -->
+            <color_swatch
+             can_apply_immediately="true"
+             follows="left|top"
+             height="45"
+             label=""
+             layout="topleft"
+             left_pad="10"
+             name="shinycolorswatch"
+             tool_tip="Click to open color picker"
+             top_delta="-4"
+             width="64" />
             <text
 			 follows="left|top|right"
 			 height="9"
 			 layout="topleft"
 			 left="10"
-			 top_delta="-8"
+			 top_delta="-50"
              use_ellipses="true"
 			 read_only="true"
 			 name="media_info"
@@ -370,14 +541,6 @@
              name="TexScaleU"
              top_pad="5"
              width="265" />
-            <!-- <check_box
-             height="19"
-             label="Flip"
-             layout="topleft"
-             left_pad="5"
-             name="checkbox flip s"
-             top_delta="0"
-             width="70" /> -->
             <spinner
              follows="left|top"
              height="19"
@@ -390,14 +553,6 @@
              max_val="100"
              name="TexScaleV"
              width="265" />
-            <!-- <check_box
-             height="19"
-             label="Flip"
-             layout="topleft"
-             left_pad="5"
-             name="checkbox flip t"
-             top_delta="0"
-             width="70" /> -->
             <spinner
              decimal_digits="1"
              follows="left|top"
@@ -411,19 +566,136 @@
              min_val="0.1"
              name="rptctrl"
              width="265" />
-            <!-- <button
+           <spinner
+             decimal_digits="2"
+             follows="left|top"
+             height="19"
+             increment="1"
+             initial_value="0"
+			 label="Rotation degrees"
+             layout="topleft"
+			 label_width="205"
+             left="10"
+             max_val="9999"
+             min_val="-9999"
+             name="TexRot"
+             width="265" />
+
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="TexOffsetU"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="TexOffsetV"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="bumpyScaleU"
+             top_delta="-115"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="bumpyScaleV"
+             width="265" />
+           <spinner
+             decimal_digits="2"
+             follows="left|top"
+             height="19"
+             top_pad="27"
+             increment="1"
+             initial_value="0"
+			 label="Rotation degrees"
+             layout="topleft"
+			 label_width="205"
+             left="10"
+             max_val="9999"
+             min_val="-9999"
+             name="bumpyRot"
+             width="265" />
+
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="bumpyOffsetU"
+             width="265" />
+            <spinner
              follows="left|top"
              height="19"
-             label="Apply"
-             label_selected="Apply"
+             initial_value="0"
+             label="Vertical offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="bumpyOffsetV"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal scale"
+             label_width="205"
              layout="topleft"
-             left_pad="5"
-             name="button apply"
-             width="75" /> -->
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="shinyScaleU"
+             top_delta="-115"
+             width="265" />
             <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="shinyScaleV"
+             width="265" />
+           <spinner
              decimal_digits="2"
              follows="left|top"
              height="19"
+             top_pad="27"
              increment="1"
              initial_value="0"
 			 label="Rotation degrees"
@@ -432,7 +704,7 @@
              left="10"
              max_val="9999"
              min_val="-9999"
-             name="TexRot"
+             name="shinyRot"
              width="265" />
 
             <spinner
@@ -444,7 +716,7 @@
              layout="topleft"
              left="10"
              min_val="-1"
-             name="TexOffsetU"
+             name="shinyOffsetU"
              width="265" />
             <spinner
              follows="left|top"
@@ -455,7 +727,7 @@
              layout="topleft"
              left="10"
              min_val="-1"
-             name="TexOffsetV"
+             name="shinyOffsetV"
              width="265" />
             <check_box
              follows="top|left"
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index d80150ef6df8010b9bb71412f2bbd99465af304a..9e0ac5115f11ebb31f53a777c094ad396d8929bc 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -285,7 +285,7 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Axes" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Luces y sombras" name="Lighting and Shadows"/>
+			<menu_item_check label="Luces y sombras" name="Advanced Lighting Model"/>
 			<menu_item_check label="Sombras del sol/la luna/proyectores" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO y sombras suavizadas" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Capas alfa automáticas (deferidas)" name="Automatic Alpha Masks (deferred)"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 85020afe252b645cbfbc2c66a1968f270319337c..24bd6a2a95c9fc7f6dc8c4bd72288132309caf3f 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -307,7 +307,7 @@
 			<menu_item_call label="Base des infos de la texture sélectionnée" name="Selected Texture Info Basis"/>
 			<menu_item_check label="Filaire" name="Wireframe"/>
 			<menu_item_check label="Occlusion objet-objet" name="Object-Object Occlusion"/>
-			<menu_item_check label="Éclairage et ombres" name="Lighting and Shadows"/>
+			<menu_item_check label="Éclairage et ombres" name="Advanced Lighting Model"/>
 			<menu_item_check label="Ombres du soleil/de la lune/des projecteurs" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO et lissage des ombres" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Débogage GL" name="Debug GL"/>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 547c5a9b73ced3dcef6db6eab555a3b71f401996..cdfa97bb3c633eae3a5162fcb75486127a199931 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -286,7 +286,7 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Assi" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Luci e ombre" name="Lighting and Shadows"/>
+			<menu_item_check label="Luci e ombre" name="Advanced Lighting Model"/>
 			<menu_item_check label="Ombra dal sole, dalla luna e dai proiettori" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO e ombre fluide" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Maschera alfa automatica (differita)" name="Automatic Alpha Masks (deferred)"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index e60e6781c6e3c6810719c1325e896cf42c4c5736..74859076c281a5eeeaf80d3269a27f86d35d7ee4 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -307,7 +307,7 @@
 			<menu_item_call label="選択したテクスチャ情報基底" name="Selected Texture Info Basis"/>
 			<menu_item_check label="ワイヤーフレーム" name="Wireframe"/>
 			<menu_item_check label="オブジェクト間オクルージョン" name="Object-Object Occlusion"/>
-			<menu_item_check label="光と影" name="Lighting and Shadows"/>
+			<menu_item_check label="光と影" name="Advanced Lighting Model"/>
 			<menu_item_check label="太陽・月・プロジェクタからの影" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO と影の平滑化" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="GL デバッグ" name="Debug GL"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index 24c961fa2659b0096c9563329c12831a0d7d9f62..e1725fc30865db1f805db6ed7906fd707891c37a 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -236,7 +236,7 @@
 		<menu label="Renderowanie" name="Rendering">
 			<menu_item_check label="Osie" name="Axes"/>
 			<menu_item_check label="Tryb obrazu szkieletowego" name="Wireframe"/>
-			<menu_item_check label="Oświetlenie i cienie" name="Lighting and Shadows"/>
+			<menu_item_check label="Oświetlenie i cienie" name="Advanced Lighting Model"/>
 			<menu_item_check label="Cienie Słońca/Księżyca/Projektory" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO and wygładzanie cienia" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Globalne oświetlenie (eksperymentalne)" name="Global Illumination"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index ca378c1b583fcbfffa7186abb5deb3c5c6725e6b..e8baff5af2d3e3e959d4a67eb27baddf0c20c3a3 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -286,7 +286,7 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Axes" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Iluminação e sombras" name="Lighting and Shadows"/>
+			<menu_item_check label="Iluminação e sombras" name="Advanced Lighting Model"/>
 			<menu_item_check label="Sombras da projeção do sol/lua" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO e sombra suave" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Máscaras alpha automáticas (adiadas)" name="Automatic Alpha Masks (deferred)"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index d9425937c36c8ab234d0220ef3497648440b8387..c292b8a287aa6839f923a8127ad35d4936a9d9fb 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -305,7 +305,7 @@
 			<menu_item_call label="Выбранная текстура в основе" name="Selected Texture Info Basis"/>
 			<menu_item_check label="Каркас" name="Wireframe"/>
 			<menu_item_check label="Смыкание объектов" name="Object-Object Occlusion"/>
-			<menu_item_check label="Освещение и тени" name="Lighting and Shadows"/>
+			<menu_item_check label="Освещение и тени" name="Advanced Lighting Model"/>
 			<menu_item_check label="Тени от солнца, луны и прожекторов" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO и сглаживание теней" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Отладка GL" name="Debug GL"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 7a7faf6ac4bd8a76fd932268926e3a24fbee70e2..28f28db6d2e0123db960303f2441965b3baa2ea5 100644
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -305,7 +305,7 @@
 			<menu_item_call label="Seçilen Doku Bilgi Temeli" name="Selected Texture Info Basis"/>
 			<menu_item_check label="Telkafes" name="Wireframe"/>
 			<menu_item_check label="Görünen Nesneler İçin Gölgeleme" name="Object-Object Occlusion"/>
-			<menu_item_check label="Işıklandırma ve Gölgeler" name="Lighting and Shadows"/>
+			<menu_item_check label="Işıklandırma ve Gölgeler" name="Advanced Lighting Model"/>
 			<menu_item_check label="Güneş/Ay/Projektörlerden Gelen Gölgeler" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO ve Gölge Yumuşatma" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="GL Hata Ayıklama" name="Debug GL"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index ac0e9e7e358e19c75d4ace097724b013b3cd8147..9a95e8c4d6f5c4ec5c40d1ff3d5891a559deed4a 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -305,7 +305,7 @@
 			<menu_item_call label="已選取材質資訊基礎" name="Selected Texture Info Basis"/>
 			<menu_item_check label="線框" name="Wireframe"/>
 			<menu_item_check label="物件導向的遮蔽" name="Object-Object Occlusion"/>
-			<menu_item_check label="光線和陰影" name="Lighting and Shadows"/>
+			<menu_item_check label="光線和陰影" name="Advanced Lighting Model"/>
 			<menu_item_check label="來自日/月/投影物的陰影" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="屏幕空間環境光遮蔽和陰影平滑技術" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="GL 除錯" name="Debug GL"/>