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