summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraham Linden <none@none>2014-11-17 11:40:28 -0800
committerGraham Linden <none@none>2014-11-17 11:40:28 -0800
commit9eeb8344a6dd8721ebc85463e966b05a9b034381 (patch)
tree9f4d1bb68d4636fe0a3a426d71fd1837209ae0a0
parent2301cf800f40101baed7a5936683d0b1e4968be1 (diff)
Avoid using GL_ARB_timer_query functionality when not supported and protect against probably-not-NULL current bound shader pointer
-rwxr-xr-xindra/llrender/llglslshader.cpp19
-rwxr-xr-xindra/newview/llglsandbox.cpp14
2 files changed, 27 insertions, 6 deletions
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index b81dd4c9a1..a98737ee64 100755
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -214,7 +214,7 @@ void LLGLSLShader::startProfile()
//static
void LLGLSLShader::stopProfile(U32 count, U32 mode)
{
- if (sProfileEnabled)
+ if (sProfileEnabled && sCurBoundShaderPtr)
{
sCurBoundShaderPtr->readProfileQuery(count, mode);
}
@@ -263,18 +263,29 @@ void LLGLSLShader::placeProfileQuery()
glBeginQueryARB(GL_SAMPLES_PASSED, mSamplesQuery);
- glBeginQueryARB(GL_TIME_ELAPSED, mTimerQuery);
+
+ if (gGLManager.mHasTimerQuery)
+ {
+ glBeginQueryARB(GL_TIME_ELAPSED, mTimerQuery);
+ }
#endif
}
void LLGLSLShader::readProfileQuery(U32 count, U32 mode)
{
#if !LL_DARWIN
- glEndQueryARB(GL_TIME_ELAPSED);
+ if (gGLManager.mHasTimerQuery)
+ {
+ glEndQueryARB(GL_TIME_ELAPSED);
+ }
+
glEndQueryARB(GL_SAMPLES_PASSED);
U64 time_elapsed = 0;
- glGetQueryObjectui64v(mTimerQuery, GL_QUERY_RESULT, &time_elapsed);
+ if (gGLManager.mHasTimerQuery)
+ {
+ glGetQueryObjectui64v(mTimerQuery, GL_QUERY_RESULT, &time_elapsed);
+ }
U64 samples_passed = 0;
glGetQueryObjectui64v(mSamplesQuery, GL_QUERY_RESULT, &samples_passed);
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 4b8ac2b3cf..7cf17c90e9 100755
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -954,7 +954,7 @@ F32 gpu_benchmark()
//make a dummy triangle to draw with
LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, GL_STATIC_DRAW_ARB);
- buff->allocateBuffer(3, 0, true);
+ buff->allocateBuffer(12, 0, true);
LLStrider<LLVector3> v;
LLStrider<LLVector2> tc;
@@ -964,6 +964,16 @@ F32 gpu_benchmark()
v[0].set(-1,1,0);
v[1].set(-1,-3,0);
v[2].set(3,1,0);
+ v[3].set(-1,1,0);
+ v[4].set(-1,-3,0);
+ v[5].set(3,1,0);
+ v[6].set(-1,1,0);
+ v[7].set(-1,-3,0);
+ v[8].set(3,1,0);
+ v[9].set(-1,1,0);
+ v[10].set(-1,-3,0);
+ v[11].set(3,1,0);
+
buff->flush();
gBenchmarkProgram.bind();
@@ -983,7 +993,7 @@ F32 gpu_benchmark()
{
dest[i].bindTarget();
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, source[i]);
- buff->drawArrays(LLRender::TRIANGLES, 0, 3);
+ buff->drawArrays(LLRender::TRIANGLES, 0, 12);
dest[i].flush();
}