diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-01-23 21:09:26 +0200 | 
|---|---|---|
| committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-01-23 21:09:26 +0200 | 
| commit | 2f4931a0a6aea6f1a55bd83f79a65e4c2125fdb8 (patch) | |
| tree | bd07bd82df3548ca20b3078a7f86e59db7afb0da /indra/newview | |
| parent | a148882da4c4172fdff8a81b8c2682f212d57144 (diff) | |
MAINT-8197 Account for dummy tex unit
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llglsandbox.cpp | 33 | 
1 files changed, 27 insertions, 6 deletions
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index c7128a55ae..dc18d6c647 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -957,14 +957,21 @@ F32 gpu_benchmark()  		~TextureHolder()  		{  			// unbind -			texUnit->unbind(LLTexUnit::TT_TEXTURE); +			if (texUnit) +			{ +				texUnit->unbind(LLTexUnit::TT_TEXTURE); +			}  			// ensure that we delete these textures regardless of how we exit  			LLImageGL::deleteTextures(source.size(), &source[0]);  		} -		void bind(U32 index) +		bool bind(U32 index)  		{ -			texUnit->bindManual(LLTexUnit::TT_TEXTURE, source[index]); +			if (texUnit) // should always be there with dummy (-1), but just in case +			{ +				return texUnit->bindManual(LLTexUnit::TT_TEXTURE, source[index]); +			} +			return false;  		}  	private: @@ -992,13 +999,27 @@ F32 gpu_benchmark()  	LLGLDepthTest depth(GL_FALSE);  	for (U32 i = 0; i < count; ++i) -	{ //allocate render targets and textures -		dest[i].allocate(res,res,GL_RGBA,false, false, LLTexUnit::TT_TEXTURE, true); +	{ +		//allocate render targets and textures +		if (!dest[i].allocate(res, res, GL_RGBA, false, false, LLTexUnit::TT_TEXTURE, true)) +		{ +			LL_WARNS() << "Failed to allocate render target." << LL_ENDL; +			// abandon the benchmark test +			delete[] pixels; +			return -1.f; +		}  		dest[i].bindTarget();  		dest[i].clear();  		dest[i].flush(); -		texHolder.bind(i); +		if (!texHolder.bind(i)) +		{ +			// can use a dummy value mDummyTexUnit = new LLTexUnit(-1); +			LL_WARNS() << "Failed to bind tex unit." << LL_ENDL; +			// abandon the benchmark test +			delete[] pixels; +			return -1.f; +		}  		LLImageGL::setManualImage(GL_TEXTURE_2D, 0, GL_RGBA, res,res,GL_RGBA, GL_UNSIGNED_BYTE, pixels);  	}  | 
