1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "GfxDriverInfo.h"
8 #include "nsIGfxInfo.h"
10 #include "nsUnicharUtils.h"
12 using namespace mozilla::widget
;
14 int32_t GfxDriverInfo::allFeatures
= 0;
15 uint64_t GfxDriverInfo::allDriverVersions
= ~(uint64_t(0));
18 GfxDriverInfo::sDeviceFamilies
[static_cast<size_t>(DeviceFamily::Max
)];
19 nsAString
* GfxDriverInfo::sDesktopEnvironment
[static_cast<size_t>(
20 DesktopEnvironment::Max
)];
22 GfxDriverInfo::sWindowProtocol
[static_cast<size_t>(WindowProtocol::Max
)];
24 GfxDriverInfo::sDeviceVendors
[static_cast<size_t>(DeviceVendor::Max
)];
26 GfxDriverInfo::sDriverVendors
[static_cast<size_t>(DriverVendor::Max
)];
28 GfxDriverInfo::GfxDriverInfo()
29 : mOperatingSystem(OperatingSystem::Unknown
),
30 mOperatingSystemVersion(0),
31 mScreen(ScreenSizeStatus::All
),
32 mBattery(BatteryStatus::All
),
34 GfxDriverInfo::GetDesktopEnvironment(DesktopEnvironment::All
)),
35 mWindowProtocol(GfxDriverInfo::GetWindowProtocol(WindowProtocol::All
)),
36 mAdapterVendor(GfxDriverInfo::GetDeviceVendor(DeviceFamily::All
)),
37 mDriverVendor(GfxDriverInfo::GetDriverVendor(DriverVendor::All
)),
38 mDevices(GfxDriverInfo::GetDeviceFamily(DeviceFamily::All
)),
39 mDeleteDevices(false),
40 mFeature(allFeatures
),
41 mFeatureStatus(nsIGfxInfo::FEATURE_STATUS_OK
),
42 mComparisonOp(DRIVER_COMPARISON_IGNORED
),
45 mSuggestedVersion(nullptr),
49 GfxDriverInfo::GfxDriverInfo(
50 OperatingSystem os
, ScreenSizeStatus screen
, BatteryStatus battery
,
51 const nsAString
& desktopEnv
, const nsAString
& windowProtocol
,
52 const nsAString
& vendor
, const nsAString
& driverVendor
,
53 GfxDeviceFamily
* devices
, int32_t feature
, int32_t featureStatus
,
54 VersionComparisonOp op
, uint64_t driverVersion
, const char* ruleId
,
55 const char* suggestedVersion
/* = nullptr */, bool ownDevices
/* = false */,
56 bool gpu2
/* = false */)
57 : mOperatingSystem(os
),
58 mOperatingSystemVersion(0),
61 mDesktopEnvironment(desktopEnv
),
62 mWindowProtocol(windowProtocol
),
63 mAdapterVendor(vendor
),
64 mDriverVendor(driverVendor
),
66 mDeleteDevices(ownDevices
),
68 mFeatureStatus(featureStatus
),
70 mDriverVersion(driverVersion
),
72 mSuggestedVersion(suggestedVersion
),
76 GfxDriverInfo::GfxDriverInfo(const GfxDriverInfo
& aOrig
)
77 : mOperatingSystem(aOrig
.mOperatingSystem
),
78 mOperatingSystemVersion(aOrig
.mOperatingSystemVersion
),
79 mScreen(aOrig
.mScreen
),
80 mBattery(aOrig
.mBattery
),
81 mDesktopEnvironment(aOrig
.mDesktopEnvironment
),
82 mWindowProtocol(aOrig
.mWindowProtocol
),
83 mAdapterVendor(aOrig
.mAdapterVendor
),
84 mDriverVendor(aOrig
.mDriverVendor
),
85 mFeature(aOrig
.mFeature
),
86 mFeatureStatus(aOrig
.mFeatureStatus
),
87 mComparisonOp(aOrig
.mComparisonOp
),
88 mDriverVersion(aOrig
.mDriverVersion
),
89 mDriverVersionMax(aOrig
.mDriverVersionMax
),
90 mSuggestedVersion(aOrig
.mSuggestedVersion
),
91 mRuleId(aOrig
.mRuleId
),
93 // If we're managing the lifetime of the device family, we have to make a
94 // copy of the original's device family.
95 if (aOrig
.mDeleteDevices
&& aOrig
.mDevices
) {
96 GfxDeviceFamily
* devices
= new GfxDeviceFamily
;
97 *devices
= *aOrig
.mDevices
;
100 mDevices
= aOrig
.mDevices
;
103 mDeleteDevices
= aOrig
.mDeleteDevices
;
106 GfxDriverInfo::~GfxDriverInfo() {
107 if (mDeleteDevices
) {
112 void GfxDeviceFamily::Append(const nsAString
& aDeviceId
) {
113 mIds
.AppendElement(aDeviceId
);
116 void GfxDeviceFamily::AppendRange(int32_t aBeginDeviceId
,
117 int32_t aEndDeviceId
) {
118 mRanges
.AppendElement(
119 GfxDeviceFamily::DeviceRange
{aBeginDeviceId
, aEndDeviceId
});
122 nsresult
GfxDeviceFamily::Contains(nsAString
& aDeviceId
) const {
123 for (const auto& id
: mIds
) {
124 if (id
.Equals(aDeviceId
, nsCaseInsensitiveStringComparator
)) {
129 if (mRanges
.IsEmpty()) {
130 return NS_ERROR_NOT_AVAILABLE
;
133 nsresult valid
= NS_OK
;
134 int32_t deviceId
= aDeviceId
.ToInteger(&valid
, 16);
135 if (valid
!= NS_OK
) {
136 return NS_ERROR_INVALID_ARG
;
139 for (const auto& range
: mRanges
) {
140 if (deviceId
>= range
.mBegin
&& deviceId
<= range
.mEnd
) {
145 return NS_ERROR_NOT_AVAILABLE
;
148 // Macros for appending a device to the DeviceFamily.
149 #define APPEND_DEVICE(device) APPEND_DEVICE2(#device)
150 #define APPEND_DEVICE2(device) \
151 deviceFamily->Append(NS_LITERAL_STRING_FROM_CSTRING(device))
152 #define APPEND_RANGE(start, end) deviceFamily->AppendRange(start, end)
154 const GfxDeviceFamily
* GfxDriverInfo::GetDeviceFamily(DeviceFamily id
) {
155 if (id
>= DeviceFamily::Max
) {
156 MOZ_ASSERT_UNREACHABLE("DeviceFamily id is out of range");
160 // All of these have no specific device ID filtering.
162 case DeviceFamily::All
:
163 case DeviceFamily::IntelAll
:
164 case DeviceFamily::NvidiaAll
:
165 case DeviceFamily::AtiAll
:
166 case DeviceFamily::MicrosoftAll
:
167 case DeviceFamily::ParallelsAll
:
168 case DeviceFamily::QualcommAll
:
169 case DeviceFamily::AppleAll
:
170 case DeviceFamily::AmazonAll
:
176 // If it already exists, we must have processed it once, so return it now.
177 auto idx
= static_cast<size_t>(id
);
178 if (sDeviceFamilies
[idx
]) {
179 return sDeviceFamilies
[idx
];
182 sDeviceFamilies
[idx
] = new GfxDeviceFamily
;
183 GfxDeviceFamily
* deviceFamily
= sDeviceFamilies
[idx
];
186 case DeviceFamily::IntelGMA500
:
187 APPEND_DEVICE(0x8108); /* IntelGMA500_1 */
188 APPEND_DEVICE(0x8109); /* IntelGMA500_2 */
190 case DeviceFamily::IntelGMA900
:
191 APPEND_DEVICE(0x2582); /* IntelGMA900_1 */
192 APPEND_DEVICE(0x2782); /* IntelGMA900_2 */
193 APPEND_DEVICE(0x2592); /* IntelGMA900_3 */
194 APPEND_DEVICE(0x2792); /* IntelGMA900_4 */
196 case DeviceFamily::IntelGMA950
:
197 APPEND_DEVICE(0x2772); /* Intel945G_1 */
198 APPEND_DEVICE(0x2776); /* Intel945G_2 */
199 APPEND_DEVICE(0x27a2); /* Intel945_1 */
200 APPEND_DEVICE(0x27a6); /* Intel945_2 */
201 APPEND_DEVICE(0x27ae); /* Intel945_3 */
203 case DeviceFamily::IntelGMA3150
:
204 APPEND_DEVICE(0xa001); /* IntelGMA3150_Nettop_1 */
205 APPEND_DEVICE(0xa002); /* IntelGMA3150_Nettop_2 */
206 APPEND_DEVICE(0xa011); /* IntelGMA3150_Netbook_1 */
207 APPEND_DEVICE(0xa012); /* IntelGMA3150_Netbook_2 */
209 case DeviceFamily::IntelGMAX3000
:
210 APPEND_DEVICE(0x2972); /* Intel946GZ_1 */
211 APPEND_DEVICE(0x2973); /* Intel946GZ_2 */
212 APPEND_DEVICE(0x2982); /* IntelG35_1 */
213 APPEND_DEVICE(0x2983); /* IntelG35_2 */
214 APPEND_DEVICE(0x2992); /* IntelQ965_1 */
215 APPEND_DEVICE(0x2993); /* IntelQ965_2 */
216 APPEND_DEVICE(0x29a2); /* IntelG965_1 */
217 APPEND_DEVICE(0x29a3); /* IntelG965_2 */
218 APPEND_DEVICE(0x29b2); /* IntelQ35_1 */
219 APPEND_DEVICE(0x29b3); /* IntelQ35_2 */
220 APPEND_DEVICE(0x29c2); /* IntelG33_1 */
221 APPEND_DEVICE(0x29c3); /* IntelG33_2 */
222 APPEND_DEVICE(0x29d2); /* IntelQ33_1 */
223 APPEND_DEVICE(0x29d3); /* IntelQ33_2 */
224 APPEND_DEVICE(0x2a02); /* IntelGL960_1 */
225 APPEND_DEVICE(0x2a03); /* IntelGL960_2 */
226 APPEND_DEVICE(0x2a12); /* IntelGM965_1 */
227 APPEND_DEVICE(0x2a13); /* IntelGM965_2 */
229 case DeviceFamily::IntelGMAX4500HD
:
230 APPEND_DEVICE(0x2a42); /* IntelGMA4500MHD_1 */
231 APPEND_DEVICE(0x2a43); /* IntelGMA4500MHD_2 */
232 APPEND_DEVICE(0x2e42); /* IntelB43_1 */
233 APPEND_DEVICE(0x2e43); /* IntelB43_2 */
234 APPEND_DEVICE(0x2e92); /* IntelB43_3 */
235 APPEND_DEVICE(0x2e93); /* IntelB43_4 */
236 APPEND_DEVICE(0x2e32); /* IntelG41_1 */
237 APPEND_DEVICE(0x2e33); /* IntelG41_2 */
238 APPEND_DEVICE(0x2e22); /* IntelG45_1 */
239 APPEND_DEVICE(0x2e23); /* IntelG45_2 */
240 APPEND_DEVICE(0x2e12); /* IntelQ45_1 */
241 APPEND_DEVICE(0x2e13); /* IntelQ45_2 */
243 case DeviceFamily::IntelHDGraphicsToIvyBridge
:
244 APPEND_DEVICE(0x015A); /* IntelIvyBridge_GT1_1 (HD Graphics) */
246 APPEND_DEVICE(0x0152); /* IntelIvyBridge_GT1_2 (HD Graphics 2500, desktop) */
247 APPEND_DEVICE(0x0162); /* IntelIvyBridge_GT2_1 (HD Graphics 4000, desktop) */
248 APPEND_DEVICE(0x0166); /* IntelIvyBridge_GT2_2 (HD Graphics 4000, mobile) */
249 APPEND_DEVICE(0x016A); /* IntelIvyBridge_GT2_3 (HD Graphics P4000, workstation) */
252 case DeviceFamily::IntelHDGraphicsToSandyBridge
:
253 APPEND_DEVICE(0x0042); /* IntelHDGraphics */
254 APPEND_DEVICE(0x0046); /* IntelMobileHDGraphics */
255 APPEND_DEVICE(0x0102); /* IntelSandyBridge_1 */
256 APPEND_DEVICE(0x0106); /* IntelSandyBridge_2 */
257 APPEND_DEVICE(0x0112); /* IntelSandyBridge_3 */
258 APPEND_DEVICE(0x0116); /* IntelSandyBridge_4 */
259 APPEND_DEVICE(0x0122); /* IntelSandyBridge_5 */
260 APPEND_DEVICE(0x0126); /* IntelSandyBridge_6 */
261 APPEND_DEVICE(0x010a); /* IntelSandyBridge_7 */
263 case DeviceFamily::IntelHaswell
:
264 APPEND_DEVICE(0x0402); /* IntelHaswell_GT1_1 */
265 APPEND_DEVICE(0x0406); /* IntelHaswell_GT1_2 */
266 APPEND_DEVICE(0x040A); /* IntelHaswell_GT1_3 */
267 APPEND_DEVICE(0x040B); /* IntelHaswell_GT1_4 */
268 APPEND_DEVICE(0x040E); /* IntelHaswell_GT1_5 */
269 APPEND_DEVICE(0x0A02); /* IntelHaswell_GT1_6 */
270 APPEND_DEVICE(0x0A06); /* IntelHaswell_GT1_7 */
271 APPEND_DEVICE(0x0A0A); /* IntelHaswell_GT1_8 */
272 APPEND_DEVICE(0x0A0B); /* IntelHaswell_GT1_9 */
273 APPEND_DEVICE(0x0A0E); /* IntelHaswell_GT1_10 */
274 APPEND_DEVICE(0x0412); /* IntelHaswell_GT2_1 */
275 APPEND_DEVICE(0x0416); /* IntelHaswell_GT2_2 */
276 APPEND_DEVICE(0x041A); /* IntelHaswell_GT2_3 */
277 APPEND_DEVICE(0x041B); /* IntelHaswell_GT2_4 */
278 APPEND_DEVICE(0x041E); /* IntelHaswell_GT2_5 */
279 APPEND_DEVICE(0x0A12); /* IntelHaswell_GT2_6 */
280 APPEND_DEVICE(0x0A16); /* IntelHaswell_GT2_7 */
281 APPEND_DEVICE(0x0A1A); /* IntelHaswell_GT2_8 */
282 APPEND_DEVICE(0x0A1B); /* IntelHaswell_GT2_9 */
283 APPEND_DEVICE(0x0A1E); /* IntelHaswell_GT2_10 */
284 APPEND_DEVICE(0x0422); /* IntelHaswell_GT3_1 */
285 APPEND_DEVICE(0x0426); /* IntelHaswell_GT3_2 */
286 APPEND_DEVICE(0x042A); /* IntelHaswell_GT3_3 */
287 APPEND_DEVICE(0x042B); /* IntelHaswell_GT3_4 */
288 APPEND_DEVICE(0x042E); /* IntelHaswell_GT3_5 */
289 APPEND_DEVICE(0x0A22); /* IntelHaswell_GT3_6 */
290 APPEND_DEVICE(0x0A26); /* IntelHaswell_GT3_7 */
291 APPEND_DEVICE(0x0A2A); /* IntelHaswell_GT3_8 */
292 APPEND_DEVICE(0x0A2B); /* IntelHaswell_GT3_9 */
293 APPEND_DEVICE(0x0A2E); /* IntelHaswell_GT3_10 */
294 APPEND_DEVICE(0x0D22); /* IntelHaswell_GT3e_1 */
295 APPEND_DEVICE(0x0D26); /* IntelHaswell_GT3e_2 */
296 APPEND_DEVICE(0x0D2A); /* IntelHaswell_GT3e_3 */
297 APPEND_DEVICE(0x0D2B); /* IntelHaswell_GT3e_4 */
298 APPEND_DEVICE(0x0D2E); /* IntelHaswell_GT3e_5 */
300 case DeviceFamily::IntelSandyBridge
:
301 APPEND_DEVICE(0x0102);
302 APPEND_DEVICE(0x0106);
303 APPEND_DEVICE(0x010a);
304 APPEND_DEVICE(0x0112);
305 APPEND_DEVICE(0x0116);
306 APPEND_DEVICE(0x0122);
307 APPEND_DEVICE(0x0126);
309 case DeviceFamily::IntelGen7Baytrail
:
310 APPEND_DEVICE(0x0f30);
311 APPEND_DEVICE(0x0f31);
312 APPEND_DEVICE(0x0f33);
313 APPEND_DEVICE(0x0155);
314 APPEND_DEVICE(0x0157);
316 case DeviceFamily::IntelHD520
:
317 APPEND_DEVICE(0x1916);
319 case DeviceFamily::IntelMobileHDGraphics
:
320 APPEND_DEVICE(0x0046); /* IntelMobileHDGraphics */
322 case DeviceFamily::NvidiaBlockD3D9Layers
:
323 // Glitches whilst scrolling (see bugs 612007, 644787, 645872)
324 APPEND_DEVICE(0x00f3); /* NV43 [GeForce 6200 (TM)] */
325 APPEND_DEVICE(0x0146); /* NV43 [Geforce Go 6600TE/6200TE (TM)] */
326 APPEND_DEVICE(0x014f); /* NV43 [GeForce 6200 (TM)] */
327 APPEND_DEVICE(0x0161); /* NV44 [GeForce 6200 TurboCache (TM)] */
328 APPEND_DEVICE(0x0162); /* NV44 [GeForce 6200SE TurboCache (TM)] */
329 APPEND_DEVICE(0x0163); /* NV44 [GeForce 6200 LE (TM)] */
330 APPEND_DEVICE(0x0164); /* NV44 [GeForce Go 6200 (TM)] */
331 APPEND_DEVICE(0x0167); /* NV43 [GeForce Go 6200/6400 (TM)] */
332 APPEND_DEVICE(0x0168); /* NV43 [GeForce Go 6200/6400 (TM)] */
333 APPEND_DEVICE(0x0169); /* NV44 [GeForce 6250 (TM)] */
334 APPEND_DEVICE(0x0222); /* NV44 [GeForce 6200 A-LE (TM)] */
335 APPEND_DEVICE(0x0240); /* C51PV [GeForce 6150 (TM)] */
336 APPEND_DEVICE(0x0241); /* C51 [GeForce 6150 LE (TM)] */
337 APPEND_DEVICE(0x0244); /* C51 [Geforce Go 6150 (TM)] */
338 APPEND_DEVICE(0x0245); /* C51 [Quadro NVS 210S/GeForce 6150LE (TM)] */
339 APPEND_DEVICE(0x0247); /* C51 [GeForce Go 6100 (TM)] */
340 APPEND_DEVICE(0x03d0); /* C61 [GeForce 6150SE nForce 430 (TM)] */
341 APPEND_DEVICE(0x03d1); /* C61 [GeForce 6100 nForce 405 (TM)] */
342 APPEND_DEVICE(0x03d2); /* C61 [GeForce 6100 nForce 400 (TM)] */
343 APPEND_DEVICE(0x03d5); /* C61 [GeForce 6100 nForce 420 (TM)] */
345 case DeviceFamily::RadeonX1000
:
346 // This list is from the ATIRadeonX1000.kext Info.plist
347 APPEND_DEVICE(0x7187);
348 APPEND_DEVICE(0x7210);
349 APPEND_DEVICE(0x71de);
350 APPEND_DEVICE(0x7146);
351 APPEND_DEVICE(0x7142);
352 APPEND_DEVICE(0x7109);
353 APPEND_DEVICE(0x71c5);
354 APPEND_DEVICE(0x71c0);
355 APPEND_DEVICE(0x7240);
356 APPEND_DEVICE(0x7249);
357 APPEND_DEVICE(0x7291);
359 case DeviceFamily::RadeonCaicos
:
360 APPEND_DEVICE(0x6766);
361 APPEND_DEVICE(0x6767);
362 APPEND_DEVICE(0x6768);
363 APPEND_DEVICE(0x6770);
364 APPEND_DEVICE(0x6771);
365 APPEND_DEVICE(0x6772);
366 APPEND_DEVICE(0x6778);
367 APPEND_DEVICE(0x6779);
368 APPEND_DEVICE(0x677b);
370 case DeviceFamily::Geforce7300GT
:
371 APPEND_DEVICE(0x0393);
373 case DeviceFamily::Nvidia310M
:
374 APPEND_DEVICE(0x0A70);
376 case DeviceFamily::Nvidia8800GTS
:
377 APPEND_DEVICE(0x0193);
379 case DeviceFamily::Bug1137716
:
380 APPEND_DEVICE(0x0a29);
381 APPEND_DEVICE(0x0a2b);
382 APPEND_DEVICE(0x0a2d);
383 APPEND_DEVICE(0x0a35);
384 APPEND_DEVICE(0x0a6c);
385 APPEND_DEVICE(0x0a70);
386 APPEND_DEVICE(0x0a72);
387 APPEND_DEVICE(0x0a7a);
388 APPEND_DEVICE(0x0caf);
389 APPEND_DEVICE(0x0dd2);
390 APPEND_DEVICE(0x0dd3);
392 APPEND_DEVICE(0x0de3);
393 APPEND_DEVICE(0x0de8);
394 APPEND_DEVICE(0x0de9);
395 APPEND_DEVICE(0x0dea);
396 APPEND_DEVICE(0x0deb);
397 APPEND_DEVICE(0x0dec);
398 APPEND_DEVICE(0x0ded);
399 APPEND_DEVICE(0x0dee);
400 APPEND_DEVICE(0x0def);
401 APPEND_DEVICE(0x0df0);
402 APPEND_DEVICE(0x0df1);
403 APPEND_DEVICE(0x0df2);
404 APPEND_DEVICE(0x0df3);
405 APPEND_DEVICE(0x0df4);
406 APPEND_DEVICE(0x0df5);
407 APPEND_DEVICE(0x0df6);
408 APPEND_DEVICE(0x0df7);
409 APPEND_DEVICE(0x1050);
410 APPEND_DEVICE(0x1051);
411 APPEND_DEVICE(0x1052);
412 APPEND_DEVICE(0x1054);
413 APPEND_DEVICE(0x1055);
415 case DeviceFamily::Bug1116812
:
416 APPEND_DEVICE(0x2e32);
417 APPEND_DEVICE(0x2a02);
419 case DeviceFamily::Bug1155608
:
420 APPEND_DEVICE(0x2e22); /* IntelG45_1 */
422 case DeviceFamily::Bug1447141
:
423 APPEND_DEVICE(0x9991);
424 APPEND_DEVICE(0x9993);
425 APPEND_DEVICE(0x9996);
426 APPEND_DEVICE(0x9998);
427 APPEND_DEVICE(0x9901);
428 APPEND_DEVICE(0x990b);
430 case DeviceFamily::Bug1207665
:
431 APPEND_DEVICE(0xa001); /* Intel Media Accelerator 3150 */
432 APPEND_DEVICE(0xa002);
433 APPEND_DEVICE(0xa011);
434 APPEND_DEVICE(0xa012);
436 case DeviceFamily::AmdR600
:
437 // AMD R600 generation GPUs
439 APPEND_RANGE(0x9400, 0x9403);
440 APPEND_DEVICE(0x9405);
441 APPEND_RANGE(0x940a, 0x940b);
442 APPEND_DEVICE(0x940f);
444 APPEND_RANGE(0x94c0, 0x94c1);
445 APPEND_RANGE(0x94c3, 0x94c9);
446 APPEND_RANGE(0x94cb, 0x94cd);
448 APPEND_RANGE(0x9580, 0x9581);
449 APPEND_DEVICE(0x9583);
450 APPEND_RANGE(0x9586, 0x958f);
452 APPEND_RANGE(0x9500, 0x9501);
453 APPEND_RANGE(0x9504, 0x9509);
454 APPEND_DEVICE(0x950f);
455 APPEND_DEVICE(0x9511);
456 APPEND_DEVICE(0x9515);
457 APPEND_DEVICE(0x9517);
458 APPEND_DEVICE(0x9519);
460 APPEND_DEVICE(0x95c0);
461 APPEND_DEVICE(0x95c2);
462 APPEND_RANGE(0x95c4, 0x95c7);
463 APPEND_DEVICE(0x95c9);
464 APPEND_RANGE(0x95cc, 0x95cf);
466 APPEND_RANGE(0x9590, 0x9591);
467 APPEND_DEVICE(0x9593);
468 APPEND_RANGE(0x9595, 0x9599);
469 APPEND_DEVICE(0x959b);
471 APPEND_RANGE(0x9610, 0x9616);
473 APPEND_RANGE(0x9710, 0x9715);
475 case DeviceFamily::NvidiaWebRenderBlocked
:
476 APPEND_RANGE(0x0190, 0x019e); // early tesla
477 APPEND_RANGE(0x0500, 0x05df); // C67-C68
479 case DeviceFamily::NvidiaRolloutWebRender
:
480 APPEND_RANGE(0x0400, 0x04ff);
481 APPEND_RANGE(0x05e0, 0x05ff);
482 APPEND_RANGE(0x0600, INT32_MAX
);
483 APPEND_RANGE(0x06c0, INT32_MAX
);
485 case DeviceFamily::IntelWebRenderBlocked
:
488 APPEND_DEVICE(0x2e5b);
489 APPEND_DEVICE(0x8108);
490 APPEND_DEVICE(0x8109);
491 APPEND_DEVICE(0x4102);
493 APPEND_DEVICE(0x0be0);
494 APPEND_DEVICE(0x0be1);
495 APPEND_DEVICE(0x0be3);
496 APPEND_RANGE(0x08c7, 0x08cf);
499 APPEND_DEVICE(0x2972);
500 APPEND_DEVICE(0x2973);
501 APPEND_DEVICE(0x2992);
502 APPEND_DEVICE(0x2993);
503 APPEND_DEVICE(0x29a2);
504 APPEND_DEVICE(0x29a3);
506 APPEND_DEVICE(0x2982);
507 APPEND_DEVICE(0x2983);
509 APPEND_DEVICE(0x2a02);
510 APPEND_DEVICE(0x2a03);
511 APPEND_DEVICE(0x2a12);
512 APPEND_DEVICE(0x2a13);
515 APPEND_DEVICE(0x2e02);
516 APPEND_DEVICE(0x2e42); /* IntelB43_1 */
517 APPEND_DEVICE(0x2e43); /* IntelB43_2 */
518 APPEND_DEVICE(0x2e92); /* IntelB43_3 */
519 APPEND_DEVICE(0x2e93); /* IntelB43_4 */
520 APPEND_DEVICE(0x2e12); /* IntelQ45_1 */
521 APPEND_DEVICE(0x2e13); /* IntelQ45_2 */
522 APPEND_DEVICE(0x2e32); /* IntelG41_1 */
523 APPEND_DEVICE(0x2e33); /* IntelG41_2 */
524 APPEND_DEVICE(0x2e22); /* IntelG45_1 */
526 APPEND_DEVICE(0x2e23); /* IntelG45_2 */
527 APPEND_DEVICE(0x2a42); /* IntelGMA4500MHD_1 */
528 APPEND_DEVICE(0x2a43); /* IntelGMA4500MHD_2 */
531 APPEND_DEVICE(0x0042);
532 APPEND_DEVICE(0x0046);
534 case DeviceFamily::IntelRolloutWebRender
:
535 // Disable WebRender on these devices for now
536 // to match what's going out into release
539 APPEND_DEVICE(0x2e22);
542 APPEND_DEVICE(0x0042);
543 APPEND_DEVICE(0x0046);
547 APPEND_DEVICE(0x22b0);
548 APPEND_DEVICE(0x22b1);
549 APPEND_DEVICE(0x22b2);
550 APPEND_DEVICE(0x22b3);
553 case DeviceFamily::IntelModernRolloutWebRender
:
554 // Temporarily disable WebRender on gen6 to get more sw-wr+D3D11 testing
555 #ifndef NIGHTLY_BUILD
556 // sandybridge gen6 gt1
557 APPEND_DEVICE(0x0102);
558 APPEND_DEVICE(0x0106);
559 APPEND_DEVICE(0x010a);
561 // sandybridge gen6 gt2
562 APPEND_DEVICE(0x0112);
563 APPEND_DEVICE(0x0116);
564 APPEND_DEVICE(0x0122);
565 APPEND_DEVICE(0x0126);
568 // ivybridge gen7 baytrail
569 APPEND_DEVICE(0x0f30);
570 APPEND_DEVICE(0x0f31);
571 APPEND_DEVICE(0x0f33);
572 APPEND_DEVICE(0x0155);
573 APPEND_DEVICE(0x0157);
575 // ivybridge gen7 gt1
576 APPEND_DEVICE(0x0152);
577 APPEND_DEVICE(0x0156);
578 APPEND_DEVICE(0x015a);
580 // ivybridge gen7 gt2
581 APPEND_DEVICE(0x0162);
582 APPEND_DEVICE(0x0166);
583 APPEND_DEVICE(0x016a);
585 // haswell gen7.5 gt1
586 APPEND_DEVICE(0x0402);
587 APPEND_DEVICE(0x0406);
588 APPEND_DEVICE(0x040a);
589 APPEND_DEVICE(0x040b);
590 APPEND_DEVICE(0x040e);
591 APPEND_DEVICE(0x0a02);
592 APPEND_DEVICE(0x0a06);
593 APPEND_DEVICE(0x0a0a);
594 APPEND_DEVICE(0x0a0b);
595 APPEND_DEVICE(0x0a0e);
596 APPEND_DEVICE(0x0c02);
597 APPEND_DEVICE(0x0c06);
598 APPEND_DEVICE(0x0c0c);
599 APPEND_DEVICE(0x0c0b);
600 APPEND_DEVICE(0x0c0e);
601 APPEND_DEVICE(0x0d02);
602 APPEND_DEVICE(0x0d06);
603 APPEND_DEVICE(0x0d0a);
604 APPEND_DEVICE(0x0d0b);
605 APPEND_DEVICE(0x0d0e);
607 // haswell gen7.5 gt2
608 APPEND_DEVICE(0x0412);
609 APPEND_DEVICE(0x0416);
610 APPEND_DEVICE(0x041a);
611 APPEND_DEVICE(0x041b);
612 APPEND_DEVICE(0x041e);
613 APPEND_DEVICE(0x0a12);
614 APPEND_DEVICE(0x0a16);
615 APPEND_DEVICE(0x0a1a);
616 APPEND_DEVICE(0x0a1b);
617 APPEND_DEVICE(0x0a1e);
619 // haswell gen7.5 gt3
620 APPEND_DEVICE(0x0422);
621 APPEND_DEVICE(0x0426);
622 APPEND_DEVICE(0x042a);
623 APPEND_DEVICE(0x042b);
624 APPEND_DEVICE(0x042e);
625 APPEND_DEVICE(0x0a22);
626 APPEND_DEVICE(0x0a26);
627 APPEND_DEVICE(0x0a0a);
628 APPEND_DEVICE(0x0a1a);
629 APPEND_DEVICE(0x0a2a);
630 APPEND_DEVICE(0x0a2b);
631 APPEND_DEVICE(0x0a2e);
632 APPEND_DEVICE(0x0c22);
633 APPEND_DEVICE(0x0c26);
634 APPEND_DEVICE(0x0c2c);
635 APPEND_DEVICE(0x0c2b);
636 APPEND_DEVICE(0x0c2e);
637 APPEND_DEVICE(0x0d22);
638 APPEND_DEVICE(0x0d26);
639 APPEND_DEVICE(0x0d2b);
640 APPEND_DEVICE(0x0d2e);
642 // broxton (apollolake)
643 APPEND_DEVICE(0x0a84);
644 APPEND_DEVICE(0x1a84);
645 APPEND_DEVICE(0x1a85);
646 APPEND_DEVICE(0x5a84);
647 APPEND_DEVICE(0x5a85);
650 APPEND_DEVICE(0x3184);
651 APPEND_DEVICE(0x3185);
653 // broadwell gt1 (gen8)
654 APPEND_DEVICE(0x1602);
655 APPEND_DEVICE(0x1606);
656 APPEND_DEVICE(0x160a);
657 APPEND_DEVICE(0x160b);
658 APPEND_DEVICE(0x160d);
659 APPEND_DEVICE(0x160e);
661 // broadwell gt2+ (gen8)
662 APPEND_DEVICE(0x1612);
663 APPEND_DEVICE(0x1616);
664 APPEND_DEVICE(0x161a);
665 APPEND_DEVICE(0x161b);
666 APPEND_DEVICE(0x161d);
667 APPEND_DEVICE(0x161e);
668 APPEND_DEVICE(0x1622);
669 APPEND_DEVICE(0x1626);
670 APPEND_DEVICE(0x162a);
671 APPEND_DEVICE(0x162b);
672 APPEND_DEVICE(0x162d);
673 APPEND_DEVICE(0x162e);
674 APPEND_DEVICE(0x1632);
675 APPEND_DEVICE(0x1636);
676 APPEND_DEVICE(0x163a);
677 APPEND_DEVICE(0x163b);
678 APPEND_DEVICE(0x163d);
679 APPEND_DEVICE(0x163e);
682 APPEND_DEVICE(0x1902);
683 APPEND_DEVICE(0x1906);
684 APPEND_DEVICE(0x190a);
685 APPEND_DEVICE(0x190e);
688 APPEND_DEVICE(0x1912);
689 APPEND_DEVICE(0x1913);
690 APPEND_DEVICE(0x1915);
691 APPEND_DEVICE(0x1916);
692 APPEND_DEVICE(0x1917);
693 APPEND_DEVICE(0x191a);
694 APPEND_DEVICE(0x191b);
695 APPEND_DEVICE(0x191d);
696 APPEND_DEVICE(0x191e);
697 APPEND_DEVICE(0x1921);
700 APPEND_DEVICE(0x1923);
701 APPEND_DEVICE(0x1926);
702 APPEND_DEVICE(0x1927);
703 APPEND_DEVICE(0x192b);
706 APPEND_DEVICE(0x1932);
707 APPEND_DEVICE(0x193a);
708 APPEND_DEVICE(0x193b);
709 APPEND_DEVICE(0x193d);
712 APPEND_DEVICE(0x5902);
713 APPEND_DEVICE(0x5906);
714 APPEND_DEVICE(0x5908);
715 APPEND_DEVICE(0x590a);
716 APPEND_DEVICE(0x590b);
717 APPEND_DEVICE(0x590e);
720 APPEND_DEVICE(0x5913);
721 APPEND_DEVICE(0x5915);
722 APPEND_DEVICE(0x5917);
725 APPEND_DEVICE(0x5912);
726 APPEND_DEVICE(0x5916);
727 APPEND_DEVICE(0x591a);
728 APPEND_DEVICE(0x591b);
729 APPEND_DEVICE(0x591c);
730 APPEND_DEVICE(0x591d);
731 APPEND_DEVICE(0x591e);
732 APPEND_DEVICE(0x5921);
733 APPEND_DEVICE(0x5926);
734 APPEND_DEVICE(0x5923);
735 APPEND_DEVICE(0x5927);
736 APPEND_DEVICE(0x593b);
737 APPEND_DEVICE(0x87c0);
740 APPEND_DEVICE(0x3e90);
741 APPEND_DEVICE(0x3e93);
742 APPEND_DEVICE(0x3e99);
743 APPEND_DEVICE(0x3e9c);
744 APPEND_DEVICE(0x3ea1);
745 APPEND_DEVICE(0x3ea4);
746 APPEND_DEVICE(0x9b21);
747 APPEND_DEVICE(0x9ba0);
748 APPEND_DEVICE(0x9ba2);
749 APPEND_DEVICE(0x9ba4);
750 APPEND_DEVICE(0x9ba5);
751 APPEND_DEVICE(0x9ba8);
752 APPEND_DEVICE(0x9baa);
753 APPEND_DEVICE(0x9bab);
754 APPEND_DEVICE(0x9bac);
757 APPEND_RANGE(0x3e91, 0x3e92);
758 APPEND_DEVICE(0x3e94);
759 APPEND_DEVICE(0x3e96);
760 APPEND_DEVICE(0x3e98);
761 APPEND_RANGE(0x3e9a, 0x3e9b);
762 APPEND_DEVICE(0x3ea0);
763 APPEND_DEVICE(0x3ea2);
764 APPEND_RANGE(0x3ea5, 0x3ea9);
765 APPEND_DEVICE(0x87ca);
766 APPEND_DEVICE(0x9b41);
767 APPEND_DEVICE(0x9bc0);
768 APPEND_DEVICE(0x9bc2);
769 APPEND_RANGE(0x9bc4, 0x9bf6);
771 // icelake gt1,gt1.5,gt2
772 APPEND_RANGE(0x8a50, 0x8a5d);
775 APPEND_RANGE(0x4c8a, 0x4c9a);
778 APPEND_RANGE(0x9a40, 0x9af8);
780 case DeviceFamily::AtiRolloutWebRender
:
781 APPEND_RANGE(0x6600, 0x66af);
782 APPEND_RANGE(0x6700, 0x671f);
783 APPEND_RANGE(0x6780, 0x683f);
784 APPEND_RANGE(0x6860, 0x687f);
785 APPEND_RANGE(0x6900, 0x69ff);
786 APPEND_DEVICE(0x6fdf);
787 APPEND_DEVICE(0x7300);
788 APPEND_RANGE(0x7310, 0x73ff);
789 APPEND_RANGE(0x9830, 0x986f);
790 APPEND_RANGE(0x9900, 0x99ff);
792 APPEND_DEVICE(0x15dd);
793 APPEND_DEVICE(0x15d8);
795 APPEND_DEVICE(0x1636);
797 APPEND_DEVICE(0x1638);
799 APPEND_DEVICE(0x164c);
802 APPEND_RANGE(0x6840, 0x684b);
803 APPEND_RANGE(0x6850, 0x685f);
804 APPEND_RANGE(0x6880, 0x68ff);
805 APPEND_RANGE(0x9800, 0x980a);
806 APPEND_RANGE(0x9640, 0x964f);
807 APPEND_RANGE(0x6720, 0x677f);
810 APPEND_DEVICE(0x98e4);
813 APPEND_RANGE(0x9870, 0x9877);
816 APPEND_RANGE(0x1304, 0x131d);
819 APPEND_RANGE(0x9440, 0x949f);
820 APPEND_RANGE(0x94a0, 0x94b9);
821 APPEND_RANGE(0x9540, 0x955f);
824 // This should never happen, but we get a warning if we don't handle this.
825 case DeviceFamily::Max
:
826 case DeviceFamily::All
:
827 case DeviceFamily::IntelAll
:
828 case DeviceFamily::NvidiaAll
:
829 case DeviceFamily::AtiAll
:
830 case DeviceFamily::MicrosoftAll
:
831 case DeviceFamily::ParallelsAll
:
832 case DeviceFamily::QualcommAll
:
833 case DeviceFamily::AppleAll
:
834 case DeviceFamily::AmazonAll
:
835 NS_WARNING("Invalid DeviceFamily id");
842 // Macro for assigning a desktop environment to a string.
843 #define DECLARE_DESKTOP_ENVIRONMENT_ID(name, desktopEnvId) \
844 case DesktopEnvironment::name: \
845 sDesktopEnvironment[idx]->AssignLiteral(desktopEnvId); \
848 const nsAString
& GfxDriverInfo::GetDesktopEnvironment(DesktopEnvironment id
) {
849 if (id
>= DesktopEnvironment::Max
) {
850 MOZ_ASSERT_UNREACHABLE("DesktopEnvironment id is out of range");
851 id
= DesktopEnvironment::All
;
854 auto idx
= static_cast<size_t>(id
);
855 if (sDesktopEnvironment
[idx
]) {
856 return *sDesktopEnvironment
[idx
];
859 sDesktopEnvironment
[idx
] = new nsString();
862 DECLARE_DESKTOP_ENVIRONMENT_ID(GNOME
, "gnome");
863 DECLARE_DESKTOP_ENVIRONMENT_ID(KDE
, "kde");
864 DECLARE_DESKTOP_ENVIRONMENT_ID(XFCE
, "xfce");
865 DECLARE_DESKTOP_ENVIRONMENT_ID(Cinnamon
, "cinnamon");
866 DECLARE_DESKTOP_ENVIRONMENT_ID(Enlightenment
, "enlightment");
867 DECLARE_DESKTOP_ENVIRONMENT_ID(LXDE
, "lxde");
868 DECLARE_DESKTOP_ENVIRONMENT_ID(Openbox
, "openbox");
869 DECLARE_DESKTOP_ENVIRONMENT_ID(i3
, "i3");
870 DECLARE_DESKTOP_ENVIRONMENT_ID(Sway
, "sway");
871 DECLARE_DESKTOP_ENVIRONMENT_ID(Mate
, "mate");
872 DECLARE_DESKTOP_ENVIRONMENT_ID(Unity
, "unity");
873 DECLARE_DESKTOP_ENVIRONMENT_ID(Pantheon
, "pantheon");
874 DECLARE_DESKTOP_ENVIRONMENT_ID(LXQT
, "lxqt");
875 DECLARE_DESKTOP_ENVIRONMENT_ID(Deepin
, "deepin");
876 DECLARE_DESKTOP_ENVIRONMENT_ID(Dwm
, "dwm");
877 DECLARE_DESKTOP_ENVIRONMENT_ID(Budgie
, "budgie");
878 DECLARE_DESKTOP_ENVIRONMENT_ID(Unknown
, "unknown");
879 case DesktopEnvironment::Max
: // Suppress a warning.
880 DECLARE_DESKTOP_ENVIRONMENT_ID(All
, "");
883 return *sDesktopEnvironment
[idx
];
886 // Macro for assigning a window protocol id to a string.
887 #define DECLARE_WINDOW_PROTOCOL_ID(name, windowProtocolId) \
888 case WindowProtocol::name: \
889 sWindowProtocol[idx]->AssignLiteral(windowProtocolId); \
892 const nsAString
& GfxDriverInfo::GetWindowProtocol(WindowProtocol id
) {
893 if (id
>= WindowProtocol::Max
) {
894 MOZ_ASSERT_UNREACHABLE("WindowProtocol id is out of range");
895 id
= WindowProtocol::All
;
898 auto idx
= static_cast<size_t>(id
);
899 if (sWindowProtocol
[idx
]) {
900 return *sWindowProtocol
[idx
];
903 sWindowProtocol
[idx
] = new nsString();
906 DECLARE_WINDOW_PROTOCOL_ID(X11
, "x11");
907 DECLARE_WINDOW_PROTOCOL_ID(XWayland
, "xwayland");
908 DECLARE_WINDOW_PROTOCOL_ID(Wayland
, "wayland");
909 DECLARE_WINDOW_PROTOCOL_ID(WaylandDRM
, "wayland/drm");
910 DECLARE_WINDOW_PROTOCOL_ID(WaylandAll
, "wayland/all");
911 DECLARE_WINDOW_PROTOCOL_ID(X11All
, "x11/all");
912 case WindowProtocol::Max
: // Suppress a warning.
913 DECLARE_WINDOW_PROTOCOL_ID(All
, "");
916 return *sWindowProtocol
[idx
];
919 // Macro for assigning a device vendor id to a string.
920 #define DECLARE_VENDOR_ID(name, deviceId) \
921 case DeviceVendor::name: \
922 sDeviceVendors[idx]->AssignLiteral(deviceId); \
925 const nsAString
& GfxDriverInfo::GetDeviceVendor(DeviceFamily id
) {
926 if (id
>= DeviceFamily::Max
) {
927 MOZ_ASSERT_UNREACHABLE("DeviceVendor id is out of range");
928 id
= DeviceFamily::All
;
931 DeviceVendor vendor
= DeviceVendor::All
;
933 case DeviceFamily::IntelAll
:
934 case DeviceFamily::IntelGMA500
:
935 case DeviceFamily::IntelGMA900
:
936 case DeviceFamily::IntelGMA950
:
937 case DeviceFamily::IntelGMA3150
:
938 case DeviceFamily::IntelGMAX3000
:
939 case DeviceFamily::IntelGMAX4500HD
:
940 case DeviceFamily::IntelHDGraphicsToIvyBridge
:
941 case DeviceFamily::IntelHDGraphicsToSandyBridge
:
942 case DeviceFamily::IntelHaswell
:
943 case DeviceFamily::IntelSandyBridge
:
944 case DeviceFamily::IntelGen7Baytrail
:
945 case DeviceFamily::IntelHD520
:
946 case DeviceFamily::IntelMobileHDGraphics
:
947 case DeviceFamily::IntelRolloutWebRender
:
948 case DeviceFamily::IntelModernRolloutWebRender
:
949 case DeviceFamily::IntelWebRenderBlocked
:
950 case DeviceFamily::Bug1116812
:
951 case DeviceFamily::Bug1155608
:
952 case DeviceFamily::Bug1207665
:
953 vendor
= DeviceVendor::Intel
;
955 case DeviceFamily::NvidiaAll
:
956 case DeviceFamily::NvidiaBlockD3D9Layers
:
957 case DeviceFamily::NvidiaRolloutWebRender
:
958 case DeviceFamily::NvidiaWebRenderBlocked
:
959 case DeviceFamily::Geforce7300GT
:
960 case DeviceFamily::Nvidia310M
:
961 case DeviceFamily::Nvidia8800GTS
:
962 case DeviceFamily::Bug1137716
:
963 vendor
= DeviceVendor::NVIDIA
;
965 case DeviceFamily::AtiAll
:
966 case DeviceFamily::RadeonCaicos
:
967 case DeviceFamily::RadeonX1000
:
968 case DeviceFamily::Bug1447141
:
969 case DeviceFamily::AmdR600
:
970 case DeviceFamily::AtiRolloutWebRender
:
971 vendor
= DeviceVendor::ATI
;
973 case DeviceFamily::MicrosoftAll
:
974 vendor
= DeviceVendor::Microsoft
;
976 case DeviceFamily::ParallelsAll
:
977 vendor
= DeviceVendor::Parallels
;
979 case DeviceFamily::AppleAll
:
980 vendor
= DeviceVendor::Apple
;
982 case DeviceFamily::AmazonAll
:
983 vendor
= DeviceVendor::Amazon
;
985 case DeviceFamily::QualcommAll
:
986 // Choose an arbitrary Qualcomm PCI VENdor ID for now.
987 // TODO: This should be "QCOM" when Windows device ID parsing is reworked.
988 vendor
= DeviceVendor::Qualcomm
;
990 case DeviceFamily::All
:
991 case DeviceFamily::Max
:
995 return GetDeviceVendor(vendor
);
998 const nsAString
& GfxDriverInfo::GetDeviceVendor(DeviceVendor id
) {
999 if (id
>= DeviceVendor::Max
) {
1000 MOZ_ASSERT_UNREACHABLE("DeviceVendor id is out of range");
1001 id
= DeviceVendor::All
;
1004 auto idx
= static_cast<size_t>(id
);
1005 if (sDeviceVendors
[idx
]) {
1006 return *sDeviceVendors
[idx
];
1009 sDeviceVendors
[idx
] = new nsString();
1012 DECLARE_VENDOR_ID(Intel
, "0x8086");
1013 DECLARE_VENDOR_ID(NVIDIA
, "0x10de");
1014 DECLARE_VENDOR_ID(ATI
, "0x1002");
1015 // AMD has 0x1022 but continues to release GPU hardware under ATI.
1016 DECLARE_VENDOR_ID(Microsoft
, "0x1414");
1017 DECLARE_VENDOR_ID(MicrosoftBasic
, "0x00ba");
1018 DECLARE_VENDOR_ID(MicrosoftHyperV
, "0x000b");
1019 DECLARE_VENDOR_ID(Parallels
, "0x1ab8");
1020 DECLARE_VENDOR_ID(VMWare
, "0x15ad");
1021 DECLARE_VENDOR_ID(VirtualBox
, "0x80ee");
1022 DECLARE_VENDOR_ID(Apple
, "0x106b");
1023 DECLARE_VENDOR_ID(Amazon
, "0x1d0f");
1024 // Choose an arbitrary Qualcomm PCI VENdor ID for now.
1025 // TODO: This should be "QCOM" when Windows device ID parsing is reworked.
1026 DECLARE_VENDOR_ID(Qualcomm
, "0x5143");
1027 case DeviceVendor::Max
: // Suppress a warning.
1028 DECLARE_VENDOR_ID(All
, "");
1031 return *sDeviceVendors
[idx
];
1034 // Macro for assigning a driver vendor id to a string.
1035 #define DECLARE_DRIVER_VENDOR_ID(name, driverVendorId) \
1036 case DriverVendor::name: \
1037 sDriverVendors[idx]->AssignLiteral(driverVendorId); \
1040 const nsAString
& GfxDriverInfo::GetDriverVendor(DriverVendor id
) {
1041 if (id
>= DriverVendor::Max
) {
1042 MOZ_ASSERT_UNREACHABLE("DriverVendor id is out of range");
1043 id
= DriverVendor::All
;
1046 auto idx
= static_cast<size_t>(id
);
1047 if (sDriverVendors
[idx
]) {
1048 return *sDriverVendors
[idx
];
1051 sDriverVendors
[idx
] = new nsString();
1054 DECLARE_DRIVER_VENDOR_ID(MesaAll
, "mesa/all");
1055 DECLARE_DRIVER_VENDOR_ID(MesaLLVMPipe
, "mesa/llvmpipe");
1056 DECLARE_DRIVER_VENDOR_ID(MesaSoftPipe
, "mesa/softpipe");
1057 DECLARE_DRIVER_VENDOR_ID(MesaSWRast
, "mesa/swrast");
1058 DECLARE_DRIVER_VENDOR_ID(MesaSWUnknown
, "mesa/software-unknown");
1059 DECLARE_DRIVER_VENDOR_ID(MesaUnknown
, "mesa/unknown");
1060 DECLARE_DRIVER_VENDOR_ID(MesaR600
, "mesa/r600");
1061 DECLARE_DRIVER_VENDOR_ID(MesaNouveau
, "mesa/nouveau");
1062 DECLARE_DRIVER_VENDOR_ID(NonMesaAll
, "non-mesa/all");
1063 DECLARE_DRIVER_VENDOR_ID(HardwareMesaAll
, "mesa/hw-all");
1064 DECLARE_DRIVER_VENDOR_ID(SoftwareMesaAll
, "mesa/sw-all");
1065 case DriverVendor::Max
: // Suppress a warning.
1066 DECLARE_DRIVER_VENDOR_ID(All
, "");
1069 return *sDriverVendors
[idx
];