1 /*
2  * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 #ifndef D3DBADHARDWARE_H
27 #define D3DBADHARDWARE_H
28 
29 #include "D3DPipeline.h"
30 #include "D3DPipelineManager.h"
31 
32 typedef struct ADAPTER_INFO {
33   DWORD    VendorId;
34   DWORD    DeviceId;
35   LONGLONG DriverVersion; // minimum driver version to pass, or NO_VERSION
36   USHORT   OsInfo;        // OSes where the DriverVersion is relevant or, OS_ALL
37 } ADAPTER_INFO;
38 
39 // this DeviceId means that all vendor boards are to be excluded
40 #define ALL_DEVICEIDS (0xffffffff)
41 
42 #define D_VERSION(H1, H2, L1, L2) \
43   (((LONGLONG)((H1 << 16) | H2) << 32) | ((L1 << 16) | (L2)))
44 
45 // this driver version is used to pass the driver version check
46 // as it is always greater than any driver version
47 #define MAX_VERSION D_VERSION(0x7fff, 0x7fff, 0x7fff, 0x7fff)
48 // this DriverVersion means that the version of the driver doesn't matter,
49 // all versions must fail ("there's no version of the driver that passes")
50 #define NO_VERSION D_VERSION(0xffff, 0xffff, 0xffff, 0xffff)
51 
52 static const ADAPTER_INFO badHardware[] = {
53 
54     // All Intel Chips.
55     { 0x8086, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
56 
57     // ATI Mobility Radeon X1600, X1400, X1450, X1300, X1350
58     // Reason: workaround for 6613066, 6687166
59     // X1300 (four sub ids)
60     { 0x1002, 0x714A, D_VERSION(6,14,10,6706), OS_WINXP },
61     { 0x1002, 0x714A, D_VERSION(7,14,10,0567), OS_VISTA },
62     { 0x1002, 0x7149, D_VERSION(6,14,10,6706), OS_WINXP },
63     { 0x1002, 0x7149, D_VERSION(7,14,10,0567), OS_VISTA },
64     { 0x1002, 0x714B, D_VERSION(6,14,10,6706), OS_WINXP },
65     { 0x1002, 0x714B, D_VERSION(7,14,10,0567), OS_VISTA },
66     { 0x1002, 0x714C, D_VERSION(6,14,10,6706), OS_WINXP },
67     { 0x1002, 0x714C, D_VERSION(7,14,10,0567), OS_VISTA },
68     // X1350 (three sub ids)
69     { 0x1002, 0x718B, D_VERSION(6,14,10,6706), OS_WINXP },
70     { 0x1002, 0x718B, D_VERSION(7,14,10,0567), OS_VISTA },
71     { 0x1002, 0x718C, D_VERSION(6,14,10,6706), OS_WINXP },
72     { 0x1002, 0x718C, D_VERSION(7,14,10,0567), OS_VISTA },
73     { 0x1002, 0x7196, D_VERSION(6,14,10,6706), OS_WINXP },
74     { 0x1002, 0x7196, D_VERSION(7,14,10,0567), OS_VISTA },
75     // X1400
76     { 0x1002, 0x7145, D_VERSION(6,14,10,6706), OS_WINXP },
77     { 0x1002, 0x7145, D_VERSION(7,14,10,0567), OS_VISTA },
78     // X1450 (two sub ids)
79     { 0x1002, 0x7186, D_VERSION(6,14,10,6706), OS_WINXP },
80     { 0x1002, 0x7186, D_VERSION(7,14,10,0567), OS_VISTA },
81     { 0x1002, 0x718D, D_VERSION(6,14,10,6706), OS_WINXP },
82     { 0x1002, 0x718D, D_VERSION(7,14,10,0567), OS_VISTA },
83     // X1600
84     { 0x1002, 0x71C5, D_VERSION(6,14,10,6706), OS_WINXP },
85     { 0x1002, 0x71C5, D_VERSION(7,14,10,0567), OS_VISTA },
86 
87     // ATI Mobility Radeon 9700
88     // Reason: workaround for 6773336
89     { 0x1002, 0x4E50, D_VERSION(6,14,10,6561), OS_WINXP },
90 
91     // Nvidia FX 5200
92     // Reason: workaround for 6717988
93     { 0x10DE, 0x0322, D_VERSION(6,14,11,6921), OS_WINXP },
94 
95     // Nvidia FX Go5600, Go5700
96     // Reason: workaround for 6714579
97     { 0x10DE, 0x031A, D_VERSION(6,14,11,6921), OS_WINXP },
98     { 0x10DE, 0x0347, D_VERSION(6,14,11,6921), OS_WINXP },
99 
100     // Nvidia Quadro NVS 110M
101     // Reason: workaround for 6629891
102     { 0x10DE, 0x01D7, D_VERSION(6,14,11,5665), OS_WINXP },
103 
104     // Nvidia Quadro PCI-E series
105     // Reason: workaround for 6653860
106     { 0x10DE, 0x00FD, D_VERSION(6,14,10,6573), OS_WINXP },
107 
108     // Nvidia Quadro FX family
109     // Reason: workaround for 6772137
110     { 0x10DE, 0x00F8, D_VERSION(6,14,10,9381), OS_WINXP },
111     { 0x10DE, 0x009D, D_VERSION(6,14,10,9381), OS_WINXP },
112     { 0x10DE, 0x029C, D_VERSION(6,14,10,9381), OS_WINXP },
113     { 0x10DE, 0x029D, D_VERSION(6,14,10,9381), OS_WINXP },
114     { 0x10DE, 0x029E, D_VERSION(6,14,10,9381), OS_WINXP },
115     { 0x10DE, 0x029F, D_VERSION(6,14,10,9381), OS_WINXP },
116     { 0x10DE, 0x01DE, D_VERSION(6,14,10,9381), OS_WINXP },
117     { 0x10DE, 0x039E, D_VERSION(6,14,10,9381), OS_WINXP },
118     { 0x10DE, 0x019D, D_VERSION(6,14,10,9381), OS_WINXP },
119     { 0x10DE, 0x019E, D_VERSION(6,14,10,9381), OS_WINXP },
120     { 0x10DE, 0x040A, D_VERSION(6,14,10,9381), OS_WINXP },
121     { 0x10DE, 0x040E, D_VERSION(6,14,10,9381), OS_WINXP },
122     { 0x10DE, 0x040F, D_VERSION(6,14,10,9381), OS_WINXP },
123     { 0x10DE, 0x061A, D_VERSION(6,14,10,9381), OS_WINXP },
124     { 0x10DE, 0x06F9, D_VERSION(6,14,10,9381), OS_WINXP },
125     { 0x10DE, 0x05FD, D_VERSION(6,14,10,9381), OS_WINXP },
126     { 0x10DE, 0x05FE, D_VERSION(6,14,10,9381), OS_WINXP },
127     { 0x10DE, 0x004E, D_VERSION(6,14,10,9381), OS_WINXP },
128     { 0x10DE, 0x00CD, D_VERSION(6,14,10,9381), OS_WINXP },
129     { 0x10DE, 0x00CE, D_VERSION(6,14,10,9381), OS_WINXP },
130     { 0x10DE, 0x014C, D_VERSION(6,14,10,9381), OS_WINXP },
131     { 0x10DE, 0x014D, D_VERSION(6,14,10,9381), OS_WINXP },
132     { 0x10DE, 0x014E, D_VERSION(6,14,10,9381), OS_WINXP },
133 
134     // Nvidia GeForce 6200 TurboCache(TM)
135     // Reason: workaround for 6588384
136     { 0x10DE, 0x0161, NO_VERSION, OS_VISTA },
137 
138     // any Matrox board
139     // Reason: there are no known Matrox boards with proper Direct3D support
140     { 0x102B, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
141 
142     // any SiS board
143     // Reason: there aren't many PS2.0-capable SiS boards and they weren't
144     // tested
145     { 0x1039, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
146 
147     // any S3 board
148     // Reason: no available S3 Chrome (the only S3 boards with PS2.0 support)
149     // for testing
150     { 0x5333, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
151 
152     // any S3 board (in VIA motherboards)
153     // Reason: These are S3 chips in VIA motherboards
154     { 0x1106, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
155 
156     // last record must be empty
157     { 0x0000, 0x0000, NO_VERSION, OS_ALL }
158 };
159 
160 #endif // D3DBADHARDWARE_H
161