Followers 0

Big memory problem (executable size growing very fastly)

14 posts in this topic

Hi !

I am doing deferred rendering with Direct3D 11, and it works well... Except that each second during the execution, the executable becomes about 25 MBytes bigger each second... ( about 300 fps)

My rendering loop looks like this :

	while (exitThread == false)
{

GBuffer();

lightingPass();

deferredContext->FinishCommandList(TRUE, &commandList);
deviceContext->ExecuteCommandList(commandList, FALSE);

swapChain->Present(0,0);
}


In the GBuffer, I am rendering to 3 textures : colors, normals and positions (8 Bytes for each pixel)

What could be according to reasons which could make increasing executable size during the execution ?

Edited by theScore
0

Share on other sites

Not sure what you mean by "executable size" - maybe you meant "the process' used memory size"? Are you maybe allocating resources (like the gbuffer textures) every frame and never releasing them?

2

Share on other sites

Yes you are right, rather process size in memory, I am not allocating every frame, so it is not for that I don't understand

I don't have any errors but I have warnings, this is the end of my list :

D3D11 WARNING: Live Object at 0x03001974, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x03003F04, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x0300655C, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x03008AEC, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x0300B084, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x0300D614, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x0300FBAC, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x0301213C, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x030146D4, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x03016C64, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x030191FC, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x0301B78C, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x0301DD24, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x030202B4, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live                         Object :    534 [ STATE_CREATION WARNING #0: UNKNOWN]

I also have memory leaks detected before the rendering loop, but apparently nothing which can cause increasing process size.
I didn't pay attention to these warning before, so how can I find which variables are concerned by these warnings ?
Edited by theScore
0

Share on other sites

I am trying to check with reportLiveObjects.

0

Share on other sites
Are you sure you are not allocating ? , some D3D functions may allocate resources that you are responsible for cleaning up.

posting the code from the GBuffer and lightningPass functions/methods would make it alot easier for others to help you.
0

Share on other sites

I didn't pay attention to these warning before, so how can I find which variables are concerned by these warnings ?

You can determine what type of object you're allocating but not releasing by first creating a D3D11Debug object via device->QueryInterface(IID_PPV_ARGS(&pDebug)); Just knowing the type of object should point you in the right direction. In general, you should be concerned with any object you create with device->Createxxx(...).

You can then call pDebug->ReportLiveDeviceObjects(D3D11_RLDO_DETAIL); to get a more detailed description of allocated objects and their reference count.

Don't forget to release the debug object itself in your application exit cleanup routine.

Edited by Buckeye
2

Share on other sites

Ok but when I see that a type of object "lives" 48 times for example, how can I know if it normal or not ? Or are they all supposed to be freed ?

If I am supposed to free them, how can I do if it is not inside the destructor ?

Edited by theScore
0

Share on other sites
There is a way to name all D3D objects you create. See http://seanmiddleditch.com/journal/2014/02/direct3d-11-debug-api-tricks/

This helps with determing what you're looking. I highly recommend making your wrappers and helpers require debug names and ensuring that every object you create has a meaningful name attached to it. e.g., the source image for textures, or names like "normal buffer", or so on. Vertex/index buffers can likewise be named according to the data source they're filled from. Shaders and so on as well.
2

Share on other sites

Thanks ! I am taking a look at your web site, I go back if I have any questions !

0

Share on other sites

Ok but when I see that a type of object "lives" 48 times for example, how can I know if it normal or not ?

Between rendered frames themselfs, one cannot create any resource at all - even if it was being managed and freed. (opose game further routine though)

PIX is a good dx commands dogy

http://en.wikipedia.org/wiki/PIX_%28Microsoft%29

0

Share on other sites

You are absolutly right ajmiles, I am releasing now in the rendering loop, and there is no problem now ! Thank you ! And thanks to the other ones !

It was only that

Edited by theScore
0

Create an account

Register a new account