diff options
Diffstat (limited to 'indra/llrender')
| -rw-r--r-- | indra/llrender/llgl.cpp | 18 | ||||
| -rw-r--r-- | indra/llrender/llgl.h | 2 | ||||
| -rw-r--r-- | indra/llrender/llglheaders.h | 18 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.cpp | 13 | 
4 files changed, 50 insertions, 1 deletions
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 9354373dba..d5f0b81830 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -313,6 +313,8 @@ LLGLManager::LLGLManager() :  	mIsDisabled(FALSE),  	mHasMultitexture(FALSE), +	mHasATIMemInfo(FALSE), +	mHasNVXMemInfo(FALSE),  	mNumTextureUnits(1),  	mHasMipMapGeneration(FALSE),  	mHasCompressedTextures(FALSE), @@ -497,6 +499,20 @@ bool LLGLManager::initGL()  	// This is called here because it depends on the setting of mIsGF2or4MX, and sets up mHasMultitexture.  	initExtensions(); +	if (mHasATIMemInfo) +	{ //ask the gl how much vram is free at startup and attempt to use no more than half of that +		S32 meminfo[4]; +		glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, meminfo); + +		mVRAM = meminfo[0]/1024; +	} +	else if (mHasNVXMemInfo) +	{ +		S32 dedicated_memory; +		glGetIntegerv(GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &dedicated_memory); +		mVRAM = dedicated_memory/1024; +	} +  	if (mHasMultitexture)  	{  		GLint num_tex_units;		 @@ -659,6 +675,8 @@ void LLGLManager::initExtensions()  	mHasTextureRectangle = FALSE;  #else // LL_MESA_HEADLESS  	mHasMultitexture = glh_init_extensions("GL_ARB_multitexture"); +	mHasATIMemInfo = ExtensionExists("GL_ATI_meminfo", gGLHExts.mSysExts); +	mHasNVXMemInfo = ExtensionExists("GL_NVX_gpu_memory_info", gGLHExts.mSysExts);  	mHasMipMapGeneration = glh_init_extensions("GL_SGIS_generate_mipmap");  	mHasSeparateSpecularColor = glh_init_extensions("GL_EXT_separate_specular_color");  	mHasAnisotropic = glh_init_extensions("GL_EXT_texture_filter_anisotropic"); diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index df110613e3..0d7ba15b12 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -76,6 +76,8 @@ public:  	// Extensions used by everyone  	BOOL mHasMultitexture; +	BOOL mHasATIMemInfo; +	BOOL mHasNVXMemInfo;  	S32	 mNumTextureUnits;  	BOOL mHasMipMapGeneration;  	BOOL mHasCompressedTextures; diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h index 46bc282436..c48e2bb5fa 100644 --- a/indra/llrender/llglheaders.h +++ b/indra/llrender/llglheaders.h @@ -837,4 +837,22 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);  #define GL_DEPTH_CLAMP 0x864F  #endif +//GL_NVX_gpu_memory_info constants +#ifndef GL_NVX_gpu_memory_info +#define GL_NVX_gpu_memory_info +#define	GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX          0x9047
 +#define	GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX    0x9048
 +#define	GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX  0x9049
 +#define	GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX            0x904A
 +#define	GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX            0x904B +#endif + +//GL_ATI_meminfo constants +#ifndef GL_ATI_meminfo +#define GL_ATI_meminfo +#define GL_VBO_FREE_MEMORY_ATI                     0x87FB
 +#define GL_TEXTURE_FREE_MEMORY_ATI                 0x87FC
 +#define GL_RENDERBUFFER_FREE_MEMORY_ATI            0x87FD +#endif +  #endif // LL_LLGLHEADERS_H diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 378147eadc..0d3f5b81bc 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -354,7 +354,18 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const  //static  void LLVertexBuffer::initClass(bool use_vbo, bool no_vbo_mapping)  { -	sEnableVBOs = use_vbo; +	sEnableVBOs = use_vbo && gGLManager.mHasVertexBufferObject ; +	if(sEnableVBOs) +	{ +		//llassert_always(glBindBufferARB) ; //double check the extention for VBO is loaded. + +		llinfos << "VBO is enabled." << llendl ; +	} +	else +	{ +		llinfos << "VBO is disabled." << llendl ; +	} +  	sDisableVBOMapping = sEnableVBOs && no_vbo_mapping ;  	LLGLNamePool::registerPool(&sDynamicVBOPool);  	LLGLNamePool::registerPool(&sDynamicIBOPool);  | 
