diff options
author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2018-01-24 16:29:34 +0000 |
---|---|---|
committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2018-01-24 16:29:34 +0000 |
commit | 0ed10de9c6ece032fa9eb18071a34fea45562bb0 (patch) | |
tree | 352d912acd2b79dc927fe1f1e691fb11ee75497b | |
parent | d251b3ade75e000a76946674a42ee0d0b3f216e7 (diff) | |
parent | 2f4931a0a6aea6f1a55bd83f79a65e4c2125fdb8 (diff) |
Merged MAINT-8197
Account for dummy tex unit and failed allocation
Approved-by: Andrey Lihatskiy <andreylproductengine@lindenlab.com>
Approved-by: Graham Madarasz <graham@lindenlab.com>
Approved-by: Simon Linden <simon@lindenlab.com>
Approved-by: Maxim Nikolenko <maximnproductengine@lindenlab.com>
-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); } |