Vitaliy Margolen : d3d9: StateBlock is also created in EndStateBlock.
With tests.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu May 25 04:15:54 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 5eeead1fd76526ffc87088ac1217a31b72e3a7d6
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=5eeead1fd76526ffc87088ac1217a31b72e3a7d6
Author: Vitaliy Margolen <wine-patch at kievinfo.com>
Date: Wed May 24 08:42:50 2006 -0600
d3d9: StateBlock is also created in EndStateBlock. With tests.
---
dlls/d3d9/stateblock.c | 13 +++++++++----
dlls/d3d9/tests/device.c | 8 ++++++++
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d9/stateblock.c b/dlls/d3d9/stateblock.c
index bdc4662..ad87335 100644
--- a/dlls/d3d9/stateblock.c
+++ b/dlls/d3d9/stateblock.c
@@ -150,12 +150,17 @@ HRESULT WINAPI IDirect3DDevice9Impl_En
}
/* allocate a new IDirectD3DStateBlock */
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY ,sizeof(IDirect3DStateBlock9Impl));
+ if (!object) {
+ FIXME("(%p) Failed to allocate %d bytes\n", This, sizeof(IDirect3DStateBlock9Impl));
+ return E_OUTOFMEMORY;
+ }
object->ref = 1;
object->lpVtbl = &Direct3DStateBlock9_Vtbl;
-
- object->wineD3DStateBlock=wineD3DStateBlock;
-
- *ppSB=(IDirect3DStateBlock9*)object;
+ object->wineD3DStateBlock = wineD3DStateBlock;
+
+ IUnknown_AddRef(iface);
+ object->parentDevice = iface;
+ *ppSB=(IDirect3DStateBlock9*)object;
TRACE("(%p)Returning %p %p\n", This, *ppSB, wineD3DStateBlock);
return D3D_OK;
}
diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c
index af938c5..36e84de 100644
--- a/dlls/d3d9/tests/device.c
+++ b/dlls/d3d9/tests/device.c
@@ -201,6 +201,7 @@ void test_refcount(void)
IDirect3DSurface9 *pRenderTarget = NULL;
IDirect3DSurface9 *pTextureLevel = NULL;
IDirect3DStateBlock9 *pStateBlock = NULL;
+ IDirect3DStateBlock9 *pStateBlock1 = NULL;
IDirect3DSwapChain9 *pSwapChain = NULL;
IDirect3DQuery9 *pQuery = NULL;
D3DPRESENT_PARAMETERS d3dpp;
@@ -302,6 +303,12 @@ void test_refcount(void)
hr = IDirect3DDevice9_CreateQuery( pDevice, D3DQUERYTYPE_EVENT, &pQuery );
CHECK_CALL( hr, "CreateQuery", pDevice, refcount+1 );
+ refcount = get_refcount( (IUnknown *)pDevice );
+ hr = IDirect3DDevice9_BeginStateBlock( pDevice );
+ CHECK_CALL( hr, "BeginStateBlock", pDevice, refcount );
+ hr = IDirect3DDevice9_EndStateBlock( pDevice, &pStateBlock1 );
+ CHECK_CALL( hr, "EndStateBlock", pDevice, refcount+1 );
+
cleanup:
if (pDevice) IUnknown_Release( pDevice );
@@ -327,6 +334,7 @@ cleanup:
if (pSwapChain) IUnknown_Release( pSwapChain );
*/
if (pQuery) IUnknown_Release( pQuery );
+ if (pStateBlock1) IUnknown_Release( pStateBlock1 );
if (pD3d) IUnknown_Release( pD3d );
More information about the wine-cvs
mailing list