rendered paste bodydiff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c
index d126860..3f5c2e1 100644
--- a/dlls/d3d9/tests/device.c
+++ b/dlls/d3d9/tests/device.c
@@ -253,6 +253,8 @@ static void test_refcount(void)
IDirect3D9 *pD3d = NULL;
IDirect3DDevice9 *pDevice = NULL;
IDirect3DVertexBuffer9 *pVertexBuffer = NULL;
+ IDirect3DVertexBuffer9 *pVertexBuffer2 = NULL;
+ IDirect3DVertexBuffer9 *pVertexBuffer3 = NULL;
IDirect3DIndexBuffer9 *pIndexBuffer = NULL;
IDirect3DVertexDeclaration9 *pVertexDeclaration = NULL;
IDirect3DVertexShader9 *pVertexShader = NULL;
@@ -270,6 +272,7 @@ static void test_refcount(void)
IDirect3DQuery9 *pQuery = NULL;
D3DPRESENT_PARAMETERS d3dpp;
D3DDISPLAYMODE d3ddm;
+ UINT offset, stride;
int refcount = 0, tmp;
D3DVERTEXELEMENT9 decl[] =
@@ -360,8 +363,26 @@ static void test_refcount(void)
hr = IDirect3DDevice9_EndStateBlock( pDevice, &pStateBlock1 );
CHECK_CALL( hr, "EndStateBlock", pDevice, ++refcount );
+ if(pVertexBuffer)
+ {
+ hr = IDirect3DDevice9_SetStreamSource(pDevice, 0, pVertexBuffer, 16, 32);
+ ok(hr == D3D_OK, "IDirect3DDevice9_SetStreamSource returned %s\n", DXGetErrorString9(hr));
+ CHECK_CALL( hr, "SetStreamSource", pVertexBuffer, 1 );
+ CHECK_CALL( hr, "SetStreamSource", pDevice, refcount );
+
+ hr = IDirect3DDevice9_GetStreamSource(pDevice, 0, &pVertexBuffer2, &stride, &offset);
+ ok(pVertexBuffer == pVertexBuffer2, "Got wrong buffer %p\n", pVertexBuffer2);
+ CHECK_CALL( hr, "GetStreamSource", pVertexBuffer2, 2 );
+ CHECK_CALL( hr, "GetStreamSource", pDevice, refcount );
+
+ hr = IDirect3DDevice9_GetStreamSource(pDevice, 0, &pVertexBuffer3, &stride, &offset);
+ ok(pVertexBuffer == pVertexBuffer3, "Got wrong buffer %p\n", pVertexBuffer2);
+ CHECK_CALL( hr, "GetStreamSource", pVertexBuffer3, 3 );
+ CHECK_CALL( hr, "GetStreamSource", pDevice, refcount );
+ }
+
cleanup:
- CHECK_RELEASE(pDevice, pDevice, --refcount);
+ CHECK_RELEASE(pDevice, pDevice, refcount-1);
/* Buffers */
CHECK_RELEASE(pVertexBuffer, pDevice, --refcount);