[PATCH 4/4] wined3d: Use lookup tables in select_card_nvidia_binary().
Henri Verbeet
hverbeet at codeweavers.com
Tue Nov 9 04:38:44 CST 2010
---
dlls/wined3d/directx.c | 263 ++++++++++++++----------------------------------
1 files changed, 76 insertions(+), 187 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 77483f6..7ceb742 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1405,161 +1405,65 @@ static enum wined3d_pci_vendor wined3d_guess_card_vendor(const char *gl_vendor_s
static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl_info *gl_info,
const char *gl_renderer)
{
+ unsigned int i;
+
if (WINE_D3D10_CAPABLE(gl_info))
{
- /* Geforce 400 - highend */
- if (strstr(gl_renderer, "GTX 480"))
- {
- return CARD_NVIDIA_GEFORCE_GTX480;
- }
-
- /* Geforce 400 - midend high */
- if (strstr(gl_renderer, "GTX 470"))
- {
- return CARD_NVIDIA_GEFORCE_GTX470;
- }
-
- /* Geforce 400 - midend */
- if (strstr(gl_renderer, "GTX 465"))
- {
- return CARD_NVIDIA_GEFORCE_GTX465;
- }
-
- /* Geforce 400 - midend */
- if (strstr(gl_renderer, "GTX 460"))
- {
- return CARD_NVIDIA_GEFORCE_GTX460;
- }
-
- /* Geforce 300 highend mobile */
- if (strstr(gl_renderer, "GTS 350M")
- || strstr(gl_renderer, "GTS 360M"))
- {
- return CARD_NVIDIA_GEFORCE_GTS350M;
- }
-
- /* Geforce 300 midend mobile (Geforce GT 325M/330M use the same core) */
- if (strstr(gl_renderer, "GT 325M")
- || strstr(gl_renderer, "GT 330M"))
- {
- return CARD_NVIDIA_GEFORCE_GT325M;
- }
-
- /* Geforce 200 - highend */
- if (strstr(gl_renderer, "GTX 280")
- || strstr(gl_renderer, "GTX 285")
- || strstr(gl_renderer, "GTX 295"))
- {
- return CARD_NVIDIA_GEFORCE_GTX280;
- }
-
- /* Geforce 200 - midend high */
- if (strstr(gl_renderer, "GTX 275"))
- {
- return CARD_NVIDIA_GEFORCE_GTX275;
- }
-
- /* Geforce 200 - midend */
- if (strstr(gl_renderer, "GTX 260"))
- {
- return CARD_NVIDIA_GEFORCE_GTX260;
- }
- /* Geforce 200 - midend */
- if (strstr(gl_renderer, "GT 240"))
- {
- return CARD_NVIDIA_GEFORCE_GT240;
- }
-
- /* Geforce 200 lowend */
- if (strstr(gl_renderer, "GT 220"))
- {
- return CARD_NVIDIA_GEFORCE_GT220;
- }
- /* Geforce 200 lowend (Geforce 305/310 use the same core) */
- if (strstr(gl_renderer, "Geforce 210")
- || strstr(gl_renderer, "G 210")
- || strstr(gl_renderer, "Geforce 305")
- || strstr(gl_renderer, "Geforce 310"))
- {
- return CARD_NVIDIA_GEFORCE_210;
- }
-
- /* Geforce9 - highend / Geforce 200 - midend (GTS 150/250 are based on the same core) */
- if (strstr(gl_renderer, "9800")
- || strstr(gl_renderer, "GTS 150")
- || strstr(gl_renderer, "GTS 250"))
- {
- return CARD_NVIDIA_GEFORCE_9800GT;
- }
-
- /* Geforce9 - midend (GT 140 uses the same core as the 9600GT) */
- if (strstr(gl_renderer, "9600")
- || strstr(gl_renderer, "GT 140"))
- {
- return CARD_NVIDIA_GEFORCE_9600GT;
- }
-
- /* Geforce9 - midend low / Geforce 200 - low */
- if (strstr(gl_renderer, "9500")
- || strstr(gl_renderer, "GT 120")
- || strstr(gl_renderer, "GT 130"))
- {
- return CARD_NVIDIA_GEFORCE_9500GT;
- }
-
- /* Geforce9 - lowend */
- if (strstr(gl_renderer, "9400"))
- {
- return CARD_NVIDIA_GEFORCE_9400GT;
- }
-
- /* Geforce9 - lowend low */
- if (strstr(gl_renderer, "9100")
- || strstr(gl_renderer, "9200")
- || strstr(gl_renderer, "9300")
- || strstr(gl_renderer, "G 100"))
- {
- return CARD_NVIDIA_GEFORCE_9200;
- }
-
- /* Geforce8 - highend high*/
- if (strstr(gl_renderer, "8800 GTX"))
- {
- return CARD_NVIDIA_GEFORCE_8800GTX;
- }
-
- /* Geforce8 - highend */
- if (strstr(gl_renderer, "8800"))
- {
- return CARD_NVIDIA_GEFORCE_8800GTS;
- }
-
- /* Geforce8 - midend mobile */
- if (strstr(gl_renderer, "8600 M"))
- {
- return CARD_NVIDIA_GEFORCE_8600MGT;
- }
-
- /* Geforce8 - midend */
- if (strstr(gl_renderer, "8600")
- || strstr(gl_renderer, "8700"))
+ static const struct
{
- return CARD_NVIDIA_GEFORCE_8600GT;
+ const char *renderer;
+ enum wined3d_pci_device id;
}
-
- /* Geforce8 - mid-lowend */
- if (strstr(gl_renderer, "8400")
- || strstr(gl_renderer, "8500"))
+ cards[] =
{
- return CARD_NVIDIA_GEFORCE_8400GS;
- }
+ {"GTX 480", CARD_NVIDIA_GEFORCE_GTX480}, /* Geforce 400 - highend */
+ {"GTX 470", CARD_NVIDIA_GEFORCE_GTX470}, /* Geforce 400 - midend high */
+ {"GTX 465", CARD_NVIDIA_GEFORCE_GTX465}, /* Geforce 400 - midend */
+ {"GTX 460", CARD_NVIDIA_GEFORCE_GTX460}, /* Geforce 400 - midend */
+ {"GTS 360M", CARD_NVIDIA_GEFORCE_GTS350M}, /* Geforce 300 - highend mobile */
+ {"GTS 350M", CARD_NVIDIA_GEFORCE_GTS350M}, /* Geforce 300 - highend mobile */
+ {"GT 330M", CARD_NVIDIA_GEFORCE_GT325M}, /* Geforce 300 - midend mobile */
+ {"GT 325M", CARD_NVIDIA_GEFORCE_GT325M}, /* Geforce 300 - midend mobile */
+ {"GTX 295", CARD_NVIDIA_GEFORCE_GTX280}, /* Geforce 200 - highend */
+ {"GTX 285", CARD_NVIDIA_GEFORCE_GTX280}, /* Geforce 200 - highend */
+ {"GTX 280", CARD_NVIDIA_GEFORCE_GTX280}, /* Geforce 200 - highend */
+ {"GTX 275", CARD_NVIDIA_GEFORCE_GTX275}, /* Geforce 200 - midend high */
+ {"GTX 260", CARD_NVIDIA_GEFORCE_GTX260}, /* Geforce 200 - midend */
+ {"GT 240", CARD_NVIDIA_GEFORCE_GT240}, /* Geforce 200 - midend */
+ {"GT 220", CARD_NVIDIA_GEFORCE_GT220}, /* Geforce 200 - lowend */
+ {"Geforce 310", CARD_NVIDIA_GEFORCE_210}, /* Geforce 200 - lowend */
+ {"Geforce 305", CARD_NVIDIA_GEFORCE_210}, /* Geforce 200 - lowend */
+ {"Geforce 210", CARD_NVIDIA_GEFORCE_210}, /* Geforce 200 - lowend */
+ {"G 210", CARD_NVIDIA_GEFORCE_210}, /* Geforce 200 - lowend */
+ {"GTS 250", CARD_NVIDIA_GEFORCE_9800GT}, /* Geforce 9 - highend / Geforce 200 - midend */
+ {"GTS 150", CARD_NVIDIA_GEFORCE_9800GT}, /* Geforce 9 - highend / Geforce 200 - midend */
+ {"9800", CARD_NVIDIA_GEFORCE_9800GT}, /* Geforce 9 - highend / Geforce 200 - midend */
+ {"GT 140", CARD_NVIDIA_GEFORCE_9600GT}, /* Geforce 9 - midend */
+ {"9600", CARD_NVIDIA_GEFORCE_9600GT}, /* Geforce 9 - midend */
+ {"GT 130", CARD_NVIDIA_GEFORCE_9500GT}, /* Geforce 9 - midend low / Geforce 200 - low */
+ {"GT 120", CARD_NVIDIA_GEFORCE_9500GT}, /* Geforce 9 - midend low / Geforce 200 - low */
+ {"9500", CARD_NVIDIA_GEFORCE_9500GT}, /* Geforce 9 - midend low / Geforce 200 - low */
+ {"9400", CARD_NVIDIA_GEFORCE_9400GT}, /* Geforce 9 - lowend */
+ {"9300", CARD_NVIDIA_GEFORCE_9200}, /* Geforce 9 - lowend low */
+ {"9200", CARD_NVIDIA_GEFORCE_9200}, /* Geforce 9 - lowend low */
+ {"9100", CARD_NVIDIA_GEFORCE_9200}, /* Geforce 9 - lowend low */
+ {"G 100", CARD_NVIDIA_GEFORCE_9200}, /* Geforce 9 - lowend low */
+ {"8800 GTX", CARD_NVIDIA_GEFORCE_8800GTX}, /* Geforce 8 - highend high */
+ {"8800", CARD_NVIDIA_GEFORCE_8800GTS}, /* Geforce 8 - highend */
+ {"8600 M", CARD_NVIDIA_GEFORCE_8600MGT}, /* Geforce 8 - midend mobile */
+ {"8700", CARD_NVIDIA_GEFORCE_8600GT}, /* Geforce 8 - midend */
+ {"8600", CARD_NVIDIA_GEFORCE_8600GT}, /* Geforce 8 - midend */
+ {"8500", CARD_NVIDIA_GEFORCE_8400GS}, /* Geforce 8 - mid-lowend */
+ {"8400", CARD_NVIDIA_GEFORCE_8400GS}, /* Geforce 8 - mid-lowend */
+ {"8300", CARD_NVIDIA_GEFORCE_8300GS}, /* Geforce 8 - lowend */
+ {"8200", CARD_NVIDIA_GEFORCE_8300GS}, /* Geforce 8 - lowend */
+ {"8100", CARD_NVIDIA_GEFORCE_8300GS}, /* Geforce 8 - lowend */
+ };
- /* Geforce8 - lowend */
- if (strstr(gl_renderer, "8100")
- || strstr(gl_renderer, "8200")
- || strstr(gl_renderer, "8300"))
+ for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i)
{
- return CARD_NVIDIA_GEFORCE_8300GS;
+ if (strstr(gl_renderer, cards[i].renderer))
+ return cards[i].id;
}
/* Geforce8-compatible fall back if the GPU is not in the list yet */
@@ -1571,50 +1475,35 @@ static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl
*/
if (WINE_D3D9_CAPABLE(gl_info) && gl_info->supported[NV_VERTEX_PROGRAM3])
{
- /* Geforce7 - highend */
- if (strstr(gl_renderer, "7800")
- || strstr(gl_renderer, "7900")
- || strstr(gl_renderer, "7950")
- || strstr(gl_renderer, "Quadro FX 4")
- || strstr(gl_renderer, "Quadro FX 5"))
- {
- return CARD_NVIDIA_GEFORCE_7800GT;
- }
-
- /* Geforce7 midend */
- if (strstr(gl_renderer, "7600")
- || strstr(gl_renderer, "7700"))
- {
- return CARD_NVIDIA_GEFORCE_7600;
- }
-
- /* Geforce7 lower medium */
- if (strstr(gl_renderer, "7400"))
- {
- return CARD_NVIDIA_GEFORCE_7400;
- }
-
- /* Geforce7 lowend */
- if (strstr(gl_renderer, "7300"))
+ static const struct
{
- return CARD_NVIDIA_GEFORCE_7300;
+ const char *renderer;
+ enum wined3d_pci_device id;
}
-
- /* Geforce6 highend */
- if (strstr(gl_renderer, "6800"))
+ cards[] =
{
- return CARD_NVIDIA_GEFORCE_6800;
- }
+ {"Quadro FX 5", CARD_NVIDIA_GEFORCE_7800GT}, /* Geforce 7 - highend */
+ {"Quadro FX 4", CARD_NVIDIA_GEFORCE_7800GT}, /* Geforce 7 - highend */
+ {"7950", CARD_NVIDIA_GEFORCE_7800GT}, /* Geforce 7 - highend */
+ {"7900", CARD_NVIDIA_GEFORCE_7800GT}, /* Geforce 7 - highend */
+ {"7800", CARD_NVIDIA_GEFORCE_7800GT}, /* Geforce 7 - highend */
+ {"7700", CARD_NVIDIA_GEFORCE_7600}, /* Geforce 7 - midend */
+ {"7600", CARD_NVIDIA_GEFORCE_7600}, /* Geforce 7 - midend */
+ {"7400", CARD_NVIDIA_GEFORCE_7400}, /* Geforce 7 - lower medium */
+ {"7300", CARD_NVIDIA_GEFORCE_7300}, /* Geforce 7 - lowend */
+ {"6800", CARD_NVIDIA_GEFORCE_6800}, /* Geforce 6 - highend */
+ {"6700", CARD_NVIDIA_GEFORCE_6600GT}, /* Geforce 6 - midend */
+ {"6610", CARD_NVIDIA_GEFORCE_6600GT}, /* Geforce 6 - midend */
+ {"6600", CARD_NVIDIA_GEFORCE_6600GT}, /* Geforce 6 - midend */
+ };
- /* Geforce6 - midend */
- if (strstr(gl_renderer, "6600")
- || strstr(gl_renderer, "6610")
- || strstr(gl_renderer, "6700"))
+ for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i)
{
- return CARD_NVIDIA_GEFORCE_6600GT;
+ if (strstr(gl_renderer, cards[i].renderer))
+ return cards[i].id;
}
- /* Geforce6/7 lowend */
+ /* Geforce 6/7 - lowend */
return CARD_NVIDIA_GEFORCE_6200; /* Geforce 6100/6150/6200/7300/7400/7500 */
}
--
1.7.2.2
More information about the wine-patches
mailing list