Sign in to follow this  
proanim

Check video ram usage

Recommended Posts

proanim    455

How can I check how much video ram is being used/free (in this case when using opengl)? First thing I can think of is to find a way to check memory amount used by the image or whatever related to graphics and with it calculate used/free memory. But this is probably incorrect and/or ineffective. Do graphic apis have this functionality built in?

Share this post


Link to post
Share on other sites
zacaj    667

If you're using GL2+, just do this:

int getFreeVideoMemory()
{
	int availableKB[4];
#ifdef GL234
	if(GLEW_NVX_gpu_memory_info)
		glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX,&availableKB[0]);
	int temp=GLEW_ATI_meminfo;
	if(GLEW_ATI_meminfo)
		glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI,availableKB);
	return availableKB[0];
#endif
	return 0;
}

Share this post


Link to post
Share on other sites
proanim    455

I have 1gb video ram but i always get different result, i added

std::ofstream outfile;
outfile.open ("log.txt", std::fstream::out | std::fstream::app);
outfile << (int)availableKB << std::endl;
outfile << std::endl;
outfile.close();

 

between #endif and return 0;

 

and the output is

 

2554664 //first run

2488132 //second run

3799208 // third run

 

I called the function only once after initializing opengl.

 

Is there something that i am doing wrong?

What does #ifdef GL234 do?

Share this post


Link to post
Share on other sites
zacaj    667
The ifdef GL234 is just a compiler flag I use in my engine to shay that I'm running open opengl version 2,3, or 4. You can remove it and the endif completely.

Which brand is your card?

Try initializing availableKB to -1 or something to make sure it's being set. Also note that it's an array, try printing (int)availableKB[0]

Share this post


Link to post
Share on other sites
proanim    455

Which brand is your card?

 

I am using ATI, but I was looking for universal solution regardless of brand.

 

Try initializing availableKB to -1 or something to make sure it's being set. Also note that it's an array, try printing (int)availableKB[0]

 

if i set availableKB to anything the value will not change afterwards, and printing (int)availableKB[0] gives negative value.

Share this post


Link to post
Share on other sites
zacaj    667

There is no universal solution.  You have to use manufacturer/brand/? specific extensions.

 

If you use this, does it print out either brand?

int getFreeVideoMemory()
{
	int availableKB[]={-1,-1,-1,-1};
	if(GLEW_NVX_gpu_memory_info)
        {
		glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX,&availableKB[0]);
	        printf("NVidia card\n");
        }
        int temp=GLEW_ATI_meminfo;
	if(GLEW_ATI_meminfo)
        {
		glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI,availableKB);
                printf("ATI card\n");
        }
	return availableKB[0];
}

Share this post


Link to post
Share on other sites
mhagain    13430

There are plenty of factors that could cause the amount of available video RAM to vary.  On a modern OS the window manager may be using some of the video RAM.  On windows Vista or higher video RAM is virtualized so results can vary.  Video RAM may be fragmented from previous runs so free space can be affected.  With anything that uses a dedicated/shared memory architecture (e.g. Intel) you'll get a figure that may be just the amount of dedicated RAM left (i.e. quite low) or may be the total of dedicated + available system memory, or anything in between.  Basically this isn't a figure that you should be basing crucial decisions in your program on; instead it seems better to me to use rough ballparks (e.g. with GL 3.x level hardware things are fairly well standardized at the ~1gb mark or higher).

Share this post


Link to post
Share on other sites
proanim    455

Turns out that ATI Radeon HD 6450 1GB DDR3 for whatever reason doesn't have support for GLEW_ATI_meminfo

I changed GLEW_ATI_meminfo to GL_ATI_meminfo and now the program prints out brand of the card.

There is no support for GL_ATI_meminfo or GL_NVX_gpu_memory_info but the code seems to work no problem with this.

 

 

But I still get negative value.

Edited by proanim

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this