Module: wine Branch: master Commit: 8ffca99fb00a44e12590a7429e5eaf5ff5b5349f URL: http://source.winehq.org/git/wine.git/?a=commit;h=8ffca99fb00a44e12590a7429e...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Sep 16 08:37:17 2009 +0200
d3d9: Add a separate function for volume initialization.
---
dlls/d3d9/d3d9_private.h | 4 +++- dlls/d3d9/device.c | 10 +++------- dlls/d3d9/volume.c | 21 ++++++++++++++++++++- 3 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h index 494a6f3..c50f4d7 100644 --- a/dlls/d3d9/d3d9_private.h +++ b/dlls/d3d9/d3d9_private.h @@ -236,7 +236,6 @@ extern HRESULT WINAPI IDirect3DDevice9Impl_CreateQuery(LPDIRECT3DDEVICE9EX ifa /***************************************************************************** * IDirect3DVolume9 implementation structure */ -extern const IDirect3DVolume9Vtbl Direct3DVolume9_Vtbl; typedef struct IDirect3DVolume9Impl { /* IUnknown fields */ @@ -253,6 +252,9 @@ typedef struct IDirect3DVolume9Impl IUnknown *forwardReference; } IDirect3DVolume9Impl;
+HRESULT volume_init(IDirect3DVolume9Impl *volume, IDirect3DDevice9Impl *device, UINT width, UINT height, + UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool); + /* ------------------- */ /* IDirect3DSwapChain9 */ /* ------------------- */ diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index e681542..156490a 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -2149,15 +2149,11 @@ static HRESULT STDMETHODCALLTYPE device_parent_CreateVolume(IWineD3DDeviceParent return D3DERR_OUTOFVIDEOMEMORY; }
- object->lpVtbl = &Direct3DVolume9_Vtbl; - object->ref = 1; - hr = IWineD3DDevice_CreateVolume(This->WineD3DDevice, width, height, depth, usage & WINED3DUSAGE_MASK, - format, pool, &object->wineD3DVolume, (IUnknown *)object); + hr = volume_init(object, This, width, height, depth, usage, format, pool); if (FAILED(hr)) { - ERR("(%p) CreateVolume failed, returning %#x\n", iface, hr); + WARN("Failed to initialize volume, hr %#x.\n", hr); HeapFree(GetProcessHeap(), 0, object); - *volume = NULL; return hr; }
@@ -2165,7 +2161,7 @@ static HRESULT STDMETHODCALLTYPE device_parent_CreateVolume(IWineD3DDeviceParent object->container = superior; object->forwardReference = superior;
- TRACE("(%p) Created volume %p\n", iface, *volume); + TRACE("(%p) Created volume %p\n", iface, object);
return hr; } diff --git a/dlls/d3d9/volume.c b/dlls/d3d9/volume.c index 9f1252a..389da9e 100644 --- a/dlls/d3d9/volume.c +++ b/dlls/d3d9/volume.c @@ -223,7 +223,7 @@ static HRESULT WINAPI IDirect3DVolume9Impl_UnlockBox(LPDIRECT3DVOLUME9 iface) { return hr; }
-const IDirect3DVolume9Vtbl Direct3DVolume9_Vtbl = +static const IDirect3DVolume9Vtbl Direct3DVolume9_Vtbl = { /* IUnknown */ IDirect3DVolume9Impl_QueryInterface, @@ -249,3 +249,22 @@ ULONG WINAPI D3D9CB_DestroyVolume(IWineD3DVolume *pVolume) { volumeParent->forwardReference = NULL; return IDirect3DVolume9_Release((IDirect3DVolume9*) volumeParent); } + +HRESULT volume_init(IDirect3DVolume9Impl *volume, IDirect3DDevice9Impl *device, UINT width, UINT height, + UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool) +{ + HRESULT hr; + + volume->lpVtbl = &Direct3DVolume9_Vtbl; + volume->ref = 1; + + hr = IWineD3DDevice_CreateVolume(device->WineD3DDevice, width, height, depth, usage & WINED3DUSAGE_MASK, + format, pool, &volume->wineD3DVolume, (IUnknown *)volume); + if (FAILED(hr)) + { + WARN("Failed to create wined3d volume, hr %#x.\n", hr); + return hr; + } + + return D3D_OK; +}