Hello,
In that case, it would be really beneficial with a unit test. Both as documentation and to see what Windows does.
Excuse my ignorance, but what exactly is meant with 'unit test'? As far as I've learned, it's a small piece of code which uses this functionality and checks the results. My patch includes such a test:
--- /dev/null 2005-09-01 15:22:32.000000000 +0200 +++ dlls/ddraw/tests/refcount.c 2005-09-18 21:57:52.000000000 +0200 <...> + /* Create a Texture. Increases the refcount by 2!!!*/ + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; + ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE; <...> + rc = IDirectDraw7_CreateSurface( lpDD, &ddsd, &lpDDS, NULL ); + ok(rc == DD_OK, "CreateSurface for a mipmap surface returned %lx\n", rc); + if(rc == DD_OK) + { + newref = IDirectDraw_AddRef(lpDD) - 1; + IDirectDraw_Release(lpDD); + ok( (newref - oldref) == 2, "DD reference count increased by %d during creation of a mipmap surface\n", newref - oldref); + oldref = newref; + + newref = IDirectDrawSurface_AddRef(lpDDS) - 1; + IDirectDrawSurface_Release(lpDDS); + ok(newref == 1, "Initial surface reference count of a mipmap surface is %d\n", newref); + + /* Release the surface */ + IDirectDrawSurface_Release(lpDDS); + + newref = IDirectDraw_AddRef(lpDD) - 1; + IDirectDraw_Release(lpDD); + ok( (newref - oldref) == -2, "DD reference count decreased by %d during releasing a mipmap surface\n", newref - oldref); + }
Is that enought? This test succeeds in Windows 2000 and Windows 95.
Stefan