Memory leaks in example simpleD3D9Texture

I have some problem with CUDA sdk’s 2.0 sample simpleD3D9Texture. It was compiled in VC++ 2005 without any code changes. I using debug version of DirectX runtime of sdk march 2008. OS Win Vista SP1 x86. Display driver version 177.84. Hardware - 8600GT.

I have many messages in output (in every frame):
First-chance exception at 0x777342eb in simpleD3D9Texture.exe: Microsoft C++ exception: long at memory location 0x0012fbdc…
Direct3D9: (ERROR) :SetViewport failed.
Direct3D9: (ERROR) :dvMaxZ and dvMinZ should be between 0 and 1

And after closing application:
Direct3D9: :====> ENTER: DLLMAIN(72eda170): Process Detach 00000f0c, tid=00000754
Direct3D9: (INFO) :MemFini!
Direct3D9: (ERROR) :Memory still allocated! Alloc count = 10
Direct3D9: (ERROR) :Current Process (pid) = 00000f0c
Direct3D9: (ERROR) :Memory Address: 02d307f4 lAllocID=1 dwSize=00004bc4, ReturnAddr=72ed99aa (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02d353ec lAllocID=2 dwSize=0000031c, ReturnAddr=72edc90a (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02d3573c lAllocID=3 dwSize=00000c28, ReturnAddr=72ee29d1 (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02c106b4 lAllocID=5 dwSize=0001061c, ReturnAddr=72eea268 (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02c20d04 lAllocID=6 dwSize=00001e60, ReturnAddr=72edb244 (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02c22b9c lAllocID=7 dwSize=000003d0, ReturnAddr=72edb2d1 (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02c22fa4 lAllocID=8 dwSize=00000018, ReturnAddr=72edb32a (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02c00064 lAllocID=23 dwSize=00001bd8, ReturnAddr=72ecfd1b (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02d3639c lAllocID=24 dwSize=000003d0, ReturnAddr=72ecfd61 (pid=00000f0c)
Direct3D9: (ERROR) :Memory Address: 02d367a4 lAllocID=25 dwSize=00000018, ReturnAddr=72ecfdb1 (pid=00000f0c)
Direct3D9: (ERROR) :Total Memory Unfreed From Current Process = 107308 bytes
Direct3D9: :====> EXIT: DLLMAIN(72eda170): Process Detach 00000f0c

What is the reason?

I also have the same error in WinXP. I’m running CUDA 2.0, VS2008, and DirectX SDK August 2008. Display driver 178.24 on a GeForce 8800 GTS.

Here’s the output:

[codebox]Direct3D9: :====> ENTER: DLLMAIN(00b2e6e0): Process Detach 00000d9c, tid=00000e94

Direct3D9: (INFO) :MemFini!

Direct3D9: (WARN) :Memory still allocated! Alloc count = 4

Direct3D9: (WARN) :Current Process (pid) = 00000d9c

Direct3D9: (WARN) :Memory Address: 009554e8 lAllocID=1 dwSize=000047f8, (pid=00000d9c)

Direct3D9: (WARN) : Stack Back Trace

Direct3D9: (ERROR) : [0] : Address 00B2E4CB

Direct3D9: (ERROR) : [1] : Address 00B2E59B

Direct3D9: (ERROR) : [2] : Address 00B2E440

Direct3D9: (ERROR) : [3] : Address 00B22DB4

Direct3D9: (ERROR) : [4] : Address 4FD3AF2E

Direct3D9: (ERROR) : [5] : Address 0040165E

Direct3D9: (ERROR) : [6] : Address 004010FC

Direct3D9: (ERROR) : [7] : Address 004047A7

Direct3D9: (ERROR) : [8] : Address 0040467F

Direct3D9: (ERROR) : [9] : Address 7C817067

Direct3D9: (ERROR) : [10] : Address 00000000

Direct3D9: (ERROR) : [11] : Address 00000000

Direct3D9: (ERROR) : [12] : Address 00000000

Direct3D9: (ERROR) : [13] : Address 00000000

Direct3D9: (ERROR) : [14] : Address 00000000

Direct3D9: (ERROR) : [15] : Address 00000000

Direct3D9: (WARN) :Memory Address: 0095cf38 lAllocID=22 dwSize=00001a28, (pid=00000d9c)

Direct3D9: (WARN) : Stack Back Trace

Direct3D9: (ERROR) : [0] : Address 00B250D4

Direct3D9: (ERROR) : [1] : Address 00B25EBF

Direct3D9: (ERROR) : [2] : Address 00B265F8

Direct3D9: (ERROR) : [3] : Address 00B22DD5

Direct3D9: (ERROR) : [4] : Address 4FD3AF2E

Direct3D9: (ERROR) : [5] : Address 0040165E

Direct3D9: (ERROR) : [6] : Address 004010FC

Direct3D9: (ERROR) : [7] : Address 004047A7

Direct3D9: (ERROR) : [8] : Address 0040467F

Direct3D9: (ERROR) : [9] : Address 7C817067

Direct3D9: (ERROR) : [10] : Address 00000000

Direct3D9: (ERROR) : [11] : Address 00000000

Direct3D9: (ERROR) : [12] : Address 00000000

Direct3D9: (ERROR) : [13] : Address 00000000

Direct3D9: (ERROR) : [14] : Address 00000000

Direct3D9: (ERROR) : [15] : Address 00000000

Direct3D9: (WARN) :Memory Address: 0095c5c0 lAllocID=23 dwSize=00000018, (pid=00000d9c)

Direct3D9: (WARN) : Stack Back Trace

Direct3D9: (ERROR) : [0] : Address 00B251C2

Direct3D9: (ERROR) : [1] : Address 00B25EBF

Direct3D9: (ERROR) : [2] : Address 00B265F8

Direct3D9: (ERROR) : [3] : Address 00B22DD5

Direct3D9: (ERROR) : [4] : Address 4FD3AF2E

Direct3D9: (ERROR) : [5] : Address 0040165E

Direct3D9: (ERROR) : [6] : Address 004010FC

Direct3D9: (ERROR) : [7] : Address 004047A7

Direct3D9: (ERROR) : [8] : Address 0040467F

Direct3D9: (ERROR) : [9] : Address 7C817067

Direct3D9: (ERROR) : [10] : Address 00000000

Direct3D9: (ERROR) : [11] : Address 00000000

Direct3D9: (ERROR) : [12] : Address 00000000

Direct3D9: (ERROR) : [13] : Address 00000000

Direct3D9: (ERROR) : [14] : Address 00000000

Direct3D9: (ERROR) : [15] : Address 00000000

Direct3D9: (WARN) :Memory Address: 0095e9d0 lAllocID=24 dwSize=00000600, (pid=00000d9c)

Direct3D9: (WARN) : Stack Back Trace

Direct3D9: (ERROR) : [0] : Address 00B2679F

Direct3D9: (ERROR) : [1] : Address 00B22DD5

Direct3D9: (ERROR) : [2] : Address 4FD3AF2E

Direct3D9: (ERROR) : [3] : Address 0040165E

Direct3D9: (ERROR) : [4] : Address 004010FC

Direct3D9: (ERROR) : [5] : Address 004047A7

Direct3D9: (ERROR) : [6] : Address 0040467F

Direct3D9: (ERROR) : [7] : Address 7C817067

Direct3D9: (ERROR) : [8] : Address 00000000

Direct3D9: (ERROR) : [9] : Address 00000000

Direct3D9: (ERROR) : [10] : Address 00000000

Direct3D9: (ERROR) : [11] : Address 00000000

Direct3D9: (ERROR) : [12] : Address 00000000

Direct3D9: (ERROR) : [13] : Address 00000000

Direct3D9: (ERROR) : [14] : Address 00000000

Direct3D9: (ERROR) : [15] : Address 00000000

Direct3D9: (WARN) :Total Memory Unfreed From Current Process = 26680 bytes

Direct3D9: :====> EXIT: DLLMAIN(00b2e6e0): Process Detach 00000d9c

The program ‘[3484] simpleD3D9Texture.exe: Native’ has exited with code 0 (0x0).

[/codebox]

In fact, I also have the same problem with the following simple code:

[codebox]

// Create the D3D object.

if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )

    return E_FAIL;

// Create the D3D Display Device

D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) );

d3dpp.Windowed              = TRUE;

d3dpp.BackBufferCount       = 1;

d3dpp.SwapEffect            = D3DSWAPEFFECT_COPY;

d3dpp.hDeviceWindow         = g_handles.hwndText;

d3dpp.BackBufferWidth	    = IMAGE_SIZE_X;

d3dpp.BackBufferHeight      = IMAGE_SIZE_Y;

d3dpp.BackBufferFormat      = D3DFMT_UNKNOWN;

d3dpp.PresentationInterval  = D3DPRESENT_INTERVAL_IMMEDIATE;

hr = g_pD3D->CreateDevice (adapter, D3DDEVTYPE_HAL, g_handles.hwndCGH,

                                            D3DCREATE_HARDWARE_VERTEXPROCESSING, 

		&d3dpp, &g_pD3DDevice);

if( FAILED( hr ) )

    return hr;

// CUDA context for this thread must be attached to the same Direct3D device

CUDA_SAFE_CALL( cudaD3D9SetDirect3DDevice(g_pD3DDevice) );

cudaThreadExit();

// destroy the D3D device

SAFE_RELEASE(g_pD3DDevice);

// destroy the D3D object

SAFE_RELEASE(g_pD3D);

[/codebox]

But commenting out the cudaD3D9SetDirect3DDevice line, clears the error. So it seems that either cudaD3D9SetDirect3DDevice adds more D3D references than it should, or that cudaThreadExit doesn’t clear them all. Can anyone confirm this?