summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2018-01-24 16:29:34 +0000
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2018-01-24 16:29:34 +0000
commit0ed10de9c6ece032fa9eb18071a34fea45562bb0 (patch)
tree352d912acd2b79dc927fe1f1e691fb11ee75497b /indra/newview
parentd251b3ade75e000a76946674a42ee0d0b3f216e7 (diff)
parent2f4931a0a6aea6f1a55bd83f79a65e4c2125fdb8 (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>
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llglsandbox.cpp33
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);
}