=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Make feature level enum compatible with Direct3D enum.

Alexandre Julliard julliard at winehq.org
Mon Sep 24 15:48:23 CDT 2018


Module: wine
Branch: master
Commit: 0fbac19e604eb132d3136eb8d5210ac226b6c556
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0fbac19e604eb132d3136eb8d5210ac226b6c556

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Mon Sep 24 01:09:29 2018 +0200

wined3d: Make feature level enum compatible with Direct3D enum.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/directx.c | 89 ++++++++++++++++++++++++++++++--------------------
 include/wine/wined3d.h | 18 +++++-----
 2 files changed, 62 insertions(+), 45 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 02ca3f6..a8986b0 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -617,49 +617,52 @@ void wined3d_driver_info_init(struct wined3d_driver_info *driver_info,
 enum wined3d_pci_device wined3d_gpu_from_feature_level(enum wined3d_pci_vendor *vendor,
         enum wined3d_feature_level feature_level)
 {
-    unsigned int i;
-
-    static const enum wined3d_pci_device card_fallback_nvidia[] =
-    {
-        CARD_NVIDIA_RIVA_128,           /* D3D5 */
-        CARD_NVIDIA_RIVA_TNT,           /* D3D6 */
-        CARD_NVIDIA_GEFORCE,            /* D3D7 */
-        CARD_NVIDIA_GEFORCE3,           /* D3D8 */
-        CARD_NVIDIA_GEFORCEFX_5800,     /* D3D9_SM2 */
-        CARD_NVIDIA_GEFORCE_6800,       /* D3D9_SM3 */
-        CARD_NVIDIA_GEFORCE_8800GTX,    /* D3D10 */
-        CARD_NVIDIA_GEFORCE_GTX470,     /* D3D11 */
+    static const struct wined3d_fallback_card
+    {
+        enum wined3d_feature_level feature_level;
+        enum wined3d_pci_device device_id;
+    }
+    card_fallback_nvidia[] =
+    {
+        {WINED3D_FEATURE_LEVEL_5,     CARD_NVIDIA_RIVA_128},
+        {WINED3D_FEATURE_LEVEL_6,     CARD_NVIDIA_RIVA_TNT},
+        {WINED3D_FEATURE_LEVEL_7,     CARD_NVIDIA_GEFORCE},
+        {WINED3D_FEATURE_LEVEL_8,     CARD_NVIDIA_GEFORCE3},
+        {WINED3D_FEATURE_LEVEL_9_SM2, CARD_NVIDIA_GEFORCEFX_5800},
+        {WINED3D_FEATURE_LEVEL_9_SM3, CARD_NVIDIA_GEFORCE_6800},
+        {WINED3D_FEATURE_LEVEL_10,    CARD_NVIDIA_GEFORCE_8800GTX},
+        {WINED3D_FEATURE_LEVEL_11,    CARD_NVIDIA_GEFORCE_GTX470},
+        {WINED3D_FEATURE_LEVEL_NONE},
     },
     card_fallback_amd[] =
     {
-        CARD_AMD_RAGE_128PRO,           /* D3D5 */
-        CARD_AMD_RAGE_128PRO,           /* D3D6 */
-        CARD_AMD_RADEON_7200,           /* D3D7 */
-        CARD_AMD_RADEON_8500,           /* D3D8 */
-        CARD_AMD_RADEON_9500,           /* D3D9_SM2 */
-        CARD_AMD_RADEON_X1600,          /* D3D9_SM3 */
-        CARD_AMD_RADEON_HD2900,         /* D3D10 */
-        CARD_AMD_RADEON_HD5600,         /* D3D11 */
+        {WINED3D_FEATURE_LEVEL_5,     CARD_AMD_RAGE_128PRO},
+        {WINED3D_FEATURE_LEVEL_6,     CARD_AMD_RAGE_128PRO},
+        {WINED3D_FEATURE_LEVEL_7,     CARD_AMD_RADEON_7200},
+        {WINED3D_FEATURE_LEVEL_8,     CARD_AMD_RADEON_8500},
+        {WINED3D_FEATURE_LEVEL_9_SM2, CARD_AMD_RADEON_9500},
+        {WINED3D_FEATURE_LEVEL_9_SM3, CARD_AMD_RADEON_X1600},
+        {WINED3D_FEATURE_LEVEL_10,    CARD_AMD_RADEON_HD2900},
+        {WINED3D_FEATURE_LEVEL_11,    CARD_AMD_RADEON_HD5600},
+        {WINED3D_FEATURE_LEVEL_NONE},
     },
     card_fallback_intel[] =
     {
-        CARD_INTEL_845G,                /* D3D5 */
-        CARD_INTEL_845G,                /* D3D6 */
-        CARD_INTEL_845G,                /* D3D7 */
-        CARD_INTEL_915G,                /* D3D8 */
-        CARD_INTEL_915G,                /* D3D9_SM2 */
-        CARD_INTEL_945G,                /* D3D9_SM3 */
-        CARD_INTEL_G45,                 /* D3D10 */
-        CARD_INTEL_IVBD,                /* D3D11 */
+        {WINED3D_FEATURE_LEVEL_5,     CARD_INTEL_845G},
+        {WINED3D_FEATURE_LEVEL_6,     CARD_INTEL_845G},
+        {WINED3D_FEATURE_LEVEL_7,     CARD_INTEL_845G},
+        {WINED3D_FEATURE_LEVEL_8,     CARD_INTEL_915G},
+        {WINED3D_FEATURE_LEVEL_9_SM2, CARD_INTEL_915G},
+        {WINED3D_FEATURE_LEVEL_9_SM3, CARD_INTEL_945G},
+        {WINED3D_FEATURE_LEVEL_10,    CARD_INTEL_G45},
+        {WINED3D_FEATURE_LEVEL_11,    CARD_INTEL_IVBD},
+        {WINED3D_FEATURE_LEVEL_NONE},
     };
-    C_ASSERT(ARRAY_SIZE(card_fallback_nvidia)  == WINED3D_FEATURE_LEVEL_COUNT);
-    C_ASSERT(ARRAY_SIZE(card_fallback_amd)     == WINED3D_FEATURE_LEVEL_COUNT);
-    C_ASSERT(ARRAY_SIZE(card_fallback_intel)   == WINED3D_FEATURE_LEVEL_COUNT);
 
     static const struct
     {
         enum wined3d_pci_vendor vendor;
-        const enum wined3d_pci_device *device;
+        const struct wined3d_fallback_card *cards;
     }
     fallbacks[] =
     {
@@ -669,15 +672,29 @@ enum wined3d_pci_device wined3d_gpu_from_feature_level(enum wined3d_pci_vendor *
         {HW_VENDOR_INTEL,  card_fallback_intel},
     };
 
+    const struct wined3d_fallback_card *cards;
+    enum wined3d_pci_device device_id;
+    unsigned int i;
+
+    cards = NULL;
     for (i = 0; i < ARRAY_SIZE(fallbacks); ++i)
     {
         if (*vendor == fallbacks[i].vendor)
-            return fallbacks[i].device[feature_level];
+            cards = fallbacks[i].cards;
+    }
+    if (!cards)
+    {
+        *vendor = HW_VENDOR_NVIDIA;
+        cards = card_fallback_nvidia;
     }
 
-    *vendor = HW_VENDOR_NVIDIA;
-
-    return card_fallback_nvidia[feature_level];
+    device_id = cards->device_id;
+    for (i = 0; cards[i].feature_level; ++i)
+    {
+        if (feature_level >= cards[i].feature_level)
+            device_id = cards[i].device_id;
+    }
+    return device_id;
 }
 
 UINT CDECL wined3d_get_adapter_count(const struct wined3d *wined3d)
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index ac7e3dd..3c01f75 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -90,15 +90,15 @@ enum wined3d_device_type
 
 enum wined3d_feature_level
 {
-    WINED3D_FEATURE_LEVEL_5,
-    WINED3D_FEATURE_LEVEL_6,
-    WINED3D_FEATURE_LEVEL_7,
-    WINED3D_FEATURE_LEVEL_8,
-    WINED3D_FEATURE_LEVEL_9_SM2,
-    WINED3D_FEATURE_LEVEL_9_SM3,
-    WINED3D_FEATURE_LEVEL_10,
-    WINED3D_FEATURE_LEVEL_11,
-    WINED3D_FEATURE_LEVEL_COUNT
+    WINED3D_FEATURE_LEVEL_NONE   = 0x0000,
+    WINED3D_FEATURE_LEVEL_5      = 0x5000,
+    WINED3D_FEATURE_LEVEL_6      = 0x6000,
+    WINED3D_FEATURE_LEVEL_7      = 0x7000,
+    WINED3D_FEATURE_LEVEL_8      = 0x8000,
+    WINED3D_FEATURE_LEVEL_9_SM2  = 0x9200,
+    WINED3D_FEATURE_LEVEL_9_SM3  = 0x9300,
+    WINED3D_FEATURE_LEVEL_10     = 0xa000,
+    WINED3D_FEATURE_LEVEL_11     = 0xb000,
 };
 
 enum wined3d_degree_type




More information about the wine-cvs mailing list