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     // Intel HD
  55     // Reason: workaround for RT-11540
  56     // Clarkdale (Desktop) GMA HD Lines
  57     { 0x8086, 0x0042, D_VERSION(6,14,10,5337), OS_WINXP },
  58     { 0x8086, 0x0042, D_VERSION(8,15,10,2302), OS_VISTA },
  59     // Arrandale (Mobile) GMA HD Lines
  60     { 0x8086, 0x0046, D_VERSION(6,14,10,5337), OS_WINXP },
  61     { 0x8086, 0x0046, D_VERSION(8,15,10,2302), OS_VISTA },
  62     // Sandy Bridge GMA HD Lines
  63     { 0x8086, 0x0102, D_VERSION(6,14,10,5337), OS_WINXP },
  64     { 0x8086, 0x0102, D_VERSION(8,15,10,2302), OS_VISTA },
  65     { 0x8086, 0x0106, D_VERSION(6,14,10,5337), OS_WINXP },
  66     { 0x8086, 0x0106, D_VERSION(8,15,10,2302), OS_VISTA },
  67     { 0x8086, 0x0112, D_VERSION(6,14,10,5337), OS_WINXP },
  68     { 0x8086, 0x0112, D_VERSION(8,15,10,2302), OS_VISTA },
  69     { 0x8086, 0x0116, D_VERSION(6,14,10,5337), OS_WINXP },
  70     { 0x8086, 0x0116, D_VERSION(8,15,10,2302), OS_VISTA },
  71     { 0x8086, 0x0122, D_VERSION(6,14,10,5337), OS_WINXP },
  72     { 0x8086, 0x0122, D_VERSION(8,15,10,2302), OS_VISTA },
  73     { 0x8086, 0x0126, D_VERSION(6,14,10,5337), OS_WINXP },
  74     { 0x8086, 0x0126, D_VERSION(8,15,10,2302), OS_VISTA },
  75     { 0x8086, 0x010A, D_VERSION(6,14,10,5337), OS_WINXP },
  76     { 0x8086, 0x010A, D_VERSION(8,15,10,2302), OS_VISTA },
  77 
  78     // Mobile Intel 4 Series Express Chipset Family
  79     // Reason: workaround for RT-11540
  80     // Eaglelake (Desktop) GMA 4500 Lines
  81     { 0x8086, 0x2E42, D_VERSION(6,14,10,5303), OS_WINXP },
  82     { 0x8086, 0x2E42, D_VERSION(8,15,10,2302), OS_VISTA },
  83     { 0x8086, 0x2E43, D_VERSION(6,14,10,5303), OS_WINXP },
  84     { 0x8086, 0x2E43, D_VERSION(8,15,10,2302), OS_VISTA },
  85     { 0x8086, 0x2E92, D_VERSION(6,14,10,5303), OS_WINXP },
  86     { 0x8086, 0x2E92, D_VERSION(8,15,10,2302), OS_VISTA },
  87     { 0x8086, 0x2E93, D_VERSION(6,14,10,5303), OS_WINXP },
  88     { 0x8086, 0x2E93, D_VERSION(8,15,10,2302), OS_VISTA },
  89     { 0x8086, 0x2E12, D_VERSION(6,14,10,5303), OS_WINXP },
  90     { 0x8086, 0x2E12, D_VERSION(8,15,10,2302), OS_VISTA },
  91     { 0x8086, 0x2E13, D_VERSION(6,14,10,5303), OS_WINXP },
  92     { 0x8086, 0x2E13, D_VERSION(8,15,10,2302), OS_VISTA },
  93     // Eaglelake (Desktop) GMA X4500 Lines
  94     { 0x8086, 0x2E32, D_VERSION(6,14,10,5303), OS_WINXP },
  95     { 0x8086, 0x2E32, D_VERSION(8,15,10,2302), OS_VISTA },
  96     { 0x8086, 0x2E33, D_VERSION(6,14,10,5303), OS_WINXP },
  97     { 0x8086, 0x2E33, D_VERSION(8,15,10,2302), OS_VISTA },
  98     { 0x8086, 0x2E22, D_VERSION(6,14,10,5303), OS_WINXP },
  99     { 0x8086, 0x2E22, D_VERSION(8,15,10,2302), OS_VISTA },
 100     // Eaglelake (Desktop) GMA X4500HD Lines
 101     { 0x8086, 0x2E23, D_VERSION(6,14,10,5303), OS_WINXP },
 102     { 0x8086, 0x2E23, D_VERSION(8,15,10,2302), OS_VISTA },
 103     // Cantiga (Mobile) GMA 4500MHD Lines
 104     { 0x8086, 0x2A42, D_VERSION(6,14,10,5303), OS_WINXP },
 105     { 0x8086, 0x2A42, D_VERSION(8,15,10,2302), OS_VISTA },
 106     { 0x8086, 0x2A43, D_VERSION(6,14,10,5303), OS_WINXP },
 107     { 0x8086, 0x2A43, D_VERSION(8,15,10,2302), OS_VISTA },
 108 
 109     // Intel 9XX Chipset families that are used in GMA 3XXX series
 110     // Reason: RT-31537 - unusable
 111     { 0x8086, 0x2972, NO_VERSION, OS_ALL },
 112     { 0x8086, 0x2973, NO_VERSION, OS_ALL },
 113     { 0x8086, 0x2982, NO_VERSION, OS_ALL },
 114     { 0x8086, 0x2983, NO_VERSION, OS_ALL },
 115     { 0x8086, 0x2992, NO_VERSION, OS_ALL },
 116     { 0x8086, 0x2993, NO_VERSION, OS_ALL },
 117     { 0x8086, 0x29A2, NO_VERSION, OS_ALL },
 118     { 0x8086, 0x29A3, NO_VERSION, OS_ALL },
 119     { 0x8086, 0x2A02, NO_VERSION, OS_ALL },
 120     { 0x8086, 0x2A03, NO_VERSION, OS_ALL },
 121     { 0x8086, 0x2A12, NO_VERSION, OS_ALL },
 122     { 0x8086, 0x2A13, NO_VERSION, OS_ALL },
 123 
 124     // ATI Radeon X1000 series
 125     // Reason: RT-33212 - This series of low to medium range cards
 126     //                    are too old to be usable for JavaFX
 127     { 0x1002, 0x7140, NO_VERSION, OS_ALL},
 128     { 0x1002, 0x7142, NO_VERSION, OS_ALL},
 129     { 0x1002, 0x7143, NO_VERSION, OS_ALL},
 130     { 0x1002, 0x7145, NO_VERSION, OS_ALL},
 131     { 0x1002, 0x7146, NO_VERSION, OS_ALL},
 132     { 0x1002, 0x7147, NO_VERSION, OS_ALL},
 133     { 0x1002, 0x7149, NO_VERSION, OS_ALL},
 134     { 0x1002, 0x714A, NO_VERSION, OS_ALL},
 135     { 0x1002, 0x714B, NO_VERSION, OS_ALL},
 136     { 0x1002, 0x714C, NO_VERSION, OS_ALL},
 137     { 0x1002, 0x714D, NO_VERSION, OS_ALL},
 138     { 0x1002, 0x714E, NO_VERSION, OS_ALL},
 139     { 0x1002, 0x715E, NO_VERSION, OS_ALL},
 140     { 0x1002, 0x715F, NO_VERSION, OS_ALL},
 141     { 0x1002, 0x7160, NO_VERSION, OS_ALL},
 142     { 0x1002, 0x7162, NO_VERSION, OS_ALL},
 143     { 0x1002, 0x7163, NO_VERSION, OS_ALL},
 144     { 0x1002, 0x7166, NO_VERSION, OS_ALL},
 145     { 0x1002, 0x7167, NO_VERSION, OS_ALL},
 146     { 0x1002, 0x716D, NO_VERSION, OS_ALL},
 147     { 0x1002, 0x716E, NO_VERSION, OS_ALL},
 148     { 0x1002, 0x717E, NO_VERSION, OS_ALL},
 149     { 0x1002, 0x717F, NO_VERSION, OS_ALL},
 150     { 0x1002, 0x7180, NO_VERSION, OS_ALL},
 151     { 0x1002, 0x7181, NO_VERSION, OS_ALL},
 152     { 0x1002, 0x7183, NO_VERSION, OS_ALL},
 153     { 0x1002, 0x7186, NO_VERSION, OS_ALL},
 154     { 0x1002, 0x7187, NO_VERSION, OS_ALL},
 155     { 0x1002, 0x718B, NO_VERSION, OS_ALL},
 156     { 0x1002, 0x718C, NO_VERSION, OS_ALL},
 157     { 0x1002, 0x718D, NO_VERSION, OS_ALL},
 158     { 0x1002, 0x718F, NO_VERSION, OS_ALL},
 159     { 0x1002, 0x7193, NO_VERSION, OS_ALL},
 160     { 0x1002, 0x7196, NO_VERSION, OS_ALL},
 161     { 0x1002, 0x719F, NO_VERSION, OS_ALL},
 162     { 0x1002, 0x71A0, NO_VERSION, OS_ALL},
 163     { 0x1002, 0x71A1, NO_VERSION, OS_ALL},
 164     { 0x1002, 0x71A3, NO_VERSION, OS_ALL},
 165     { 0x1002, 0x71A7, NO_VERSION, OS_ALL},
 166     { 0x1002, 0x71AF, NO_VERSION, OS_ALL},
 167     { 0x1002, 0x71B3, NO_VERSION, OS_ALL},
 168     { 0x1002, 0x71C0, NO_VERSION, OS_ALL},
 169     { 0x1002, 0x71C1, NO_VERSION, OS_ALL},
 170     { 0x1002, 0x71C2, NO_VERSION, OS_ALL},
 171     { 0x1002, 0x71C3, NO_VERSION, OS_ALL},
 172     { 0x1002, 0x71C5, NO_VERSION, OS_ALL},
 173     { 0x1002, 0x71C6, NO_VERSION, OS_ALL},
 174     { 0x1002, 0x71C7, NO_VERSION, OS_ALL},
 175     { 0x1002, 0x71CD, NO_VERSION, OS_ALL},
 176     { 0x1002, 0x71CE, NO_VERSION, OS_ALL},
 177     { 0x1002, 0x71E0, NO_VERSION, OS_ALL},
 178     { 0x1002, 0x71E2, NO_VERSION, OS_ALL},
 179     { 0x1002, 0x71E3, NO_VERSION, OS_ALL},
 180     { 0x1002, 0x71E6, NO_VERSION, OS_ALL},
 181     { 0x1002, 0x71E7, NO_VERSION, OS_ALL},
 182     { 0x1002, 0x71ED, NO_VERSION, OS_ALL},
 183     { 0x1002, 0x71EE, NO_VERSION, OS_ALL},
 184     { 0x1002, 0x7291, NO_VERSION, OS_ALL},
 185     { 0x1002, 0x7293, NO_VERSION, OS_ALL},
 186     { 0x1002, 0x72B1, NO_VERSION, OS_ALL},
 187     { 0x1002, 0x72B3, NO_VERSION, OS_ALL},
 188     { 0x1002, 0x791E, NO_VERSION, OS_ALL},
 189     { 0x1002, 0x791F, NO_VERSION, OS_ALL},
 190     
 191     // ATI Mobility Radeon 9700
 192     // Reason: workaround for 6773336
 193     { 0x1002, 0x4E50, D_VERSION(6,14,10,6561), OS_WINXP },
 194 
 195     //  ATI MOBILITY FireGL V5250
 196     // Though this card supports PS 3.0,
 197     //        it is a relatively old GPU (introduced in 2007)
 198     // Reason: workaround for RT-14870, 15045
 199     { 0x1002, 0x71D4, NO_VERSION, OS_ALL},
 200 
 201     // Nvidia FX 5200
 202     // Reason: workaround for 6717988
 203     { 0x10DE, 0x0322, D_VERSION(6,14,11,6921), OS_WINXP },
 204 
 205     // Nvidia FX Go5600, Go5700
 206     // Reason: workaround for 6714579
 207     { 0x10DE, 0x031A, D_VERSION(6,14,11,6921), OS_WINXP },
 208     { 0x10DE, 0x0347, D_VERSION(6,14,11,6921), OS_WINXP },
 209 
 210     // Nvidia Quadro NVS 110M
 211     // Reason: workaround for 6629891
 212     { 0x10DE, 0x01D7, D_VERSION(6,14,11,5665), OS_WINXP },
 213 
 214     // Nvidia Quadro PCI-E series
 215     // Reason: workaround for 6653860
 216     { 0x10DE, 0x00FD, D_VERSION(6,14,10,6573), OS_WINXP },
 217 
 218     // Nvidia Quadro FX family
 219     // Reason: workaround for 6772137
 220     { 0x10DE, 0x00F8, D_VERSION(6,14,10,9381), OS_WINXP },
 221     { 0x10DE, 0x009D, D_VERSION(6,14,10,9381), OS_WINXP },
 222     { 0x10DE, 0x029C, D_VERSION(6,14,10,9381), OS_WINXP },
 223     { 0x10DE, 0x029D, D_VERSION(6,14,10,9381), OS_WINXP },
 224     { 0x10DE, 0x029E, D_VERSION(6,14,10,9381), OS_WINXP },
 225     { 0x10DE, 0x029F, D_VERSION(6,14,10,9381), OS_WINXP },
 226     { 0x10DE, 0x01DE, D_VERSION(6,14,10,9381), OS_WINXP },
 227     { 0x10DE, 0x039E, D_VERSION(6,14,10,9381), OS_WINXP },
 228     { 0x10DE, 0x019D, D_VERSION(6,14,10,9381), OS_WINXP },
 229     { 0x10DE, 0x019E, D_VERSION(6,14,10,9381), OS_WINXP },
 230     { 0x10DE, 0x040A, D_VERSION(6,14,10,9381), OS_WINXP },
 231     { 0x10DE, 0x040E, D_VERSION(6,14,10,9381), OS_WINXP },
 232     { 0x10DE, 0x040F, D_VERSION(6,14,10,9381), OS_WINXP },
 233     { 0x10DE, 0x061A, D_VERSION(6,14,10,9381), OS_WINXP },
 234     { 0x10DE, 0x06F9, D_VERSION(6,14,10,9381), OS_WINXP },
 235     { 0x10DE, 0x05FD, D_VERSION(6,14,10,9381), OS_WINXP },
 236     { 0x10DE, 0x05FE, D_VERSION(6,14,10,9381), OS_WINXP },
 237     { 0x10DE, 0x004E, D_VERSION(6,14,10,9381), OS_WINXP },
 238     { 0x10DE, 0x00CD, D_VERSION(6,14,10,9381), OS_WINXP },
 239     { 0x10DE, 0x00CE, D_VERSION(6,14,10,9381), OS_WINXP },
 240     { 0x10DE, 0x014C, D_VERSION(6,14,10,9381), OS_WINXP },
 241     { 0x10DE, 0x014D, D_VERSION(6,14,10,9381), OS_WINXP },
 242     { 0x10DE, 0x014E, D_VERSION(6,14,10,9381), OS_WINXP },
 243 
 244     // Nvidia GeForce 6200 TurboCache(TM)
 245     // Reason: workaround for 6588384
 246     { 0x10DE, 0x0161, NO_VERSION, OS_VISTA },
 247 
 248     // Old low-end Nvidia GeForce 7300 seriers cards
 249     // Reason: workaround for RT-15381
 250     // Nvidia GeForce 7300 LE
 251     { 0x10DE, 0x01D1, NO_VERSION, OS_ALL},
 252     // Nvidia GeForce 7300 SE/7200 GS
 253     { 0x10DE, 0x01D3, NO_VERSION, OS_ALL},
 254     // Nvidia GeForce 7300 GO
 255     { 0x10DE, 0x01D7, NO_VERSION, OS_ALL},
 256     // Nvidia GeForce 7300 GS
 257     { 0x10DE, 0x01DF, NO_VERSION, OS_ALL},
 258 
 259     // any Matrox board
 260     // Reason: there are no known Matrox boards with proper Direct3D support
 261     { 0x102B, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
 262 
 263     // any SiS board
 264     // Reason: there aren't many PS2.0-capable SiS boards and they weren't
 265     // tested
 266     { 0x1039, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
 267 
 268     // any S3 board
 269     // Reason: no available S3 Chrome (the only S3 boards with PS2.0 support)
 270     // for testing
 271     { 0x5333, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
 272 
 273     // any S3 board (in VIA motherboards)
 274     // Reason: These are S3 chips in VIA motherboards
 275     { 0x1106, ALL_DEVICEIDS, NO_VERSION, OS_ALL },
 276 
 277     // last record must be empty
 278     { 0x0000, 0x0000, NO_VERSION, OS_ALL }
 279 };
 280 
 281 #endif // D3DBADHARDWARE_H