Henri Verbeet : wined3d: Use a lookup table in select_card_ati_binary().

Alexandre Julliard julliard at winehq.org
Wed Nov 10 11:09:40 CST 2010


Module: wine
Branch: master
Commit: 4503d0cb4b4fa5ab5857980ab232bf7bedfd6cc6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4503d0cb4b4fa5ab5857980ab232bf7bedfd6cc6

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Nov 10 10:53:00 2010 +0100

wined3d: Use a lookup table in select_card_ati_binary().

---

 dlls/wined3d/directx.c |  124 ++++++++++++++++++------------------------------
 1 files changed, 47 insertions(+), 77 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 7ceb742..4485491 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1578,89 +1578,59 @@ static enum wined3d_pci_device select_card_ati_binary(const struct wined3d_gl_in
      * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
     if (WINE_D3D10_CAPABLE(gl_info))
     {
-        /* Radeon EG CYPRESS XT / PRO HD5800 - highend */
-        if (strstr(gl_renderer, "HD 5800")          /* Radeon EG CYPRESS HD58xx generic renderer string */
-                || strstr(gl_renderer, "HD 5850")   /* Radeon EG CYPRESS XT */
-                || strstr(gl_renderer, "HD 5870"))  /* Radeon EG CYPRESS PRO */
-        {
-            return CARD_ATI_RADEON_HD5800;
-        }
-
-        /* Radeon EG JUNIPER XT / LE HD5700 - midend */
-        if (strstr(gl_renderer, "HD 5700")          /* Radeon EG JUNIPER HD57xx generic renderer string */
-                || strstr(gl_renderer, "HD 5750")   /* Radeon EG JUNIPER LE */
-                || strstr(gl_renderer, "HD 5770"))  /* Radeon EG JUNIPER XT */
-        {
-            return CARD_ATI_RADEON_HD5700;
-        }
-
-        /* Radeon R7xx HD4800 - highend */
-        if (strstr(gl_renderer, "HD 4800")          /* Radeon RV7xx HD48xx generic renderer string */
-                || strstr(gl_renderer, "HD 4830")   /* Radeon RV770 */
-                || strstr(gl_renderer, "HD 4850")   /* Radeon RV770 */
-                || strstr(gl_renderer, "HD 4870")   /* Radeon RV770 */
-                || strstr(gl_renderer, "HD 4890"))  /* Radeon RV790 */
-        {
-            return CARD_ATI_RADEON_HD4800;
-        }
-
-        /* Radeon R740 HD4700 - midend */
-        if (strstr(gl_renderer, "HD 4700")          /* Radeon RV770 */
-                || strstr(gl_renderer, "HD 4770"))  /* Radeon RV740 */
-        {
-            return CARD_ATI_RADEON_HD4700;
-        }
-
-        /* Radeon R730 HD4600 - midend */
-        if (strstr(gl_renderer, "HD 4600")          /* Radeon RV730 */
-                || strstr(gl_renderer, "HD 4650")   /* Radeon RV730 */
-                || strstr(gl_renderer, "HD 4670"))  /* Radeon RV730 */
-        {
-            return CARD_ATI_RADEON_HD4600;
-        }
-
-        /* Radeon R710 HD4500/HD4350 - lowend */
-        if (strstr(gl_renderer, "HD 4350")          /* Radeon RV710 */
-                || strstr(gl_renderer, "HD 4550"))  /* Radeon RV710 */
-        {
-            return CARD_ATI_RADEON_HD4350;
-        }
-
-        /* Radeon R6xx HD2900/HD3800 - highend */
-        if (strstr(gl_renderer, "HD 2900")
-                || strstr(gl_renderer, "HD 3870")
-                || strstr(gl_renderer, "HD 3850"))
-        {
-            return CARD_ATI_RADEON_HD2900;
-        }
+        unsigned int i;
 
-        /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
-        if (strstr(gl_renderer, "HD 2600")
-                || strstr(gl_renderer, "HD 3830")
-                || strstr(gl_renderer, "HD 3690")
-                || strstr(gl_renderer, "HD 3650"))
+        static const struct
         {
-            return CARD_ATI_RADEON_HD2600;
+            const char *renderer;
+            enum wined3d_pci_device id;
         }
-
-        /* Radeon R6xx HD2350/HD2400/HD3400 - lowend
-         * Note HD2300=DX9, HD2350=DX10 */
-        if (strstr(gl_renderer, "HD 2350")
-                || strstr(gl_renderer, "HD 2400")
-                || strstr(gl_renderer, "HD 3470")
-                || strstr(gl_renderer, "HD 3450")
-                || strstr(gl_renderer, "HD 3430")
-                || strstr(gl_renderer, "HD 3400"))
+        cards[] =
         {
-            return CARD_ATI_RADEON_HD2350;
-        }
+            /* Evergreen */
+            {"HD 5870", CARD_ATI_RADEON_HD5800},    /* Radeon EG CYPRESS PRO */
+            {"HD 5850", CARD_ATI_RADEON_HD5800},    /* Radeon EG CYPRESS XT */
+            {"HD 5800", CARD_ATI_RADEON_HD5800},    /* Radeon EG CYPRESS HD58xx generic renderer string */
+            {"HD 5770", CARD_ATI_RADEON_HD5700},    /* Radeon EG JUNIPER XT */
+            {"HD 5750", CARD_ATI_RADEON_HD5700},    /* Radeon EG JUNIPER LE */
+            {"HD 5700", CARD_ATI_RADEON_HD5700},    /* Radeon EG JUNIPER HD57xx generic renderer string */
+            /* R700 */
+            {"HD 4890", CARD_ATI_RADEON_HD4800},    /* Radeon RV790 */
+            {"HD 4870", CARD_ATI_RADEON_HD4800},    /* Radeon RV770 */
+            {"HD 4850", CARD_ATI_RADEON_HD4800},    /* Radeon RV770 */
+            {"HD 4830", CARD_ATI_RADEON_HD4800},    /* Radeon RV770 */
+            {"HD 4800", CARD_ATI_RADEON_HD4800},    /* Radeon RV7xx HD48xx generic renderer string */
+            {"HD 4770", CARD_ATI_RADEON_HD4700},    /* Radeon RV740 */
+            {"HD 4700", CARD_ATI_RADEON_HD4700},    /* Radeon RV7xx HD47xx generic renderer string */
+            {"HD 4670", CARD_ATI_RADEON_HD4600},    /* Radeon RV730 */
+            {"HD 4650", CARD_ATI_RADEON_HD4600},    /* Radeon RV730 */
+            {"HD 4600", CARD_ATI_RADEON_HD4600},    /* Radeon RV730 */
+            {"HD 4550", CARD_ATI_RADEON_HD4350},    /* Radeon RV710 */
+            {"HD 4350", CARD_ATI_RADEON_HD4350},    /* Radeon RV710 */
+            /* R600/R700 integrated */
+            {"HD 3300", CARD_ATI_RADEON_HD3200},
+            {"HD 3200", CARD_ATI_RADEON_HD3200},
+            {"HD 3100", CARD_ATI_RADEON_HD3200},
+            /* R600 */
+            {"HD 3870", CARD_ATI_RADEON_HD2900},    /* HD2900/HD3800 - highend */
+            {"HD 3850", CARD_ATI_RADEON_HD2900},    /* HD2900/HD3800 - highend */
+            {"HD 2900", CARD_ATI_RADEON_HD2900},    /* HD2900/HD3800 - highend */
+            {"HD 3830", CARD_ATI_RADEON_HD2600},    /* China-only midend */
+            {"HD 3690", CARD_ATI_RADEON_HD2600},    /* HD2600/HD3600 - midend */
+            {"HD 3650", CARD_ATI_RADEON_HD2600},    /* HD2600/HD3600 - midend */
+            {"HD 2600", CARD_ATI_RADEON_HD2600},    /* HD2600/HD3600 - midend */
+            {"HD 3470", CARD_ATI_RADEON_HD2350},    /* HD2350/HD2400/HD3400 - lowend */
+            {"HD 3450", CARD_ATI_RADEON_HD2350},    /* HD2350/HD2400/HD3400 - lowend */
+            {"HD 3430", CARD_ATI_RADEON_HD2350},    /* HD2350/HD2400/HD3400 - lowend */
+            {"HD 3400", CARD_ATI_RADEON_HD2350},    /* HD2350/HD2400/HD3400 - lowend */
+            {"HD 2400", CARD_ATI_RADEON_HD2350},    /* HD2350/HD2400/HD3400 - lowend */
+            {"HD 2350", CARD_ATI_RADEON_HD2350},    /* HD2350/HD2400/HD3400 - lowend */
+        };
 
-        /* Radeon R6xx/R7xx integrated */
-        if (strstr(gl_renderer, "HD 3100")
-                || strstr(gl_renderer, "HD 3200")
-                || strstr(gl_renderer, "HD 3300"))
+        for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i)
         {
-            return CARD_ATI_RADEON_HD3200;
+            if (strstr(gl_renderer, cards[i].renderer))
+                return cards[i].id;
         }
 
         /* Default for when no GPU has been found */




More information about the wine-cvs mailing list