diff options
Diffstat (limited to 'indra/llrender/llglslshader.cpp')
| -rw-r--r-- | indra/llrender/llglslshader.cpp | 56 | 
1 files changed, 47 insertions, 9 deletions
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 9cd5dc8145..5a0281eeb5 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -255,12 +255,18 @@ void LLGLSLShader::placeProfileQuery(bool for_runtime)              glGenQueries(1, &mPrimitivesQuery);          } -        glBeginQuery(GL_TIME_ELAPSED, mTimerQuery); +#if GL_EXT_timer_query || GL_EXT_disjoint_timer_query +        glBeginQuery(GL_TIME_ELAPSED_EXT, mTimerQuery); +#endif          if (!for_runtime)          { +#if GL_VERSION_1_5              glBeginQuery(GL_SAMPLES_PASSED, mSamplesQuery); +#endif +#if GL_VERSION_3_0              glBeginQuery(GL_PRIMITIVES_GENERATED, mPrimitivesQuery); +#endif          }      }  } @@ -271,19 +277,30 @@ bool LLGLSLShader::readProfileQuery(bool for_runtime, bool force_read)      {          if (!mProfilePending)          { -            glEndQuery(GL_TIME_ELAPSED); +#if GL_EXT_timer_query || GL_EXT_disjoint_timer_query +            glEndQuery(GL_TIME_ELAPSED_EXT); +#endif              if (!for_runtime)              { +#if GL_VERSION_1_5                  glEndQuery(GL_SAMPLES_PASSED); +#endif +#if GL_VERSION_3_0                  glEndQuery(GL_PRIMITIVES_GENERATED); +#endif              }              mProfilePending = for_runtime;          }          if (mProfilePending && for_runtime && !force_read)          { +#if GL_ARB_timer_query              GLuint64 result = 0;              glGetQueryObjectui64v(mTimerQuery, GL_QUERY_RESULT_AVAILABLE, &result); +#else +            GLuint result = 0; +            glGetQueryObjectuiv(mTimerQuery, GL_QUERY_RESULT_AVAILABLE, &result); +#endif              if (result != GL_TRUE)              { @@ -291,22 +308,34 @@ bool LLGLSLShader::readProfileQuery(bool for_runtime, bool force_read)              }          } +#if GL_ARB_timer_query          GLuint64 time_elapsed = 0;          glGetQueryObjectui64v(mTimerQuery, GL_QUERY_RESULT, &time_elapsed); +#else +        GLuint time_elapsed = 0; +        glGetQueryObjectuiv(mTimerQuery, GL_QUERY_RESULT, &time_elapsed); +#endif          mTimeElapsed += time_elapsed;          mProfilePending = false;          if (!for_runtime)          { +#if GL_ARB_timer_query              GLuint64 samples_passed = 0;              glGetQueryObjectui64v(mSamplesQuery, GL_QUERY_RESULT, &samples_passed);              GLuint64 primitives_generated = 0;              glGetQueryObjectui64v(mPrimitivesQuery, GL_QUERY_RESULT, &primitives_generated); +#else +            GLuint primitives_generated = 0; +            glGetQueryObjectuiv(mPrimitivesQuery, GL_QUERY_RESULT, &primitives_generated); +#endif              sTotalTimeElapsed += time_elapsed; +#if GL_VERSION_1_5              sTotalSamplesDrawn += samples_passed;              mSamplesDrawn += samples_passed; +#endif              U32 tri_count = (U32)primitives_generated / 3; @@ -724,10 +753,14 @@ void LLGLSLShader::mapUniform(GLint index)          case GL_FLOAT_VEC2: size *= 2; break;          case GL_FLOAT_VEC3: size *= 3; break;          case GL_FLOAT_VEC4: size *= 4; break; +#if GL_VERSION_1_1          case GL_DOUBLE: size *= 2; break; +#if GL_VERSION_4_0          case GL_DOUBLE_VEC2: size *= 2; break;          case GL_DOUBLE_VEC3: size *= 6; break;          case GL_DOUBLE_VEC4: size *= 8; break; +#endif // GL_VERSION_4_0 +#endif // GL_VERSION_1_1          case GL_INT_VEC2: size *= 2; break;          case GL_INT_VEC3: size *= 3; break;          case GL_INT_VEC4: size *= 4; break; @@ -746,6 +779,7 @@ void LLGLSLShader::mapUniform(GLint index)          case GL_FLOAT_MAT3x4: size *= 12; break;          case GL_FLOAT_MAT4x2: size *= 8; break;          case GL_FLOAT_MAT4x3: size *= 12; break; +#if GL_VERSION_4_0          case GL_DOUBLE_MAT2: size *= 8; break;          case GL_DOUBLE_MAT3: size *= 18; break;          case GL_DOUBLE_MAT4: size *= 32; break; @@ -755,6 +789,7 @@ void LLGLSLShader::mapUniform(GLint index)          case GL_DOUBLE_MAT3x4: size *= 24; break;          case GL_DOUBLE_MAT4x2: size *= 16; break;          case GL_DOUBLE_MAT4x3: size *= 24; break; +#endif // GL_VERSION_4_0          }          mTotalUniformSize += size;      } @@ -818,7 +853,10 @@ GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type, GLint  {      LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; -    if ((type >= GL_SAMPLER_1D && type <= GL_SAMPLER_2D_RECT_SHADOW) || +    if ( +#if GL_VERSION_2_0 +    (type >= GL_SAMPLER_1D && type <= GL_SAMPLER_2D_RECT_SHADOW) || +#endif          type == GL_SAMPLER_2D_MULTISAMPLE ||          type == GL_SAMPLER_CUBE_MAP_ARRAY)      {   //this here is a texture @@ -1155,22 +1193,22 @@ S32 LLGLSLShader::bindTexture(S32 uniform, LLRenderTarget* texture, bool depth,          return -1;      } -    uniform = getTextureChannel(uniform); +    S32 channel = getTextureChannel(uniform); -    if (uniform > -1) +    if (channel > -1)      {          if (depth) { -            gGL.getTexUnit(uniform)->bind(texture, true); +            gGL.getTexUnit(channel)->bind(texture, true);          }          else {              bool has_mips = mode == LLTexUnit::TFO_TRILINEAR || mode == LLTexUnit::TFO_ANISOTROPIC; -            gGL.getTexUnit(uniform)->bindManual(texture->getUsage(), texture->getTexture(index), has_mips); +            gGL.getTexUnit(channel)->bindManual(texture->getUsage(), texture->getTexture(index), has_mips);          } -        gGL.getTexUnit(uniform)->setTextureFilteringOption(mode); +        gGL.getTexUnit(channel)->setTextureFilteringOption(mode);      } -    return uniform; +    return channel;  }  S32 LLGLSLShader::bindTexture(const std::string& uniform, LLRenderTarget* texture, bool depth, LLTexUnit::eTextureFilterOptions mode)  | 
