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 | |
parent | a148882da4c4172fdff8a81b8c2682f212d57144 (diff) |
MAINT-8197 Account for dummy tex unit
-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); } |