=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: dxgi: Introduce wined3d_feature_level_from_d3d() helper function.

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


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

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

dxgi: Introduce wined3d_feature_level_from_d3d() helper function.

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/dxgi/utils.c | 75 ++++++++++++++++++++++++++-----------------------------
 1 file changed, 36 insertions(+), 39 deletions(-)

diff --git a/dlls/dxgi/utils.c b/dlls/dxgi/utils.c
index aed62a4..e857a1f 100644
--- a/dlls/dxgi/utils.c
+++ b/dlls/dxgi/utils.c
@@ -621,27 +621,36 @@ HRESULT dxgi_set_private_data_interface(struct wined3d_private_store *store,
     return hr;
 }
 
-D3D_FEATURE_LEVEL dxgi_check_feature_level_support(struct dxgi_factory *factory, struct dxgi_adapter *adapter,
-        const D3D_FEATURE_LEVEL *feature_levels, unsigned int level_count)
+static enum wined3d_feature_level wined3d_feature_level_from_d3d(D3D_FEATURE_LEVEL feature_level)
 {
-    static const struct
+    switch (feature_level)
     {
-        D3D_FEATURE_LEVEL d3d;
-        enum wined3d_feature_level wined3d;
+        case D3D_FEATURE_LEVEL_11_1:
+            return WINED3D_FEATURE_LEVEL_11;
+        case D3D_FEATURE_LEVEL_11_0:
+            return WINED3D_FEATURE_LEVEL_11;
+        case D3D_FEATURE_LEVEL_10_1:
+            return WINED3D_FEATURE_LEVEL_10;
+        case D3D_FEATURE_LEVEL_10_0:
+            return WINED3D_FEATURE_LEVEL_10;
+        case D3D_FEATURE_LEVEL_9_3:
+            return WINED3D_FEATURE_LEVEL_9_SM3;
+        case D3D_FEATURE_LEVEL_9_2:
+            return WINED3D_FEATURE_LEVEL_9_SM2;
+        case D3D_FEATURE_LEVEL_9_1:
+            return WINED3D_FEATURE_LEVEL_9_SM2;
+        default:
+            FIXME("Unhandled feature level %#x.\n", feature_level);
+            return 0;
     }
-    wined3d_feature_levels[] =
-    {
-        {D3D_FEATURE_LEVEL_11_1, WINED3D_FEATURE_LEVEL_11},
-        {D3D_FEATURE_LEVEL_11_0, WINED3D_FEATURE_LEVEL_11},
-        {D3D_FEATURE_LEVEL_10_1, WINED3D_FEATURE_LEVEL_10},
-        {D3D_FEATURE_LEVEL_10_0, WINED3D_FEATURE_LEVEL_10},
-        {D3D_FEATURE_LEVEL_9_3,  WINED3D_FEATURE_LEVEL_9_SM3},
-        {D3D_FEATURE_LEVEL_9_2,  WINED3D_FEATURE_LEVEL_9_SM2},
-        {D3D_FEATURE_LEVEL_9_1,  WINED3D_FEATURE_LEVEL_9_SM2},
-    };
-    D3D_FEATURE_LEVEL selected_feature_level = 0;
+}
+
+D3D_FEATURE_LEVEL dxgi_check_feature_level_support(struct dxgi_factory *factory, struct dxgi_adapter *adapter,
+        const D3D_FEATURE_LEVEL *feature_levels, unsigned int level_count)
+{
+    enum wined3d_feature_level wined3d_feature_level;
     struct wined3d_caps caps;
-    unsigned int i, j;
+    unsigned int i;
     HRESULT hr;
 
     wined3d_mutex_lock();
@@ -653,31 +662,19 @@ D3D_FEATURE_LEVEL dxgi_check_feature_level_support(struct dxgi_factory *factory,
 
     for (i = 0; i < level_count; ++i)
     {
-        for (j = 0; j < ARRAY_SIZE(wined3d_feature_levels); ++j)
+        wined3d_feature_level = wined3d_feature_level_from_d3d(feature_levels[i]);
+        if (wined3d_feature_level && caps.max_feature_level >= wined3d_feature_level)
         {
-            if (feature_levels[i] == wined3d_feature_levels[j].d3d)
-            {
-                if (caps.max_feature_level >= wined3d_feature_levels[j].wined3d)
-                {
-                    selected_feature_level = feature_levels[i];
-                    TRACE("Choosing supported feature level %s.\n",
-                            debug_feature_level(selected_feature_level));
-                }
-                break;
-            }
+            TRACE("Choosing supported feature level %s.\n",
+                    debug_feature_level(feature_levels[i]));
+            return feature_levels[i];
         }
-        if (selected_feature_level)
-            break;
 
-        if (j == ARRAY_SIZE(wined3d_feature_levels))
-            FIXME("Unexpected feature level %#x.\n", feature_levels[i]);
-        else
-            TRACE("Feature level %s not supported, trying next fallback if available.\n",
-                    debug_feature_level(feature_levels[i]));
+        TRACE("Feature level %s not supported, trying next fallback if available.\n",
+                debug_feature_level(feature_levels[i]));
     }
-    if (!selected_feature_level)
-        FIXME_(winediag)("None of the requested D3D feature levels is supported on this GPU "
-                "with the current shader backend.\n");
 
-    return selected_feature_level;
+    FIXME_(winediag)("None of the requested D3D feature levels is supported on this GPU "
+            "with the current shader backend.\n");
+    return 0;
 }




More information about the wine-cvs mailing list