From 8af1c6ee19200d572f9c0311efb1bc41717ff112 Mon Sep 17 00:00:00 2001 From: Matteo Bruni Date: Tue, 25 Oct 2011 16:58:46 +0200 Subject: [PATCH] dxgi: Refuse to create a D3D10 wined3d device if it is not supported by the GPU. --- dlls/dxgi/device.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dlls/dxgi/device.c b/dlls/dxgi/device.c index 9c944344240..6b202356170 100644 --- a/dlls/dxgi/device.c +++ b/dlls/dxgi/device.c @@ -353,6 +353,7 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l struct wined3d *wined3d; void *layer_base; HRESULT hr; + WINED3DCAPS caps; device->IWineDXGIDevice_iface.lpVtbl = &dxgi_device_vtbl; device->refcount = 1; @@ -398,6 +399,16 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l wined3d_device_parent = IWineDXGIDeviceParent_get_wined3d_device_parent(dxgi_device_parent); FIXME("Ignoring adapter type.\n"); + + hr = wined3d_get_device_caps(wined3d, adapter_ordinal, WINED3DDEVTYPE_HAL, &caps); + if (FAILED(hr) || caps.VertexShaderVersion < 4 || caps.PixelShaderVersion < 4) + { + WARN("Direct3D 10 is not supported on this GPU with the current shader backend.\n"); + if (SUCCEEDED(hr)) + hr = E_FAIL; + goto fail; + } + EnterCriticalSection(&dxgi_cs); hr = wined3d_device_create(wined3d, adapter_ordinal, WINED3DDEVTYPE_HAL, NULL, 0, 4, wined3d_device_parent, &device->wined3d_device);