diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llrender/llgl.cpp | 11 | ||||
| -rw-r--r-- | indra/llrender/llgl.h | 5 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 14 | 
3 files changed, 24 insertions, 6 deletions
| diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 9967c23ce8..5429489075 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -445,7 +445,9 @@ LLGLManager::LLGLManager() :  	mIsGFFX(FALSE),  	mATIOffsetVerticalLines(FALSE),  	mATIOldDriver(FALSE), - +#if LL_DARWIN +	mIsMobileGF(FALSE), +#endif  	mHasRequirements(TRUE),  	mHasSeparateSpecularColor(FALSE), @@ -637,6 +639,13 @@ bool LLGLManager::initGL()  		{  			mIsGF3 = TRUE;  		} +#if LL_DARWIN +		else if ((mGLRenderer.find("9400M") != std::string::npos) +			  || (mGLRenderer.find("9600M") != std::string::npos)) +		{ +			mIsMobileGF = TRUE; +		} +#endif  	}  	else if (mGLVendor.find("INTEL") != std::string::npos diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 1e921d1e97..767d49cbf2 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -128,6 +128,11 @@ public:  	BOOL mATIOffsetVerticalLines;  	BOOL mATIOldDriver; +#if LL_DARWIN +	// Needed to distinguish problem cards on older Macs that break with Materials +	BOOL mIsMobileGF; +#endif +	  	// Whether this version of GL is good enough for SL to use  	BOOL mHasRequirements; diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 286152867f..ce066d85f1 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -783,9 +783,6 @@ BOOL LLViewerShaderMgr::loadBasicShaders()  	// Load basic dependency shaders first  	// All of these have to load for any shaders to function -#if LL_DARWIN // Mac can't currently handle all 8 lights,  -	S32 sum_lights_class = 2; -#else   	S32 sum_lights_class = 3;  	// class one cards will get the lower sum lights @@ -796,14 +793,21 @@ BOOL LLViewerShaderMgr::loadBasicShaders()  	{  		sum_lights_class = 2;  	} -#endif  	// If we have sun and moon only checked, then only sum those lights.  	if (gPipeline.getLightingDetail() == 0)  	{  		sum_lights_class = 1;  	} - +	 +#if LL_DARWIN +	// Work around driver crashes on older Macs when using deferred rendering +	// NORSPEC-59 +	// +	if (gGLManager.mIsMobileGF) +		sum_lights_class = 3; +#endif +	  	// Use the feature table to mask out the max light level to use.  Also make sure it's at least 1.  	S32 max_light_class = gSavedSettings.getS32("RenderShaderLightingMaxLevel");  	sum_lights_class = llclamp(sum_lights_class, 1, max_light_class); | 
