I've recently moved my application from DirectX9 to DirectX11 and I've noticed that it now uses a huge amount of RAM when launched with an ATI graphic card (tested either on a HD 7950 and on a HD 5700), a lot more than the DirectX9 version, and also a lot more than the same application launched with a graphic card from another IHV (need I to mentioned it ? )....from 2 to 3 times larger.
This is annoying as the application is a 32-bit, and so the memory size limit is easily reached.
After further investigation, I've tested on a DirectX11 sample to create several vertex buffers, vertex shaders, etc.... and observed exactly the same behavior of ATI using 2 or 3 times as much as memory. So I think that these memory loses could come from the driver.
Could you give me informations or advices about ATI memory management with DirectX11 resource creation ?
Ok, for people interested in, I've found that this heavy memory use was due to having most of my vertxbuffers and indexbuffers flagged as DYNAMIC usage (it was a temporary workaround in my app). Moving them to IMMUTABLE leads to a memory use quite similar to other non-ATI cards.
I guess ATI driver choose to keep all dynamic resources exclusively in RAM (or duplicated both in RAM and VRAM) - which makes sense as dynamic resources must be optimized for CPU access - while non-ATI doesn't.