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