Commit 5eeead1f authored by Vitaliy Margolen's avatar Vitaliy Margolen Committed by Alexandre Julliard

d3d9: StateBlock is also created in EndStateBlock. With tests.

parent a9e2fc28
...@@ -150,12 +150,17 @@ HRESULT WINAPI IDirect3DDevice9Impl_EndStateBlock(LPDIRECT3DDEVICE9 iface, IDi ...@@ -150,12 +150,17 @@ HRESULT WINAPI IDirect3DDevice9Impl_EndStateBlock(LPDIRECT3DDEVICE9 iface, IDi
} }
/* allocate a new IDirectD3DStateBlock */ /* allocate a new IDirectD3DStateBlock */
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY ,sizeof(IDirect3DStateBlock9Impl)); 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->ref = 1;
object->lpVtbl = &Direct3DStateBlock9_Vtbl; object->lpVtbl = &Direct3DStateBlock9_Vtbl;
object->wineD3DStateBlock = wineD3DStateBlock;
object->wineD3DStateBlock=wineD3DStateBlock;
IUnknown_AddRef(iface);
*ppSB=(IDirect3DStateBlock9*)object; object->parentDevice = iface;
*ppSB=(IDirect3DStateBlock9*)object;
TRACE("(%p)Returning %p %p\n", This, *ppSB, wineD3DStateBlock); TRACE("(%p)Returning %p %p\n", This, *ppSB, wineD3DStateBlock);
return D3D_OK; return D3D_OK;
} }
...@@ -201,6 +201,7 @@ void test_refcount(void) ...@@ -201,6 +201,7 @@ void test_refcount(void)
IDirect3DSurface9 *pRenderTarget = NULL; IDirect3DSurface9 *pRenderTarget = NULL;
IDirect3DSurface9 *pTextureLevel = NULL; IDirect3DSurface9 *pTextureLevel = NULL;
IDirect3DStateBlock9 *pStateBlock = NULL; IDirect3DStateBlock9 *pStateBlock = NULL;
IDirect3DStateBlock9 *pStateBlock1 = NULL;
IDirect3DSwapChain9 *pSwapChain = NULL; IDirect3DSwapChain9 *pSwapChain = NULL;
IDirect3DQuery9 *pQuery = NULL; IDirect3DQuery9 *pQuery = NULL;
D3DPRESENT_PARAMETERS d3dpp; D3DPRESENT_PARAMETERS d3dpp;
...@@ -302,6 +303,12 @@ void test_refcount(void) ...@@ -302,6 +303,12 @@ void test_refcount(void)
hr = IDirect3DDevice9_CreateQuery( pDevice, D3DQUERYTYPE_EVENT, &pQuery ); hr = IDirect3DDevice9_CreateQuery( pDevice, D3DQUERYTYPE_EVENT, &pQuery );
CHECK_CALL( hr, "CreateQuery", pDevice, refcount+1 ); 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: cleanup:
if (pDevice) IUnknown_Release( pDevice ); if (pDevice) IUnknown_Release( pDevice );
...@@ -327,6 +334,7 @@ cleanup: ...@@ -327,6 +334,7 @@ cleanup:
if (pSwapChain) IUnknown_Release( pSwapChain ); if (pSwapChain) IUnknown_Release( pSwapChain );
*/ */
if (pQuery) IUnknown_Release( pQuery ); if (pQuery) IUnknown_Release( pQuery );
if (pStateBlock1) IUnknown_Release( pStateBlock1 );
if (pD3d) IUnknown_Release( pD3d ); if (pD3d) IUnknown_Release( pD3d );
......
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