Module: wine Branch: refs/heads/master Commit: d2510847b0751a8e4a97645c6bd31a97f890fb5d URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=d2510847b0751a8e4a97645c...
Author: Stefan Dösinger stefan@codeweavers.com Date: Wed Apr 12 21:08:57 2006 +0200
wined3d: Split device creation and opengl initialization.
---
dlls/d3d8/device.c | 3 +++ dlls/d3d8/directx.c | 18 ++++++++++++++---- dlls/d3d9/device.c | 3 +++ dlls/d3d9/directx.c | 15 ++++++++++++--- dlls/wined3d/device.c | 12 ++++++++++++ include/wine/wined3d_interface.h | 2 ++ 6 files changed, 46 insertions(+), 7 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 2590498..1d4ce68 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -69,6 +69,9 @@ ULONG WINAPI IDirect3DDevice8Impl_Releas
if (ref == 0) { TRACE("Releasing wined3d device %p\n", This->WineD3DDevice); + /* Activate this when it's implemented in wined3d(d3d7 merge) + IWineD3DDevice_Uninit3D(This->WineD3DDevice); + */ IWineD3DDevice_Release(This->WineD3DDevice); HeapFree(GetProcessHeap(), 0, This); } diff --git a/dlls/d3d8/directx.c b/dlls/d3d8/directx.c index 3668afa..a0f56c8 100644 --- a/dlls/d3d8/directx.c +++ b/dlls/d3d8/directx.c @@ -324,13 +324,23 @@ HRESULT WINAPI IDirect3D8Impl_CreateDe localParameters.PresentationInterval = &pPresentationParameters->FullScreen_PresentationInterval;/* Renamed in dx9 */
hr =IWineD3D_CreateDevice(This->WineD3D, Adapter, DeviceType, hFocusWindow, BehaviourFlags, &localParameters, &object->WineD3DDevice, (IUnknown *)object, D3D8CB_CreateAdditionalSwapChain); - - if (hr == D3D_OK) { - TRACE("(%p) : Created Device %p\n", This, object); - } else { + + if (hr != D3D_OK) { + HeapFree(GetProcessHeap(), 0, object); + *ppReturnedDeviceInterface = NULL; + return hr; + } + + TRACE("(%p) : Created Device %p\n", This, object); + + /* Activate this when it's implemented in wined3d(d3d7 merge) + hr = IWineD3DDevice_Init3D(object->WineD3DDevice, &localParameters, D3D8CB_CreateAdditionalSwapChain); + if (hr != D3D_OK) { + FIXME("(%p) D3D Initialization failed for WineD3DDevice %p\n", This, object->WineD3DDevice); HeapFree(GetProcessHeap(), 0, object); *ppReturnedDeviceInterface = NULL; } + */
return hr; } diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index cd1a5cd..7aa1337 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -57,6 +57,9 @@ ULONG WINAPI IDirect3DDevice9Impl_Releas TRACE("(%p) : ReleaseRef to %ld\n", This, ref);
if (ref == 0) { + /* Activate this when it's implemented in WineD3D(d3d7 merge) + IWineD3DDevice_Uninit3D(This->WineD3DDevice); + */ IWineD3DDevice_Release(This->WineD3DDevice); HeapFree(GetProcessHeap(), 0, This); } diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c index d948637..fda6bc5 100644 --- a/dlls/d3d9/directx.c +++ b/dlls/d3d9/directx.c @@ -309,13 +309,22 @@ HRESULT WINAPI IDirect3D9Impl_CreateDe
hr =IWineD3D_CreateDevice(This->WineD3D, Adapter, DeviceType, hFocusWindow, BehaviourFlags, &localParameters, &object->WineD3DDevice, (IUnknown *)object, D3D9CB_CreateAdditionalSwapChain);
- if (hr == D3D_OK) { + if (hr != D3D_OK) { + HeapFree(GetProcessHeap(), 0, object); + *ppReturnedDeviceInterface = NULL; + return hr; + } + + TRACE("(%p) : Created Device %p\n", This, object);
- TRACE("(%p) : Created Device %p\n", This, object); - } else { + /* Activate this when it's implemented in wined3d(d3d7 merge) + hr = IWineD3DDevice_Init3D(object->WineD3DDevice, &localParameters, D3D8CB_CreateAdditionalSwapChain); + if (hr != D3D_OK) { + FIXME("(%p) D3D Initialization failed for WineD3DDevice %p\n", This, object->WineD3DDevice); HeapFree(GetProcessHeap(), 0, object); *ppReturnedDeviceInterface = NULL; } + */ return hr; }
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 3626b88..a7362e7 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1668,6 +1668,16 @@ HRESULT WINAPI IWineD3DDeviceImpl_Create return hr; }
+HRESULT WINAPI IWineD3DDeviceImpl_Init3D(IWineD3DDevice *iface, WINED3DPRESENT_PARAMETERS* pPresentationParameters, D3DCB_CREATEADDITIONALSWAPCHAIN D3DCB_CreateAdditionalSwapChain) { + FIXME("This call is a d3d7 merge stub. It will be implemented later\n"); + return WINED3DERR_INVALIDCALL; +} + +HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface) { + FIXME("This call is a d3d7 merge stub. It will be implemented later\n"); + return WINED3DERR_INVALIDCALL; +} + HRESULT WINAPI IWineD3DDeviceImpl_GetDirect3D(IWineD3DDevice *iface, IWineD3D **ppD3D) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; *ppD3D= This->wineD3D; @@ -6792,6 +6802,8 @@ const IWineD3DDeviceVtbl IWineD3DDevice_ IWineD3DDeviceImpl_CreateVertexShader, IWineD3DDeviceImpl_CreatePixelShader, /*** Odd functions **/ + IWineD3DDeviceImpl_Init3D, + IWineD3DDeviceImpl_Uninit3D, IWineD3DDeviceImpl_EvictManagedResources, IWineD3DDeviceImpl_GetAvailableTextureMem, IWineD3DDeviceImpl_GetBackBuffer, diff --git a/include/wine/wined3d_interface.h b/include/wine/wined3d_interface.h index 2037fc8..429a0c6 100644 --- a/include/wine/wined3d_interface.h +++ b/include/wine/wined3d_interface.h @@ -362,6 +362,8 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD STDMETHOD(CreateVertexDeclaration)(THIS_ CONST VOID* pDeclaration, struct IWineD3DVertexDeclaration** ppDecl, IUnknown* pParent) PURE; STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD *pDeclaration, CONST DWORD* pFunction, struct IWineD3DVertexShader** ppShader, IUnknown *pParent) PURE; STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, struct IWineD3DPixelShader** ppShader, IUnknown *pParent) PURE; + STDMETHOD(Init3D)(THIS_ WINED3DPRESENT_PARAMETERS* pPresentationParameters, D3DCB_CREATEADDITIONALSWAPCHAIN D3DCB_CreateAdditionalSwapChain); + STDMETHOD(Uninit3D)(THIS); STDMETHOD(EvictManagedResources)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT BackBuffer, WINED3DBACKBUFFER_TYPE, struct IWineD3DSurface** ppBackBuffer) PURE;