[PATCH 2/5] dxgi: Merge dxgi_check_feature_level_support() into dxgi_adapter_CheckInterfaceSupport().
Józef Kucia
jkucia at codeweavers.com
Tue Sep 25 03:33:22 CDT 2018
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
dlls/dxgi/adapter.c | 30 ++++++++++++++------------
dlls/dxgi/dxgi_private.h | 3 ---
dlls/dxgi/utils.c | 56 ------------------------------------------------
3 files changed, 16 insertions(+), 73 deletions(-)
diff --git a/dlls/dxgi/adapter.c b/dlls/dxgi/adapter.c
index 1f81d7717e1b..4bc57a244d1f 100644
--- a/dlls/dxgi/adapter.c
+++ b/dlls/dxgi/adapter.c
@@ -209,9 +209,10 @@ static HRESULT STDMETHODCALLTYPE dxgi_adapter_GetDesc(IWineDXGIAdapter *iface, D
static HRESULT STDMETHODCALLTYPE dxgi_adapter_CheckInterfaceSupport(IWineDXGIAdapter *iface,
REFGUID guid, LARGE_INTEGER *umd_version)
{
- static const D3D_FEATURE_LEVEL feature_level = D3D_FEATURE_LEVEL_10_0;
struct dxgi_adapter *adapter = impl_from_IWineDXGIAdapter(iface);
struct wined3d_adapter_identifier adapter_id;
+ struct wined3d_caps caps;
+ struct wined3d *wined3d;
HRESULT hr;
TRACE("iface %p, guid %s, umd_version %p.\n", iface, debugstr_guid(guid), umd_version);
@@ -224,23 +225,24 @@ static HRESULT STDMETHODCALLTYPE dxgi_adapter_CheckInterfaceSupport(IWineDXGIAda
return DXGI_ERROR_UNSUPPORTED;
}
- if (!dxgi_check_feature_level_support(adapter->factory, adapter, &feature_level, 1))
- return DXGI_ERROR_UNSUPPORTED;
+ adapter_id.driver_size = 0;
+ adapter_id.description_size = 0;
+ adapter_id.device_name_size = 0;
- if (umd_version)
- {
- adapter_id.driver_size = 0;
- adapter_id.description_size = 0;
- adapter_id.device_name_size = 0;
+ wined3d_mutex_lock();
+ wined3d = adapter->factory->wined3d;
+ hr = wined3d_get_device_caps(wined3d, adapter->ordinal, WINED3D_DEVICE_TYPE_HAL, &caps);
+ if (SUCCEEDED(hr))
+ hr = wined3d_get_adapter_identifier(wined3d, adapter->ordinal, 0, &adapter_id);
+ wined3d_mutex_unlock();
- wined3d_mutex_lock();
- hr = wined3d_get_adapter_identifier(adapter->factory->wined3d, adapter->ordinal, 0, &adapter_id);
- wined3d_mutex_unlock();
- if (FAILED(hr))
- return hr;
+ if (FAILED(hr))
+ return hr;
+ if (caps.max_feature_level < WINED3D_FEATURE_LEVEL_10)
+ return DXGI_ERROR_UNSUPPORTED;
+ if (umd_version)
*umd_version = adapter_id.driver_version;
- }
return S_OK;
}
diff --git a/dlls/dxgi/dxgi_private.h b/dlls/dxgi/dxgi_private.h
index 8c3e41a390bb..78f188634fcb 100644
--- a/dlls/dxgi/dxgi_private.h
+++ b/dlls/dxgi/dxgi_private.h
@@ -199,7 +199,4 @@ struct dxgi_surface
HRESULT dxgi_surface_init(struct dxgi_surface *surface, IDXGIDevice *device,
IUnknown *outer, struct wined3d_texture *wined3d_texture) DECLSPEC_HIDDEN;
-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) DECLSPEC_HIDDEN;
-
#endif /* __WINE_DXGI_PRIVATE_H */
diff --git a/dlls/dxgi/utils.c b/dlls/dxgi/utils.c
index ad8e2a23f2ae..73b37fda8b57 100644
--- a/dlls/dxgi/utils.c
+++ b/dlls/dxgi/utils.c
@@ -619,59 +619,3 @@ HRESULT dxgi_set_private_data_interface(struct wined3d_private_store *store,
return hr;
}
-
-static enum wined3d_feature_level wined3d_feature_level_from_d3d(D3D_FEATURE_LEVEL feature_level)
-{
- switch (feature_level)
- {
- case D3D_FEATURE_LEVEL_11_1:
- return WINED3D_FEATURE_LEVEL_11_1;
- case D3D_FEATURE_LEVEL_11_0:
- return WINED3D_FEATURE_LEVEL_11;
- case D3D_FEATURE_LEVEL_10_1:
- return WINED3D_FEATURE_LEVEL_10_1;
- 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_1;
- default:
- FIXME("Unhandled feature level %#x.\n", feature_level);
- return 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;
- HRESULT hr;
-
- wined3d_mutex_lock();
- hr = wined3d_get_device_caps(factory->wined3d, adapter->ordinal, WINED3D_DEVICE_TYPE_HAL, &caps);
- wined3d_mutex_unlock();
-
- if (FAILED(hr))
- level_count = 0;
-
- for (i = 0; i < level_count; ++i)
- {
- wined3d_feature_level = wined3d_feature_level_from_d3d(feature_levels[i]);
- if (wined3d_feature_level && caps.max_feature_level >= wined3d_feature_level)
- {
- TRACE("Choosing supported feature level %s.\n",
- debug_feature_level(feature_levels[i]));
- return feature_levels[i];
- }
-
- TRACE("Feature level %s not supported, trying next fallback if available.\n",
- debug_feature_level(feature_levels[i]));
- }
-
- return 0;
-}
--
2.16.4
More information about the wine-devel
mailing list