diff --git a/.tools/buildChromeVendors.js b/.tools/buildChromeVendors.js new file mode 100644 index 0000000..da996d6 --- /dev/null +++ b/.tools/buildChromeVendors.js @@ -0,0 +1,164 @@ +const data = require("./chromeVendors.json"); + +function addString(string, currentTree){ + "use strict"; + if (string.length <= 1){ + const nextTree = currentTree[string] || {}; + currentTree[string] = nextTree; + } + else { + const firstChar = string.substring(0, 1); + const nextTree = currentTree[firstChar] || {}; + currentTree[firstChar] = nextTree; + const nextString = string.substring(1); + addString(nextString, nextTree); + } +} + +function output(tree){ + "use strict"; + const keys = Object.keys(tree); + switch (keys.length){ + case 0: + return ""; + case 1: + return keys[0] + output(tree[keys[0]]); + default: + return "<" + keys.map(key => key + output(tree[key])).join("|") + ">"; + } +} + +// every string ends with a ) and does not contain <, >, $ or | +data.forEach(function(string){ + "use strict"; + if ( + !string.endsWith(")") || + string.match(/[<>|$]/) + ){ + throw string; + } +}); + + + +const tree1 = {}; +const tree2 = {}; +const tree3 = {}; +data.every(function(string){ + "use strict"; + string = string.substring(0, string.length - 1); + const parts = string.split(" Direct", 2); + const parts2 = parts[0].split(" (Microsoft Corporation", 2); + addString(parts2[0], tree1); + if (parts2.length > 1){ + addString(" (Microsoft Corporation" + parts2[1], tree2); + } + else { + addString("", tree2); + } + + if (parts.length > 1){ + addString(" Direct" + parts[1], tree3); + } + else { + addString("", tree3); + } + return true; +}); +// const compressed = output(tree1) + output(tree2) + output(tree3) + ")"; +const compressed = output(tree1) + output(tree2) + + "< Direct3D<11 vs_<4_<0 ps_4_0|1 ps_4_1>|5_0 ps_5_0>|9 vs_<0_0 ps_<2_0|3_0>|2_0 ps_2_0|3_0 ps_3_0>>|>" + ")"; +console.log("compressed length", compressed.length); +// console.log(compressed); + +function countWords(string){ + "use strict"; + const words = {}; + string.split(/[^0-9a-z]+/i).filter(word => word.length > 2).forEach(function(word){ + const wordStats = words[word] || {count: 0}; + words[word] = wordStats; + wordStats.count += 1; + }); + return words; +} + +function wordCompressor(string){ + "use strict"; + const words = countWords(string); + const duplicatedWord = Object.keys(words) + .map(function(word){ + return { + word, + count: words[word].count + }; + }) + .filter(word => word.count > 1) + .sort((a, b) => b.word.length*b.count - a.word.length*a.count); + let compressed = string; + let index = 0; + const usedWords = []; + for (let i = 0; i < duplicatedWord.length; i += 1){ + const replacement = "$" + index.toString(36); + const word = duplicatedWord[i].word; + if ( + replacement.length < word.length && + (word.length - replacement.length) * duplicatedWord[i].count > word.length + 1 + ){ + compressed = compressed.replace(new RegExp("\\b" + word + "\\b", "g"), replacement); + index += 1; + usedWords.push(word); + } + } + return {compressed, usedWords}; +} +const {compressed: compressed2, usedWords} = wordCompressor(compressed); +console.log("compressed 2 length", compressed2.length); +console.log(compressed2); +console.log(usedWords.join("|")); + +function decompress(string, words){ + "use strict"; + return string.replace(/\$([0-9a-z]+)/gi, function(m, index){ + return words[parseInt(index, 36)]; + }); +} +const decompressed2 = decompress(compressed2, usedWords); +console.log("test: ", compressed === decompressed2); +for (let start = 0; start < compressed.length; start += 100){ + + if (compressed.substr(start, 100) !== decompressed2.substr(start, 100)){ + console.log(start); + console.log(compressed.substr(start, 100)); + console.log(decompressed2.substr(start, 100)); + } +} + +function pickOne(string){ + "use strict"; + const options = []; + let cumulate = ""; + let index = 0; + for (const l = string.length; index < l; index += 1){ + const char = string.charAt(index); + if (char === "|"){ + options.push(cumulate); + cumulate = ""; + } + else if (char === "<"){ + const subPick = pickOne(string.substring(index + 1)); + cumulate += subPick.value; + index += 1 + subPick.endIndex; + } + else if (char === ">"){ + break; + } + else { + cumulate += char; + } + } + options.push(cumulate); + return {value: options[Math.floor(Math.random() * options.length)], endIndex: index}; +} + +console.log(pickOne(compressed).value); + diff --git a/.tools/chromeVendors.json b/.tools/chromeVendors.json new file mode 100644 index 0000000..05a553c --- /dev/null +++ b/.tools/chromeVendors.json @@ -0,0 +1,693 @@ +[ + "ANGLE (AMD (ATI) FirePro M8900 (FireGL) Mobility Pro Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD 760G (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD 760G Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (AMD 760G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD FirePro 2270 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (AMD FirePro W5000 (FireGL V) Graphics Adapter Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD M880G with ATI Mobility Radeon HD 4200 )", + "ANGLE (AMD M880G with ATI Mobility Radeon HD 4200 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD M880G with ATI Mobility Radeon HD 4250 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 5450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 5500 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 5570 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 5670 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 5700 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 5800 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6250 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6250M )", + "ANGLE (AMD Radeon HD 6290 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6290 Graphics (Microsoft Corporation- WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6290 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6300 series Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6310 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6310 Graphics )", + "ANGLE (AMD Radeon HD 6310 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6310M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6320 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6320 Graphic Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6320 Graphics )", + "ANGLE (AMD Radeon HD 6320 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6320 Graphics)", + "ANGLE (AMD Radeon HD 6320 series Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6320M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6350 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6370D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6370M)", + "ANGLE (AMD Radeon HD 6400M Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6410D Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6410D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6450 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6450A Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6470M )", + "ANGLE (AMD Radeon HD 6470M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6470M)", + "ANGLE (AMD Radeon HD 6480G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6500 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6500M/5600/5700 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6510 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6520G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6530D Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6550A Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6570 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6570 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6570)", + "ANGLE (AMD Radeon HD 6620G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6630M)", + "ANGLE (AMD Radeon HD 6650A Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6670 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6700 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6730M)", + "ANGLE (AMD Radeon HD 6800 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6800 Series)", + "ANGLE (AMD Radeon HD 6900 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 6900M Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7000 series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7290 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7300 Series Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7300 Series)", + "ANGLE (AMD Radeon HD 7310 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7310 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7310M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7340 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7340 Graphics (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7340 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7340G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7340M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7400M Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7420G Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7420G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7450 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7470M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7480D Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7480D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7500 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7500/7600 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7500G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7500M/7600M Series (Microsoft Corporation - WDDM v1.3) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7520G + 7670M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7520G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7540D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7550M/7650M Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7550M/7650M Graphics)", + "ANGLE (AMD Radeon HD 7560D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7570 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7570 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7570M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7580D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7600G + 6400M Dual Graphics)", + "ANGLE (AMD Radeon HD 7600M Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7610M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7610M)", + "ANGLE (AMD Radeon HD 7640G + 7600M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7640G + 7670M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7640G + 8750M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7640G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7650M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7660D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7660D)", + "ANGLE (AMD Radeon HD 7660G + 7600M Dual Graphics)", + "ANGLE (AMD Radeon HD 7660G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7670M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7700 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7700 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7800 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 7800 Series)", + "ANGLE (AMD Radeon HD 7900 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8210 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8240 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8250 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8330 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8350 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8400 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8450G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8470 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8470D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8510G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8550G + 8570M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8550G + HD 8600/8700M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8550G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8570D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8610G + 8500M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8610G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8650G + 8670M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8650G + 8750M Dual Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD 8670D Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD6370D Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD6410D Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD7700 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon HD7770 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon R7 200 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon R9 200 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon(TM) HD 6380G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon(TM) HD 6480G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon(TM) HD 6520G )", + "ANGLE (AMD Radeon(TM) HD 6520G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon(TM) HD 6620G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (AMD Radeon(TM) HD 7450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ASUS EAH4350 series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ASUS EAH5450 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ASUS EAH5670 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ASUS EAH5770 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ASUS EAH6450 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ASUS EAH6670 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ASUS EAH6970 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ASUS HD7770 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ASUS R9 270 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI FirePro 2450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI FirePro V3700 (FireGL) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI FirePro V3800 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI FirePro V4800 (FireGL) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon 9600/9700 Series)", + "ANGLE (ATI Mobility Radeon HD 2400 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 2400 XT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 2600 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 3400 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 3430 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 3450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 3470 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 3650 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4200 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4200 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4250 )", + "ANGLE (ATI Mobility Radeon HD 4250 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4250 Graphics Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4250 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4300 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4300/4500 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4330 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4330)", + "ANGLE (ATI Mobility Radeon HD 4500 Series (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4500 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4500/5100 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4530 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4570 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4570)", + "ANGLE (ATI Mobility Radeon HD 4650 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 4650 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5000 Series (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5000 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5145 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5400 Series )", + "ANGLE (ATI Mobility Radeon HD 5400 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5430)", + "ANGLE (ATI Mobility Radeon HD 5450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 545v Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5470 )", + "ANGLE (ATI Mobility Radeon HD 5470 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5470 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5470)", + "ANGLE (ATI Mobility Radeon HD 5650 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon HD 5650)", + "ANGLE (ATI Mobility Radeon HD 6370)", + "ANGLE (ATI Mobility Radeon HD 6550 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon X1300 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon X1600 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Mobility Radeon X1600)", + "ANGLE (ATI Radeon 2100 (Microsoft Corporation - WDDM) Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon 2100 Direct3D9 vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon 2100)", + "ANGLE (ATI Radeon 3000 Graphics (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon 3000 Graphics Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon 3000 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon 3000 Graphics)", + "ANGLE (ATI Radeon 3100 Graphics (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon 3100 Graphics)", + "ANGLE (ATI Radeon HD 2350 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 Pro )", + "ANGLE (ATI Radeon HD 2400 Pro Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 PRO Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 Pro Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 PRO Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 XT (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 XT )", + "ANGLE (ATI Radeon HD 2400 XT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 XT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2400 XT)", + "ANGLE (ATI Radeon HD 2600 Pro )", + "ANGLE (ATI Radeon HD 2600 PRO)", + "ANGLE (ATI Radeon HD 2600 XT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 2600 XT)", + "ANGLE (ATI Radeon HD 3200 Graphics (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3200 Graphics Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3200 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3300 Graphics Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3300 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3400 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3400 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3450 - Dell Optiplex Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3450 - Dell Optiplex Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3450 (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3470 - Dell Optiplex Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3600 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3600 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3650 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 3800 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4200 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4200 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4200)", + "ANGLE (ATI Radeon HD 4250 )", + "ANGLE (ATI Radeon HD 4250 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4250 Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4250)", + "ANGLE (ATI Radeon HD 4300 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4300/4500 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4350 (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4350 )", + "ANGLE (ATI Radeon HD 4350 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4350 Series)", + "ANGLE (ATI Radeon HD 4350)", + "ANGLE (ATI Radeon HD 4550 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4600 Series (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4600 Series )", + "ANGLE (ATI Radeon HD 4600 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4600 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4600 Serisi (Microsoft Corporation- WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4650 (Microsoft Corporation WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4650 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4670)", + "ANGLE (ATI Radeon HD 4770 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4800 Series (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4800 Series (Microsoft Corporation WDDM 1.1) )", + "ANGLE (ATI Radeon HD 4800 Series Direct3D11 vs_4_1 ps_4_1)", + "ANGLE (ATI Radeon HD 4800 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4800 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 4800 Series)", + "ANGLE (ATI Radeon HD 4870 X2 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5400 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5450 (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5450 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5450)", + "ANGLE (ATI Radeon HD 5570 (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5570 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5600 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5670 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5700 Series (Microsoft Corporation - WDDM v1.20) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5700 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5700 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 5800 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 6230 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD 6350 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon HD4670 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (ATI Radeon X1050 Direct3D9 vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X1050 Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X1200 Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X1200 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X1200 Series Direct3D9 vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X1200 Series Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X1200 Series)", + "ANGLE (ATI Radeon X1250 Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X1270 Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X300/X550/X1050 Series Direct3D9 vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X300/X550/X1050 Series Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon X300/X550/X1050 Series)", + "ANGLE (ATI Radeon Xpress 1100 Direct3D9 vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon Xpress 1150 Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon Xpress 1150 Series Direct3D9 vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon Xpress 1150 Series Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon Xpress 1200 Series Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon Xpress 1250 Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (ATI Radeon Xpress 200 Series Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (Intel(R) 4 Series Internal Chipset Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Intel(R) 4 Series Internal Chipset Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) 82915G/GV/910GL Express Chipset Family Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Intel(R) 82945G Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) 82945G Express Chipset Family Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Intel(R) 82945G Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) 82945G Express Chipset Family)", + "ANGLE (Intel(R) 946GZ Express Chipset Family Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Intel(R) 946GZ Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) B43 Express Chipset Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) G33/G31 Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) G33/G31 Express Chipset Family Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Intel(R) G33/G31 Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) G33/G31 Express Chipset Family)", + "ANGLE (Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1))", + "ANGLE (Intel(R) G41 Express Chipset Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Intel(R) G41 Express Chipset Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) G41 Express Chipset)", + "ANGLE (Intel(R) G45/G43 Express Chipset (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) G45/G43 Express Chipset Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) G965 Express Chipset Family Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) Graphics Media Accelerator 3150 (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Graphics Media Accelerator 3150 Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Graphics Media Accelerator 3150 Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Graphics Media Accelerator 3150)", + "ANGLE (Intel(R) Graphics Media Accelerator 3600 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) Graphics Media Accelerator HD )", + "ANGLE (Intel(R) Graphics Media Accelerator HD Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics 3000 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics 3000)", + "ANGLE (Intel(R) HD Graphics 4000 (Microsoft Corporation - WDDM 1.2) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics 4000 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics 4000)", + "ANGLE (Intel(R) HD Graphics 4400 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics 4600 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics Family Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics Family Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) HD Graphics Family)", + "ANGLE (Intel(R) HD Graphics)", + "ANGLE (Intel(R) Q33 Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q33 Express Chipset Family Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q33 Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q35 Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q35 Express Chipset Family Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q35 Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q45/Q43 Express Chipset (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) Q45/Q43 Express Chipset (Microsoft Corporation - WDDM 1.1))", + "ANGLE (Intel(R) Q45/Q43 Express Chipset Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Intel(R) Q45/Q43 Express Chipset Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Intel(R) Q45/Q43 Express Chipset)", + "ANGLE (Intel(R) Q965/Q963 Express Chipset Family (Microsoft Corporation - WDDM 1.0) Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q965/Q963 Express Chipset Family Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q965/Q963 Express Chipset Family Direct3D9Ex vs_0_0 ps_2_0)", + "ANGLE (Intel(R) Q965/Q963 Express Chipset Family)", + "ANGLE (Microsoft Basic Render Driver Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) - famiglia Express Chipset 45 (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 4 Series Express Chipset Family (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 4 Series Express Chipset Family Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 4 Series Express Chipset Family Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 4 Series Express Chipset Family)", + "ANGLE (Mobile Intel(R) 45 Express Chipset Family (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 915GM/GMS,910GML Express Chipset Family Direct3D9 vs_0_0 ps_2_0)", + "ANGLE (Mobile Intel(R) 915GM/GMS,910GML Express Chipset Family)", + "ANGLE (Mobile Intel(R) 945 Express Chipset Family)", + "ANGLE (Mobile Intel(R) 945GM Express Chipset Family)", + "ANGLE (Mobile Intel(R) 965 Express Chipset Family (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 965 Express Chipset Family Direct3D9 vs_0_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 965 Express Chipset Family Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 965 Express Chipset Family Direct3D9Ex vs_0_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 965 Express Chipset Family Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) 965 Express Chipset Family)", + "ANGLE (Mobile Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Mobile Intel(R) HD Graphics)", + "ANGLE (NVIDIA GeForce 210 )", + "ANGLE (NVIDIA GeForce 210 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 210 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 210)", + "ANGLE (NVIDIA GeForce 310 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 310M (Microsoft Corporation - WDDM v1.2) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 310M )", + "ANGLE (NVIDIA GeForce 310M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 310M)", + "ANGLE (NVIDIA GeForce 315 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 315M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 405 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 405)", + "ANGLE (NVIDIA GeForce 405M)", + "ANGLE (NVIDIA GeForce 410M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 605 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6100 nForce 405 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6100 nForce 405 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6100)", + "ANGLE (NVIDIA GeForce 610M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6150 LE (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6150 LE Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6150SE nForce 430 (Microsoft Corporation - WDDM v1.2) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6150SE nForce 430 (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6150SE nForce 430 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6150SE nForce 430 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6150SE nForce 430)", + "ANGLE (NVIDIA GeForce 6200 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6200 TurboCache(TM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6500 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6600 (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6600 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 6600 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7000M / nForce 610M Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7000M / nForce 610M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a )", + "ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7025 / NVIDIA nForce 630a)", + "ANGLE (NVIDIA GeForce 7050 / NVIDIA nForce 620i Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7050 PV / NVIDIA nForce 630a Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7100 / NVIDIA nForce 630i Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7100 GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7150M / nForce 630M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 GS Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 GT (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 LE (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 LE Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 SE/7200 GS (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 SE/7200 GS Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7300 SE/7200 GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 7900 GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8200 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8200M G Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8200M G)", + "ANGLE (NVIDIA GeForce 8300 GS )", + "ANGLE (NVIDIA GeForce 8300 GS Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8300 GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8400 GS (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8400 GS Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8400 GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8400 GS)", + "ANGLE (NVIDIA GeForce 8400GS Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8400GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8400M GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8400M GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8500 GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8500 GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600 GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600 GT (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600 GT )", + "ANGLE (NVIDIA GeForce 8600 GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600 GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600 GT)", + "ANGLE (NVIDIA GeForce 8600 GTS (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600 GTS Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600 GTS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600GS (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600M GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8600M GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8800 GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8800 GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8800 GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8800 GTS 512 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 8800 GTS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9100 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9200 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9200M GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9300 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9300 GE (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9300 GE Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9300 GE Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9300M GS (Microsoft Corporation - WDDM v1.1))", + "ANGLE (NVIDIA GeForce 9300M GS )", + "ANGLE (NVIDIA GeForce 9300M GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9400 GT (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9400 GT )", + "ANGLE (NVIDIA GeForce 9400 GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9400 GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9400 GT)", + "ANGLE (NVIDIA GeForce 9400M )", + "ANGLE (NVIDIA GeForce 9500 GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9500 GS)", + "ANGLE (NVIDIA GeForce 9500 GT (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9500 GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9500 GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9500 GT)", + "ANGLE (NVIDIA GeForce 9500M GS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9600 GSO 512 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9600 GT (Microsoft Corporation - WDDM v1.1))", + "ANGLE (NVIDIA GeForce 9600 GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9600 GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9600 GT)", + "ANGLE (NVIDIA GeForce 9600M GS)", + "ANGLE (NVIDIA GeForce 9600M GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9600M GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9650M GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9700M GTS Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9800 GT (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9800 GT (Microsoft Corporation - WDDM v1.1))", + "ANGLE (NVIDIA GeForce 9800 GT )", + "ANGLE (NVIDIA GeForce 9800 GT Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9800 GT Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce 9800 GTX/9800 GTX+ Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce FX 5200 Direct3D9 vs_2_0 ps_2_0)", + "ANGLE (NVIDIA GeForce G 103M )", + "ANGLE (NVIDIA GeForce G 105M )", + "ANGLE (NVIDIA GeForce G 105M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce G100 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce G100)", + "ANGLE (NVIDIA GeForce G102M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce G105M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce G210 )", + "ANGLE (NVIDIA GeForce G210 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce G210)", + "ANGLE (NVIDIA GeForce G210M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce Go 7300 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 120M)", + "ANGLE (NVIDIA GeForce GT 220 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 220 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 220)", + "ANGLE (NVIDIA GeForce GT 230 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 230M )", + "ANGLE (NVIDIA GeForce GT 230M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 240 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 240 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 240)", + "ANGLE (NVIDIA GeForce GT 240M )", + "ANGLE (NVIDIA GeForce GT 240M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 320 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 320M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 330 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 330M )", + "ANGLE (NVIDIA GeForce GT 330M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 335M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 420 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 420M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 425M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 430 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 430 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 430)", + "ANGLE (NVIDIA GeForce GT 440 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 440 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 440)", + "ANGLE (NVIDIA GeForce GT 520 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 520 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 520)", + "ANGLE (NVIDIA GeForce GT 520M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 520M)", + "ANGLE (NVIDIA GeForce GT 525M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 530 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 545 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 555M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 610 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 610)", + "ANGLE (NVIDIA GeForce GT 620 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 620)", + "ANGLE (NVIDIA GeForce GT 625 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 630 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 630 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 630M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 635 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 640 )", + "ANGLE (NVIDIA GeForce GT 640 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 640)", + "ANGLE (NVIDIA GeForce GT 640M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 650M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 740M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GT 755M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTS 240 Direct3D11 vs_4_0 ps_4_0)", + "ANGLE (NVIDIA GeForce GTS 250 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTS 250 (Microsoft Corporation - WDDM v1.1))", + "ANGLE (NVIDIA GeForce GTS 250 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTS 250 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTS 250)", + "ANGLE (NVIDIA GeForce GTS 350M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTS 450 )", + "ANGLE (NVIDIA GeForce GTS 450 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTS 450 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTS 450)", + "ANGLE (NVIDIA GeForce GTX 260 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 275 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 285 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 295 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 460 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 460 SE Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 460)", + "ANGLE (NVIDIA GeForce GTX 460M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 480 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 550 Ti Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 550 Ti)", + "ANGLE (NVIDIA GeForce GTX 560 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 560 Ti )", + "ANGLE (NVIDIA GeForce GTX 560 Ti Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 560M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 570 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 580 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 580M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 650 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 650 Ti BOOST Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 650 Ti Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 650)", + "ANGLE (NVIDIA GeForce GTX 660 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 660 Ti Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 660M )", + "ANGLE (NVIDIA GeForce GTX 660M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 670 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 670)", + "ANGLE (NVIDIA GeForce GTX 675M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 680 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 690 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 760 (192-bit) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 760 Direct3D11 vs_5_0 ps_5_0)", + "ANGLE (NVIDIA GeForce GTX 760 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 770 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA GeForce GTX 780 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA ION Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA MCP67M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA nForce 750a SLI Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA NVS 300 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA NVS 3100M )", + "ANGLE (NVIDIA NVS 3100M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA NVS 4200M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA NVS 5100M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA NVS 5200M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA NVS 5400M )", + "ANGLE (NVIDIA Quadro 1000M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro 2000M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro 600 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 1500M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 1700 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 1700 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 1800 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 2500M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 2700M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 3700 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 570 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 570 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 580 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 770M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro FX 880M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro K3000M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro K600 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro NVS 110M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro NVS 135M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro NVS 140M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro NVS 140M)", + "ANGLE (NVIDIA Quadro NVS 160M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro NVS 160M)", + "ANGLE (NVIDIA Quadro NVS 285 Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro NVS 290 (Microsoft Corporation - WDDM v1.1) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (NVIDIA Quadro NVS 290 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon (TM) HD 6470M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon (TM) HD 6490M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon HD 6470M Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X1300/X1550 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X1300/X1550 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Radeon X1300/X1550 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X1550 64-bit (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X1550 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X1650 SE Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X1650 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X1650 Series )", + "ANGLE (Radeon X1650 Series Direct3D9 vs_3_0 ps_3_0)", + "ANGLE (Radeon X1650 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X1950 Series Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Radeon X300/X550/X1050 Series (Microsoft Corporation - WDDM) Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (Radeon X300/X550/X1050 Series Direct3D9 vs_2_0 ps_2_0)", + "ANGLE (Radeon X800 GTO (Microsoft Corporation - WDDM) Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (RDPDD Chained DD Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (Royal BNA Driver Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (RS880 Direct3D9Ex vs_3_0 ps_3_0)", + "ANGLE (SiS Mirage 3 Graphics Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (SiS Mirage 3 Graphics)", + "ANGLE (VIA Chrome9 HC IGP Family WDDM Direct3D9Ex vs_2_0 ps_2_0)", + "ANGLE (WinFast GT 640(NVIDIA) Direct3D9Ex vs_3_0 ps_3_0)" +] \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 02aeaf7..eeb4567 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -70,7 +70,8 @@ "**/vscode-extension/**", "**/.git/objects/**", ".vscode", - ".eslintrc.json" + ".eslintrc.json", + ".tools/chromeVendors.json" ], "eslint.validate": [ "javascript", diff --git a/lib/webgl.js b/lib/webgl.js index c7f794e..417b756 100644 --- a/lib/webgl.js +++ b/lib/webgl.js @@ -110,9 +110,11 @@ return {webGlCanvas, context}; }; + const webglRandom = require("./webglRandom"); let randomSupply = null; scope.setRandomSupply = function(supply){ randomSupply = supply; + webglRandom.setRandomSupply(supply); }; function getNumber({originalValue, max, index, window}){ @@ -138,6 +140,10 @@ return ""; case "{disabled}": return null; + case "{random vendor}": + return webglRandom.getRandomVendor(window); + case "{random renderer}": + return webglRandom.getRandomRenderer(window); } return settingValue; }, diff --git a/lib/webglRandom.js b/lib/webglRandom.js new file mode 100644 index 0000000..552c284 --- /dev/null +++ b/lib/webglRandom.js @@ -0,0 +1,171 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +(function(){ + "use strict"; + + let scope; + if ((typeof exports) !== "undefined"){ + scope = exports; + } + else { + scope = require.register("./webglRandom", {}); + } + + let randomSupply = null; + scope.setRandomSupply = function(supply){ + randomSupply = supply; + }; + + const windowHashes = new WeakMap(); + function getWindowStorage(window){ + let storage = windowHashes.get(window); + if (!storage){ + const vendorRng = randomSupply.getIndexRng(1, scope.vendors.length, window); + const vendorIndex = vendorRng(0); + storage = {vendorIndex}; + const vendor = scope.vendors[vendorIndex]; + if (vendor.getRandomRenderer){ + vendor.renderers = [vendor.getRandomRenderer(window)]; + storage.rendererIndex = 0; + } + else { + const rendererRng = randomSupply.getIndexRng(1, vendor.renderers.length, window); + storage.rendererIndex = rendererRng(0); + } + windowHashes.set(window, storage); + } + return storage; + } + function getRandomVendorIndex(window){ + return getWindowStorage(window).vendorIndex; + } + function getRandomRendererIndex(window){ + return getWindowStorage(window).rendererIndex; + } + scope.getRandomVendor = function getRandomVendor(window){ + return scope.vendors[getRandomVendorIndex(window)].vendor; + }; + scope.getRandomRenderer = function getRandomRenderer(window){ + + const vendor = scope.vendors[getRandomVendorIndex(window)]; + return vendor.renderers[getRandomRendererIndex(window)]; + }; + + scope.vendors = [ + { + vendor: "Chromium", + renderers: [ + "Chromium", + ] + }, + { + vendor: "Intel Inc.", + renderers: [ + "Intel GMA X3100 OpenGL Engine", + "Intel HD Graphics 3000 OpenGL Engine", + "Intel HD Graphics 4000 OpenGL Engine", + "Intel HD Graphics 5000 OpenGL Engine", + "Intel Iris OpenGL Engine", + "Intel Iris Pro OpenGL Engine", + ] + }, + { + vendor: "Intel Open Source Technology Center", + renderers: [ + "Mesa DRI Intel(R) Haswell Mobile", + "Mesa DRI Intel(R) Ironlake Mobile", + "Mesa DRI Intel(R) Ivybridge Mobile x86/MMX/SSE2", + "Mesa DRI Intel(R) Ivybridge Mobile", + "Mesa DRI Intel(R) Sandybridge Desktop x86/MMX/SSE2", + "Mesa DRI Intel(R) Sandybridge Desktop", + "Mesa DRI Intel(R) Sandybridge Mobile x86/MMX/SSE2", + "Mesa DRI Intel(R) Sandybridge Mobile", + ] + }, + { + vendor: "Google Inc.", + getRandomRenderer: function(window){ + const words = "Series|Graphics|Chipset|Express|Family|nForce|Dual|NVIDIA|800|600|300|FireGL|Mobility|Radeon|series|FirePro|Optiplex|WDDM|200|400|700|70M|50M|Driver|200M".split("|"); + const compressed = "ANGLE (|M880G with ATI $c $d HD 42<00 |50>|$d< |77<00 $0|70>| <5<450|5<00 $0|70>|670|$k $0|$8 $0>|6<2<50< $1|M >|90 $1>|3<00 $e $1|10< $1 |M>|20< <$1 |$e $1>|M>|50|70>|4<00M $0|10D|50A $1|$l |80G>|5<00< $0|M/5600/5700 $0>|10 $0|20G|30D $1|50A|70>|6<20G|30M|50A $1|70>|7<00 $0|30M>|$8 $0|900< $0|M $0>>|7<000 $e|290 $1|3<00 $0 $1|10< $1|M>|40< $1|G|M>>|4<00M $0|20G|50 $1|$l|80D>|5<00< $0|/7600 $0|G|M/7600M $0>|20G + 7670M $6 $1|40D|$m/7650M $1|60D|70< $1|M>|80D>|6<00|10M|40G + <76<00M $6 $1|$l $6 $1>|8750M $6 $1>|$m|60|$l>|$k $0|$8 $0|900 $0>|8<2<10|40|50>|3<30|50>|4<00|50G|70D>|5<10G|50G + <8570M $6 $1|HD 8600/8700M $6 $1>|70D>|6<10G + 8500M $6 $1|50G + 8<670M $6 $1|750M $6 $1>|70D>>>>|R<7 $i $0|9 $i $0>>|(TM) HD <6<380G|480G|520G |620G>|7450>>>|SUS |6<450 $0|670 $0|970 $0>>|HD7770 $0|R9 270 $0>|TI <$f <2450|V<3<$k ($b)|$8>|4800 ($b)>>|$c $d <9600/9700 $0|HD <2<$j XT|$9>|3<4<00 $0|30|50|70>|650>|4<2<00 $0|50 $1>|3<00< $0|/4500 $0>|30>|5<00< $0|/5100 $0>|30 $0|70>|650>|5<000 $0|145|4<00 $0 |30|5<0|v>|70 >|650>|6<370|550>>|X1<$a|$9>>|$d <2100|3<000 $1|100 $1>|HD<4670| <2<350|$j |$0|XT >|$9 |XT>>|3<$i $1|$a $1|4<00 $0|50 - Dell $g|70 - Dell $g>|6<00 $0|50>|$8 $0>|4<2<00|50 $1>|3<00< $0|/4500 $0>|50 $0>|550|6<00 Seri|50|70>|770|8<00 $0|70 X2>>|5<4<00 $0|50>|570|6<00 $0|70>|$k $0|$8 $0>|6<230|350>>>|X<1<050|2<00 $0|50|70>>|$a/X550/X1050 $0|press <1<1<00|50 $0>|2<00 $0|50>>|$i $0>>>>>|Intel(R) <4 $0 Internal $2|829<15G/GV/910GL $3 $2 $4|45G $3 $2 $4>|946GZ $3 $2 $4|B43 $3 $2|G<33/G31 $3 $2 $4|4<1 $3 $2|5/G43 $3 $2>|965 $3 $2 $4|raphics Media Accelerator <3<150|$9 $0>|HD >>|HD $1 <3000|4<000|$j|$9>|$4>|Q<3<3 $3 $2 $4|5 $3 $2 $4>|45/Q43 $3 $2|965/Q963 $3 $2 $4>>|M|9<15GM/GMS,910GML $3 $2 $4|45< $3 $2 $4|GM $3 $2 $4>|65 $3 $2 $4>|- famiglia $3 $2 45|HD $1>>|$7 |4<05M|10M>|6<05|1<0<0 $5 405|M>|50< LE|SE $5 430>>|$i TurboCache(TM)|500|$9>|7<0<00M / $5 610M|25 / $7 $5 630a |50 >|1<00 |$m / $5 630M>|$a |LE|SE/7200 GS>|900 GS>|8<$o G|$a GS |$j< GS|GS|M G>|500 GT|$9< G>|GS|M G>|$8 G>|9<100|$o GS|$a< GE|M GS >|$j< GT |M >|500< G|M GS>|6<00< G|M G>|$m GT>|700M GTS|$8 GT< |X/9800 GTX+>>|FX 5200|G<10<0|2M|5M>|210< |M>| 10<3M |5M >|o 7300|T< <120M|2<20|30M |40M >|3<20M|3<0M |5M>>|4<2<0M|5M>|30|40>|5<2<0M|5M>|30|45|55M>|6<10|2<0|5>|3<0M|5>|40< |M>|$m>|7<40M|55M>>|S <2<40|50>|350M|450 >|X <2<60|75|85|95>|4<60< SE|M>|80>|5<50 Ti|60< Ti |M>|70|80M>|6<50 Ti BOOST|60< Ti|M >|7<0|5M>|80|90>|7<60 (192-bit)|70|80>>>>>|ION|MCP67M|$5 750a SLI|NVS <3<00|100M >|4200M|5<100M|$o|400M >>|Quadro <1000M|2000M|$9|FX <1<500M|$k|$8>|2<500M|700M>|3700|5<70|80>|770M|880M>|K<3000M|$9>|NVS <1<10M|35M|40M|60M>|2<85|90>>>>|R|HD 6470M|X<1<$a/X1550 $0|550 <64-bit|$0>|650 S|950 $0>|$a/X550/X1050 $0|$8 GTO>>|DPDD Chained DD|oyal BNA $n|S880>|SiS Mirage 3 $1|VIA Chrome9 HC IGP $4 $h|WinFast GT 640($7)><| (Microsoft Corporation< <$h 1.1) |- $h< <1.<0)|1)|2)>|v1.<1)|2<0)|)>|3)>>|)>>|- $h v1.<1)|20)>>>< Direct3D<11 vs_<4_<0 ps_4_0|1 ps_4_1>|5_0 ps_5_0>|9 vs_<0_0 ps_<2_0|3_0>|2_0 ps_2_0|3_0 ps_3_0>>|>)".replace( + /\$([0-9a-z]+)/gi, + function(m, index){ + return words[parseInt(index, 36)]; + } + ); + + function pickOne(string){ + const options = []; + let cumulate = ""; + let index = 0; + for (const l = string.length; index < l; index += 1){ + const char = string.charAt(index); + if (char === "|"){ + options.push(cumulate); + cumulate = ""; + } + else if (char === "<"){ + const subPick = pickOne(string.substring(index + 1)); + cumulate += subPick.value; + index += 1 + subPick.endIndex; + } + else if (char === ">"){ + break; + } + else { + cumulate += char; + } + } + options.push(cumulate); + const optionRng = randomSupply.getIndexRng(1, options.length, window); + return {value: options[optionRng(0)], endIndex: index}; + } + return pickOne(compressed).value; + + } + }, + { + vendor: "NVIDIA Corporation", + renderers: [ + "GeForce 8600M GT/PCIe/SSE2", + "GeForce GT 430/PCIe/SSE2", + "GeForce GT 520/PCIe/SSE2", + "GeForce GTX 650 Ti/PCIe/SSE2", + "GeForce GTX 680/PCIe/SSE2", + "GeForce GTX 770/PCIe/SSE2", + "NVIDIA GeForce 320M OpenGL Engine", + "NVIDIA GeForce 8600M GT OpenGL Engine", + "NVIDIA GeForce 8800 GS OpenGL Engine", + "NVIDIA GeForce 8800 GT OpenGL Engine", + "NVIDIA GeForce 9400 OpenGL Engine", + "NVIDIA GeForce 9400M OpenGL Engine", + "NVIDIA GeForce 9600M GT OpenGL Engine", + "NVIDIA GeForce GT 130 OpenGL Engine", + "NVIDIA GeForce GT 330M OpenGL Engine", + "NVIDIA GeForce GT 640M OpenGL Engine", + "NVIDIA GeForce GT 650M OpenGL Engine", + "NVIDIA GeForce GT 750M OpenGL Engine", + "NVIDIA GeForce GTX 660M OpenGL Engine", + "NVIDIA GeForce GTX 675MX OpenGL Engine", + "NVIDIA GeForce GTX 680MX OpenGL Engine", + "Quadro 2000/PCIe/SSE2", + "Quadro 2000M/PCIe/SSE2", + "Quadro FX 1800/PCIe/SSE2", + "Quadro K600/PCIe/SSE2", + ] + }, + { + vendor: "VMware, Inc.", + renderers: [ + "Gallium 0.4 on i915 (chipset: Pineview M)", + "Gallium 0.4 on llvmpipe (LLVM 3.2, 128 bits)", + ] + }, + { + vendor: "TransGaming Inc.", + renderers: [ + "SwiftShader", + ] + }, + ]; +}()); \ No newline at end of file diff --git a/manifest.json b/manifest.json index 43a8054..ebca957 100644 --- a/manifest.json +++ b/manifest.json @@ -42,6 +42,7 @@ "lib/settings.js", "lib/colorStatistics.js", + "lib/webglRandom.js", "lib/webgl.js", "lib/hash.js", "lib/modifiedAPIFunctions.js", diff --git a/releaseNotes.txt b/releaseNotes.txt index 97bb9e7..7fec6e3 100644 --- a/releaseNotes.txt +++ b/releaseNotes.txt @@ -5,6 +5,7 @@ Version 1.8: new features: - added SVG protection - added notice when dom.webAudio.enabled is set to false + - added {random vendor} and {random renderer} to UNMASKED_VENDOR_WEBGL and UNMASKED_RENDERER_WEBGL to use a random value from a given list fixes: - errors in URL regular expressions broke CB