Commit 12788f6f authored by Stefan Dösinger's avatar Stefan Dösinger Committed by Alexandre Julliard

wined3d: Do not fail if the adapter info can't be initialized.

parent 59efd5c7
...@@ -716,7 +716,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateSurface(IWineD3DDevice *iface, U ...@@ -716,7 +716,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateSurface(IWineD3DDevice *iface, U
/* Look at the implementation and set the correct Vtable */ /* Look at the implementation and set the correct Vtable */
switch(Impl) { switch(Impl) {
case SURFACE_OPENGL: case SURFACE_OPENGL:
/* Nothing to do, it's set already */ /* Check if a 3D adapter is available when creating gl surfaces */
if(!This->adapter) {
ERR("OpenGL surfaces are not available without opengl\n");
HeapFree(GetProcessHeap(), 0, object->resource.allocatedMemory);
HeapFree(GetProcessHeap(), 0, object);
return WINED3DERR_NOTAVAILABLE;
}
break; break;
case SURFACE_GDI: case SURFACE_GDI:
......
...@@ -2418,8 +2418,10 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter, ...@@ -2418,8 +2418,10 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter,
HDC hDC; HDC hDC;
int i; int i;
/* Validate the adapter number */ /* Validate the adapter number. If no adapters are available(no GL), ignore the adapter
if (Adapter >= IWineD3D_GetAdapterCount(iface)) { * number and create a device without a 3D adapter for 2D only operation.
*/
if (IWineD3D_GetAdapterCount(iface) && Adapter >= IWineD3D_GetAdapterCount(iface)) {
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
} }
...@@ -2435,7 +2437,7 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter, ...@@ -2435,7 +2437,7 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter,
object->lpVtbl = &IWineD3DDevice_Vtbl; object->lpVtbl = &IWineD3DDevice_Vtbl;
object->ref = 1; object->ref = 1;
object->wineD3D = iface; object->wineD3D = iface;
object->adapter = &Adapters[Adapter]; object->adapter = numAdapters ? &Adapters[Adapter] : NULL;
IWineD3D_AddRef(object->wineD3D); IWineD3D_AddRef(object->wineD3D);
object->parent = parent; object->parent = parent;
......
...@@ -62,8 +62,11 @@ IWineD3D* WINAPI WineDirect3DCreate(UINT SDKVersion, UINT dxVersion, IUnknown *p ...@@ -62,8 +62,11 @@ IWineD3D* WINAPI WineDirect3DCreate(UINT SDKVersion, UINT dxVersion, IUnknown *p
IWineD3DImpl* object; IWineD3DImpl* object;
if (!InitAdapters()) { if (!InitAdapters()) {
ERR("Failed to initialize direct3d adapters\n"); WARN("Failed to initialize direct3d adapters, Direct3D will not be available\n");
return NULL; if(dxVersion > 7) {
ERR("Direct3D%d is not available without opengl\n", dxVersion);
return NULL;
}
} }
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DImpl)); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DImpl));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment