[PATCH 3/5] wined3d: Simplify select_card_amd_mesa() a bit.

Henri Verbeet hverbeet at codeweavers.com
Thu Jan 3 04:56:24 CST 2013


We can use the same code for the Gallium and "classic" drivers, and the
classic drivers are no longer supported upstream anyway.
---
 dlls/wined3d/directx.c |  209 +++++++++++++++++++-----------------------------
 1 files changed, 82 insertions(+), 127 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index ce15232..ecebfa4 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1879,141 +1879,96 @@ static enum wined3d_pci_device select_card_intel(const struct wined3d_gl_info *g
 static enum wined3d_pci_device select_card_amd_mesa(const struct wined3d_gl_info *gl_info,
         const char *gl_renderer)
 {
-    UINT d3d_level;
     unsigned int i;
 
-    /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx
+    /* 20101109 - These are never returned by current Gallium radeon
+     * drivers: R700, RV790, R680, RV535, RV516, R410, RS485, RV360, RV351.
      *
-     * Beware: renderer string do not match exact card model,
-     * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
-    if (strstr(gl_renderer, "Gallium"))
+     * These are returned but not handled: RC410, RV380. */
+    static const struct
     {
-        /* 20101109 - These are never returned by current Gallium radeon
-         * drivers: R700, RV790, R680, RV535, RV516, R410, RS485, RV360, RV351.
-         *
-         * These are returned but not handled: RC410, RV380. */
-        static const struct
-        {
-            const char *renderer;
-            enum wined3d_pci_device id;
-        }
-        cards[] =
-        {
-            /* Southern Islands */
-            {"TAHITI",     CARD_AMD_RADEON_HD7900},
-            {"PITCAIRN",   CARD_AMD_RADEON_HD7800},
-            {"CAPE VERDE", CARD_AMD_RADEON_HD7700},
-            /* Northern Islands */
-            {"CAYMAN",  CARD_AMD_RADEON_HD6900},
-            {"BARTS",   CARD_AMD_RADEON_HD6800},
-            {"TURKS",   CARD_AMD_RADEON_HD6600},
-            {"SUMO2",   CARD_AMD_RADEON_HD6410D},   /* SUMO2 first, because we do a strstr(). */
-            {"SUMO",    CARD_AMD_RADEON_HD6550D},
-            {"CAICOS",  CARD_AMD_RADEON_HD6400},
-            {"PALM",    CARD_AMD_RADEON_HD6300},
-            /* Evergreen */
-            {"HEMLOCK", CARD_AMD_RADEON_HD5900},
-            {"CYPRESS", CARD_AMD_RADEON_HD5800},
-            {"JUNIPER", CARD_AMD_RADEON_HD5700},
-            {"REDWOOD", CARD_AMD_RADEON_HD5600},
-            {"CEDAR",   CARD_AMD_RADEON_HD5400},
-            /* R700 */
-            {"R700",    CARD_AMD_RADEON_HD4800},    /* HD4800 - highend */
-            {"RV790",   CARD_AMD_RADEON_HD4800},
-            {"RV770",   CARD_AMD_RADEON_HD4800},
-            {"RV740",   CARD_AMD_RADEON_HD4700},    /* HD4700 - midend */
-            {"RV730",   CARD_AMD_RADEON_HD4600},    /* HD4600 - midend */
-            {"RV710",   CARD_AMD_RADEON_HD4350},    /* HD4500/HD4350 - lowend */
-            /* R600/R700 integrated */
-            {"RS880",   CARD_AMD_RADEON_HD3200},
-            {"RS780",   CARD_AMD_RADEON_HD3200},
-            /* R600 */
-            {"R680",    CARD_AMD_RADEON_HD2900},    /* HD2900/HD3800 - highend */
-            {"R600",    CARD_AMD_RADEON_HD2900},
-            {"RV670",   CARD_AMD_RADEON_HD2900},
-            {"RV635",   CARD_AMD_RADEON_HD2600},    /* HD2600/HD3600 - midend; HD3830 is China-only midend */
-            {"RV630",   CARD_AMD_RADEON_HD2600},
-            {"RV620",   CARD_AMD_RADEON_HD2350},    /* HD2350/HD2400/HD3400 - lowend */
-            {"RV610",   CARD_AMD_RADEON_HD2350},
-            /* R500 */
-            {"R580",    CARD_AMD_RADEON_X1600},
-            {"R520",    CARD_AMD_RADEON_X1600},
-            {"RV570",   CARD_AMD_RADEON_X1600},
-            {"RV560",   CARD_AMD_RADEON_X1600},
-            {"RV535",   CARD_AMD_RADEON_X1600},
-            {"RV530",   CARD_AMD_RADEON_X1600},
-            {"RV516",   CARD_AMD_RADEON_X700},      /* X700 is actually R400. */
-            {"RV515",   CARD_AMD_RADEON_X700},
-            /* R400 */
-            {"R481",    CARD_AMD_RADEON_X700},
-            {"R480",    CARD_AMD_RADEON_X700},
-            {"R430",    CARD_AMD_RADEON_X700},
-            {"R423",    CARD_AMD_RADEON_X700},
-            {"R420",    CARD_AMD_RADEON_X700},
-            {"R410",    CARD_AMD_RADEON_X700},
-            {"RV410",   CARD_AMD_RADEON_X700},
-            /* Radeon Xpress - onboard, DX9b, Shader 2.0, 300-400MHz */
-            {"RS740",   CARD_AMD_RADEON_XPRESS_200M},
-            {"RS690",   CARD_AMD_RADEON_XPRESS_200M},
-            {"RS600",   CARD_AMD_RADEON_XPRESS_200M},
-            {"RS485",   CARD_AMD_RADEON_XPRESS_200M},
-            {"RS482",   CARD_AMD_RADEON_XPRESS_200M},
-            {"RS480",   CARD_AMD_RADEON_XPRESS_200M},
-            {"RS400",   CARD_AMD_RADEON_XPRESS_200M},
-            /* R300 */
-            {"R360",    CARD_AMD_RADEON_9500},
-            {"R350",    CARD_AMD_RADEON_9500},
-            {"R300",    CARD_AMD_RADEON_9500},
-            {"RV370",   CARD_AMD_RADEON_9500},
-            {"RV360",   CARD_AMD_RADEON_9500},
-            {"RV351",   CARD_AMD_RADEON_9500},
-            {"RV350",   CARD_AMD_RADEON_9500},
-        };
-
-        for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i)
-        {
-            if (strstr(gl_renderer, cards[i].renderer))
-                return cards[i].id;
-        }
-        return PCI_DEVICE_NONE;
+        const char *renderer;
+        enum wined3d_pci_device id;
     }
-
-    d3d_level = d3d_level_from_gl_info(gl_info);
-    if (d3d_level >= 9)
+    cards[] =
     {
-        static const struct
-        {
-            const char *renderer;
-            enum wined3d_pci_device id;
-        }
-        cards[] =
-        {
-            /* R700 */
-            {"(R700",   CARD_AMD_RADEON_HD4800},    /* HD4800 - highend */
-            {"(RV790",  CARD_AMD_RADEON_HD4800},
-            {"(RV770",  CARD_AMD_RADEON_HD4800},
-            {"(RV740",  CARD_AMD_RADEON_HD4700},    /* HD4700 - midend */
-            {"(RV730",  CARD_AMD_RADEON_HD4600},    /* HD4600 - midend */
-            {"(RV710",  CARD_AMD_RADEON_HD4350},    /* HD4500/HD4350 - lowend */
-            /* R600/R700 integrated */
-            {"RS880",   CARD_AMD_RADEON_HD3200},
-            {"RS780",   CARD_AMD_RADEON_HD3200},
-            /* R600 */
-            {"(R680",   CARD_AMD_RADEON_HD2900},    /* HD2900/HD3800 - highend */
-            {"(R600",   CARD_AMD_RADEON_HD2900},
-            {"(RV670",  CARD_AMD_RADEON_HD2900},
-            {"(RV635",  CARD_AMD_RADEON_HD2600},    /* HD2600/HD3600 - midend; HD3830 is China-only midend */
-            {"(RV630",  CARD_AMD_RADEON_HD2600},
-            {"(RV620",  CARD_AMD_RADEON_HD2350},    /* HD2300/HD2400/HD3400 - lowend */
-            {"(RV610",  CARD_AMD_RADEON_HD2350},
-        };
+        /* Southern Islands */
+        {"TAHITI",      CARD_AMD_RADEON_HD7900},
+        {"PITCAIRN",    CARD_AMD_RADEON_HD7800},
+        {"CAPE VERDE",  CARD_AMD_RADEON_HD7700},
+        /* Northern Islands */
+        {"CAYMAN",      CARD_AMD_RADEON_HD6900},
+        {"BARTS",       CARD_AMD_RADEON_HD6800},
+        {"TURKS",       CARD_AMD_RADEON_HD6600},
+        {"SUMO2",       CARD_AMD_RADEON_HD6410D},   /* SUMO2 first, because we do a strstr(). */
+        {"SUMO",        CARD_AMD_RADEON_HD6550D},
+        {"CAICOS",      CARD_AMD_RADEON_HD6400},
+        {"PALM",        CARD_AMD_RADEON_HD6300},
+        /* Evergreen */
+        {"HEMLOCK",     CARD_AMD_RADEON_HD5900},
+        {"CYPRESS",     CARD_AMD_RADEON_HD5800},
+        {"JUNIPER",     CARD_AMD_RADEON_HD5700},
+        {"REDWOOD",     CARD_AMD_RADEON_HD5600},
+        {"CEDAR",       CARD_AMD_RADEON_HD5400},
+        /* R700 */
+        {"R700",        CARD_AMD_RADEON_HD4800},
+        {"RV790",       CARD_AMD_RADEON_HD4800},
+        {"RV770",       CARD_AMD_RADEON_HD4800},
+        {"RV740",       CARD_AMD_RADEON_HD4700},
+        {"RV730",       CARD_AMD_RADEON_HD4600},
+        {"RV710",       CARD_AMD_RADEON_HD4350},
+        /* R600/R700 integrated */
+        {"RS880",       CARD_AMD_RADEON_HD3200},
+        {"RS780",       CARD_AMD_RADEON_HD3200},
+        /* R600 */
+        {"R680",        CARD_AMD_RADEON_HD2900},
+        {"R600",        CARD_AMD_RADEON_HD2900},
+        {"RV670",       CARD_AMD_RADEON_HD2900},
+        {"RV635",       CARD_AMD_RADEON_HD2600},
+        {"RV630",       CARD_AMD_RADEON_HD2600},
+        {"RV620",       CARD_AMD_RADEON_HD2350},
+        {"RV610",       CARD_AMD_RADEON_HD2350},
+        /* R500 */
+        {"R580",        CARD_AMD_RADEON_X1600},
+        {"R520",        CARD_AMD_RADEON_X1600},
+        {"RV570",       CARD_AMD_RADEON_X1600},
+        {"RV560",       CARD_AMD_RADEON_X1600},
+        {"RV535",       CARD_AMD_RADEON_X1600},
+        {"RV530",       CARD_AMD_RADEON_X1600},
+        {"RV516",       CARD_AMD_RADEON_X700},
+        {"RV515",       CARD_AMD_RADEON_X700},
+        /* R400 */
+        {"R481",        CARD_AMD_RADEON_X700},
+        {"R480",        CARD_AMD_RADEON_X700},
+        {"R430",        CARD_AMD_RADEON_X700},
+        {"R423",        CARD_AMD_RADEON_X700},
+        {"R420",        CARD_AMD_RADEON_X700},
+        {"R410",        CARD_AMD_RADEON_X700},
+        {"RV410",       CARD_AMD_RADEON_X700},
+        /* Radeon Xpress - onboard, DX9b, Shader 2.0, 300-400MHz */
+        {"RS740",       CARD_AMD_RADEON_XPRESS_200M},
+        {"RS690",       CARD_AMD_RADEON_XPRESS_200M},
+        {"RS600",       CARD_AMD_RADEON_XPRESS_200M},
+        {"RS485",       CARD_AMD_RADEON_XPRESS_200M},
+        {"RS482",       CARD_AMD_RADEON_XPRESS_200M},
+        {"RS480",       CARD_AMD_RADEON_XPRESS_200M},
+        {"RS400",       CARD_AMD_RADEON_XPRESS_200M},
+        /* R300 */
+        {"R360",        CARD_AMD_RADEON_9500},
+        {"R350",        CARD_AMD_RADEON_9500},
+        {"R300",        CARD_AMD_RADEON_9500},
+        {"RV370",       CARD_AMD_RADEON_9500},
+        {"RV360",       CARD_AMD_RADEON_9500},
+        {"RV351",       CARD_AMD_RADEON_9500},
+        {"RV350",       CARD_AMD_RADEON_9500},
+    };
 
-        for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i)
-        {
-            if (strstr(gl_renderer, cards[i].renderer))
-                return cards[i].id;
-        }
+    for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i)
+    {
+        if (strstr(gl_renderer, cards[i].renderer))
+            return cards[i].id;
     }
+
     return PCI_DEVICE_NONE;
 }
 
-- 
1.7.8.6




More information about the wine-patches mailing list