1 /* 2 * Copyright (c) 2007, 2008, 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 // Intel HD 55 // Clarkdale (Desktop) GMA HD Lines 56 { 0x8086, 0x0042, NO_VERSION, OS_ALL }, 57 // Arrandale (Mobile) GMA HD Lines 58 { 0x8086, 0x0046, NO_VERSION, OS_ALL }, 59 60 // Sandy Bridge HD Graphics 3000/2000 61 { 0x8086, 0x0102, NO_VERSION, OS_ALL }, 62 { 0x8086, 0x0106, NO_VERSION, OS_ALL }, 63 { 0x8086, 0x0112, NO_VERSION, OS_ALL }, 64 { 0x8086, 0x0116, NO_VERSION, OS_ALL }, 65 { 0x8086, 0x0122, NO_VERSION, OS_ALL }, 66 { 0x8086, 0x0126, NO_VERSION, OS_ALL }, 67 { 0x8086, 0x010A, NO_VERSION, OS_ALL }, 68 69 // Ivy Bridge 70 { 0x8086, 0x0162, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 71 { 0x8086, 0x0162, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 72 { 0x8086, 0x0166, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 73 { 0x8086, 0x0166, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 74 { 0x8086, 0x016A, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 75 { 0x8086, 0x016A, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 76 { 0x8086, 0x0152, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 77 { 0x8086, 0x0152, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 78 { 0x8086, 0x0156, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 79 { 0x8086, 0x0156, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 80 { 0x8086, 0x015A, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 81 { 0x8086, 0x015A, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 82 83 // Haswell 84 { 0x8086, 0x0402, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 85 { 0x8086, 0x0402, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 86 { 0x8086, 0x0406, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 87 { 0x8086, 0x0406, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 88 { 0x8086, 0x0412, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 89 { 0x8086, 0x0412, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 90 { 0x8086, 0x0416, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 91 { 0x8086, 0x0416, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 92 { 0x8086, 0x041E, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 93 { 0x8086, 0x041E, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 94 { 0x8086, 0x040A, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 95 { 0x8086, 0x040A, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 96 { 0x8086, 0x041A, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 97 { 0x8086, 0x041A, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 98 { 0x8086, 0x0A06, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 99 { 0x8086, 0x0A06, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 100 { 0x8086, 0x0A16, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 101 { 0x8086, 0x0A16, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 102 { 0x8086, 0x0A26, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 103 { 0x8086, 0x0A26, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 104 { 0x8086, 0x0A2E, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 105 { 0x8086, 0x0A2E, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 106 { 0x8086, 0x0A1E, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 107 { 0x8086, 0x0A1E, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 108 { 0x8086, 0x0A0E, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 109 { 0x8086, 0x0A0E, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 110 { 0x8086, 0x0D26, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 111 { 0x8086, 0x0D26, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 112 { 0x8086, 0x0D22, D_VERSION(6,14,10,5437), OS_WINXP | OS_WINXP_64 }, 113 { 0x8086, 0x0D22, D_VERSION(9,18,10,3257), OS_VISTA | OS_WINDOWS7 }, 114 115 // Reason: workaround for 6620073, 6612195 116 // Intel 740 117 { 0x8086, 0x7800, NO_VERSION, OS_ALL }, 118 { 0x8086, 0x1240, NO_VERSION, OS_ALL }, 119 { 0x8086, 0x7121, NO_VERSION, OS_ALL }, 120 { 0x8086, 0x7123, NO_VERSION, OS_ALL }, 121 { 0x8086, 0x7125, NO_VERSION, OS_ALL }, 122 { 0x8086, 0x1132, NO_VERSION, OS_ALL }, 123 // IEG 124 { 0x8086, 0x2562, NO_VERSION, OS_ALL }, 125 { 0x8086, 0x3577, NO_VERSION, OS_ALL }, 126 { 0x8086, 0x2572, NO_VERSION, OS_ALL }, 127 { 0x8086, 0x3582, NO_VERSION, OS_ALL }, 128 { 0x8086, 0x358E, NO_VERSION, OS_ALL }, 129 // GMA 130 { 0x8086, 0x2582, NO_VERSION, OS_ALL }, 131 { 0x8086, 0x2782, NO_VERSION, OS_ALL }, 132 { 0x8086, 0x2592, NO_VERSION, OS_ALL }, 133 { 0x8086, 0x2792, NO_VERSION, OS_ALL }, 134 { 0x8086, 0x2772, NO_VERSION, OS_ALL }, 135 { 0x8086, 0x2776, NO_VERSION, OS_ALL }, 136 { 0x8086, 0x27A2, NO_VERSION, OS_ALL }, 137 { 0x8086, 0x27A6, NO_VERSION, OS_ALL }, 138 { 0x8086, 0x27AE, NO_VERSION, OS_ALL }, 139 { 0x8086, 0x29D2, NO_VERSION, OS_ALL }, 140 { 0x8086, 0x29D3, NO_VERSION, OS_ALL }, 141 { 0x8086, 0x29B2, NO_VERSION, OS_ALL }, 142 { 0x8086, 0x29B3, NO_VERSION, OS_ALL }, 143 { 0x8086, 0x29C2, NO_VERSION, OS_ALL }, 144 { 0x8086, 0x29C3, NO_VERSION, OS_ALL }, 145 { 0x8086, 0xA001, NO_VERSION, OS_ALL }, 146 { 0x8086, 0xA002, NO_VERSION, OS_ALL }, 147 { 0x8086, 0xA011, NO_VERSION, OS_ALL }, 148 { 0x8086, 0xA012, NO_VERSION, OS_ALL }, 149 // GMA 150 { 0x8086, 0x2972, NO_VERSION, OS_ALL }, 151 { 0x8086, 0x2973, NO_VERSION, OS_ALL }, 152 { 0x8086, 0x2992, NO_VERSION, OS_ALL }, 153 { 0x8086, 0x2993, NO_VERSION, OS_ALL }, 154 { 0x8086, 0x29A2, NO_VERSION, OS_ALL }, 155 { 0x8086, 0x29A3, NO_VERSION, OS_ALL }, 156 { 0x8086, 0x2982, NO_VERSION, OS_ALL }, 157 { 0x8086, 0x2983, NO_VERSION, OS_ALL }, 158 { 0x8086, 0x2A02, NO_VERSION, OS_ALL }, 159 { 0x8086, 0x2A03, NO_VERSION, OS_ALL }, 160 { 0x8086, 0x2A12, NO_VERSION, OS_ALL }, 161 { 0x8086, 0x2A13, NO_VERSION, OS_ALL }, 162 163 // Eaglelake (Desktop) GMA 4500 Lines 164 { 0x8086, 0x2E42, NO_VERSION, OS_ALL }, 165 { 0x8086, 0x2E43, NO_VERSION, OS_ALL }, 166 { 0x8086, 0x2E92, NO_VERSION, OS_ALL }, 167 { 0x8086, 0x2E93, NO_VERSION, OS_ALL }, 168 { 0x8086, 0x2E12, NO_VERSION, OS_ALL }, 169 { 0x8086, 0x2E13, NO_VERSION, OS_ALL }, 170 // Eaglelake (Desktop) GMA X4500 Lines 171 { 0x8086, 0x2E32, NO_VERSION, OS_ALL }, 172 { 0x8086, 0x2E33, NO_VERSION, OS_ALL }, 173 { 0x8086, 0x2E22, NO_VERSION, OS_ALL }, 174 // Eaglelake (Desktop) GMA X4500HD Lines 175 { 0x8086, 0x2E23, NO_VERSION, OS_ALL }, 176 // Cantiga (Mobile) GMA 4500MHD Lines 177 { 0x8086, 0x2A42, NO_VERSION, OS_ALL }, 178 { 0x8086, 0x2A43, NO_VERSION, OS_ALL }, 179 180 // ATI Mobility Radeon X1600, X1400, X1450, X1300, X1350 181 // Reason: workaround for 6613066, 6687166 182 // X1300 (four sub ids) 183 { 0x1002, 0x714A, D_VERSION(6,14,10,6706), OS_WINXP }, 184 { 0x1002, 0x714A, D_VERSION(7,14,10,0567), OS_VISTA }, 185 { 0x1002, 0x7149, D_VERSION(6,14,10,6706), OS_WINXP }, 186 { 0x1002, 0x7149, D_VERSION(7,14,10,0567), OS_VISTA }, 187 { 0x1002, 0x714B, D_VERSION(6,14,10,6706), OS_WINXP }, 188 { 0x1002, 0x714B, D_VERSION(7,14,10,0567), OS_VISTA }, 189 { 0x1002, 0x714C, D_VERSION(6,14,10,6706), OS_WINXP }, 190 { 0x1002, 0x714C, D_VERSION(7,14,10,0567), OS_VISTA }, 191 // X1350 (three sub ids) 192 { 0x1002, 0x718B, D_VERSION(6,14,10,6706), OS_WINXP }, 193 { 0x1002, 0x718B, D_VERSION(7,14,10,0567), OS_VISTA }, 194 { 0x1002, 0x718C, D_VERSION(6,14,10,6706), OS_WINXP }, 195 { 0x1002, 0x718C, D_VERSION(7,14,10,0567), OS_VISTA }, 196 { 0x1002, 0x7196, D_VERSION(6,14,10,6706), OS_WINXP }, 197 { 0x1002, 0x7196, D_VERSION(7,14,10,0567), OS_VISTA }, 198 // X1400 199 { 0x1002, 0x7145, D_VERSION(6,14,10,6706), OS_WINXP }, 200 { 0x1002, 0x7145, D_VERSION(7,14,10,0567), OS_VISTA }, 201 // X1450 (two sub ids) 202 { 0x1002, 0x7186, D_VERSION(6,14,10,6706), OS_WINXP }, 203 { 0x1002, 0x7186, D_VERSION(7,14,10,0567), OS_VISTA }, 204 { 0x1002, 0x718D, D_VERSION(6,14,10,6706), OS_WINXP }, 205 { 0x1002, 0x718D, D_VERSION(7,14,10,0567), OS_VISTA }, 206 // X1600 207 { 0x1002, 0x71C5, D_VERSION(6,14,10,6706), OS_WINXP }, 208 { 0x1002, 0x71C5, D_VERSION(7,14,10,0567), OS_VISTA }, 209 210 // ATI Mobility Radeon 9700 211 // Reason: workaround for 6773336 212 { 0x1002, 0x4E50, D_VERSION(6,14,10,6561), OS_WINXP }, 213 214 // Nvidia FX 5200 215 // Reason: workaround for 6717988 216 { 0x10DE, 0x0322, D_VERSION(6,14,11,6921), OS_WINXP }, 217 218 // Nvidia FX Go5600, Go5700 219 // Reason: workaround for 6714579 220 { 0x10DE, 0x031A, D_VERSION(6,14,11,6921), OS_WINXP }, 221 { 0x10DE, 0x0347, D_VERSION(6,14,11,6921), OS_WINXP }, 222 223 // Nvidia Quadro NVS 110M 224 // Reason: workaround for 6629891 225 { 0x10DE, 0x01D7, D_VERSION(6,14,11,5665), OS_WINXP }, 226 227 // Nvidia Quadro PCI-E series 228 // Reason: workaround for 6653860 229 { 0x10DE, 0x00FD, D_VERSION(6,14,10,6573), OS_WINXP }, 230 231 // Nvidia Quadro FX family 232 // Reason: workaround for 6772137 233 { 0x10DE, 0x00F8, D_VERSION(6,14,10,9381), OS_WINXP }, 234 { 0x10DE, 0x009D, D_VERSION(6,14,10,9381), OS_WINXP }, 235 { 0x10DE, 0x029C, D_VERSION(6,14,10,9381), OS_WINXP }, 236 { 0x10DE, 0x029D, D_VERSION(6,14,10,9381), OS_WINXP }, 237 { 0x10DE, 0x029E, D_VERSION(6,14,10,9381), OS_WINXP }, 238 { 0x10DE, 0x029F, D_VERSION(6,14,10,9381), OS_WINXP }, 239 { 0x10DE, 0x01DE, D_VERSION(6,14,10,9381), OS_WINXP }, 240 { 0x10DE, 0x039E, D_VERSION(6,14,10,9381), OS_WINXP }, 241 { 0x10DE, 0x019D, D_VERSION(6,14,10,9381), OS_WINXP }, 242 { 0x10DE, 0x019E, D_VERSION(6,14,10,9381), OS_WINXP }, 243 { 0x10DE, 0x040A, D_VERSION(6,14,10,9381), OS_WINXP }, 244 { 0x10DE, 0x040E, D_VERSION(6,14,10,9381), OS_WINXP }, 245 { 0x10DE, 0x040F, D_VERSION(6,14,10,9381), OS_WINXP }, 246 { 0x10DE, 0x061A, D_VERSION(6,14,10,9381), OS_WINXP }, 247 { 0x10DE, 0x06F9, D_VERSION(6,14,10,9381), OS_WINXP }, 248 { 0x10DE, 0x05FD, D_VERSION(6,14,10,9381), OS_WINXP }, 249 { 0x10DE, 0x05FE, D_VERSION(6,14,10,9381), OS_WINXP }, 250 { 0x10DE, 0x004E, D_VERSION(6,14,10,9381), OS_WINXP }, 251 { 0x10DE, 0x00CD, D_VERSION(6,14,10,9381), OS_WINXP }, 252 { 0x10DE, 0x00CE, D_VERSION(6,14,10,9381), OS_WINXP }, 253 { 0x10DE, 0x014C, D_VERSION(6,14,10,9381), OS_WINXP }, 254 { 0x10DE, 0x014D, D_VERSION(6,14,10,9381), OS_WINXP }, 255 { 0x10DE, 0x014E, D_VERSION(6,14,10,9381), OS_WINXP }, 256 257 // Nvidia GeForce 6200 TurboCache(TM) 258 // Reason: workaround for 6588384 259 { 0x10DE, 0x0161, NO_VERSION, OS_VISTA }, 260 261 // any Matrox board 262 // Reason: there are no known Matrox boards with proper Direct3D support 263 { 0x102B, ALL_DEVICEIDS, NO_VERSION, OS_ALL }, 264 265 // any SiS board 266 // Reason: there aren't many PS2.0-capable SiS boards and they weren't 267 // tested 268 { 0x1039, ALL_DEVICEIDS, NO_VERSION, OS_ALL }, 269 270 // any S3 board 271 // Reason: no available S3 Chrome (the only S3 boards with PS2.0 support) 272 // for testing 273 { 0x5333, ALL_DEVICEIDS, NO_VERSION, OS_ALL }, 274 275 // any S3 board (in VIA motherboards) 276 // Reason: These are S3 chips in VIA motherboards 277 { 0x1106, ALL_DEVICEIDS, NO_VERSION, OS_ALL }, 278 279 // last record must be empty 280 { 0x0000, 0x0000, NO_VERSION, OS_ALL } 281 }; 282 283 #endif // D3DBADHARDWARE_H