[PATCH 1/6] dxgi: Introduce wined3d_feature_level_from_d3d() helper function.
Józef Kucia
jkucia at codeweavers.com
Sun Sep 23 18:09:28 CDT 2018
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
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 aed62a4a3b36..e857a1f090f5 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;
}
--
2.16.4
More information about the wine-devel
mailing list