On Thu, Aug 13, 2009 at 6:59 PM, Stefan Dösingerstefandoesinger@gmx.at wrote:
Am Wednesday 12 August 2009 10:04:10 schrieb Sun, Sunny:
I think you can first detect GL_ATI_meminfo in glGetString(GL_EXTENSIONS); if GL_ATI_meminfo exists, then you can use glGetIntegerv(GL_VBO_FREE_MEMORY_ATI, param) to get the current free video memory, you can see more info at:
A minor problem with GL_ATI_meminfo is that it doesn't report the total amount of video memory available. D3D8 and D3D9 only report the free amount as well, but DirectDraw can return the total amount. There are some games that first query the total amount using ddraw, then continue with d3d8 or 9. Depending on what other apps are doing, reporting the currently free amount as total might result in the app thinking that free vidmem > total vidmem, running into all sorts of troubles. (For example, another app frees a lot of textures between the ddraw vidmem query and the d3d9 vidmem query)
It is even worse. Even OpenGL apps like WoW use ddraw for querying the amount of video memory at startup! In case of Nvidia the amount of video memory and the pci ids are advertised using the NV-CONTROL extension. At some point I plan on adding code for that. Even when using such extension the current fallback is still needed. The list needs some updates.
The other issue is that if some other apps use lots of video memory(like Compiz, etc), then we can still run into the same out of memory issue if other apps consume too much video memory.
We should probably also fall back to a saner default on newer d3d10 class cards - a radeon 9500 isn't really representative for them any more.
I still have to update that part but haven't had time for it yet.
Roderick