Jump to content

  • Log In with Google      Sign In   
  • Create Account


Check video ram usage


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
11 replies to this topic

#1 proanim   Members   -  Reputation: 440

Like
0Likes
Like

Posted 20 March 2013 - 05:13 PM

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?



Sponsor:

#2 zacaj   Members   -  Reputation: 643

Like
3Likes
Like

Posted 20 March 2013 - 05:17 PM

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;
}


#3 proanim   Members   -  Reputation: 440

Like
0Likes
Like

Posted 20 March 2013 - 05:27 PM

Does that work with GL 3.2?



#4 zacaj   Members   -  Reputation: 643

Like
0Likes
Like

Posted 20 March 2013 - 05:33 PM

It *should*.  I use it with GL 3.3 just fine.



#5 Vortez   Crossbones+   -  Reputation: 2689

Like
0Likes
Like

Posted 20 March 2013 - 09:18 PM

Wow, didn't know that, nice onesmile.png


Edited by jbadams, 04 April 2013 - 05:45 AM.
Restored post contents from history.


#6 proanim   Members   -  Reputation: 440

Like
0Likes
Like

Posted 21 March 2013 - 10:27 AM

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?



#7 zacaj   Members   -  Reputation: 643

Like
0Likes
Like

Posted 21 March 2013 - 10:38 AM

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]

#8 proanim   Members   -  Reputation: 440

Like
0Likes
Like

Posted 21 March 2013 - 11:22 AM

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.



#9 zacaj   Members   -  Reputation: 643

Like
0Likes
Like

Posted 21 March 2013 - 12:45 PM

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];
}


#10 proanim   Members   -  Reputation: 440

Like
0Likes
Like

Posted 21 March 2013 - 01:15 PM

no it doesn't print out anything



#11 mhagain   Crossbones+   -  Reputation: 7609

Like
0Likes
Like

Posted 21 March 2013 - 01:42 PM

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).


It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.


#12 proanim   Members   -  Reputation: 440

Like
0Likes
Like

Posted 21 March 2013 - 03:15 PM

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, 21 March 2013 - 04:14 PM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS