diff options
author | Brad Linden <46733234+brad-linden@users.noreply.github.com> | 2024-11-19 10:49:09 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-19 10:49:09 -0800 |
commit | 7be9c43f286671893ff0a9dee13d721a6731255b (patch) | |
tree | b49f62290187b2b719d1fb3b2cdbb467c64b4bfd /indra/llrender | |
parent | c654dac4b7593355a5754042d0b43e03924b3efb (diff) |
brad/2744 handle shader errors (#3105)
* Partial solution to secondlife/viewer#2744 crash with better error handling.
Handles shader compile errors better, and should turn crash into an LL_ERRS assertion failure.
Strengthed more assertions and improved shader error line numbers
* Even more error handling to get a handle on crash secondlife/viewer#2744
* Improved GLSL correctness on Intel chips that lack OpenGL 4.6 support. secondlife/viewer#2744
* Removed non-working fallback code for gDeferredPostProgram
* Fixed incorrect llmax call
Diffstat (limited to 'indra/llrender')
-rw-r--r-- | indra/llrender/llglslshader.cpp | 5 | ||||
-rw-r--r-- | indra/llrender/llrender.cpp | 3 | ||||
-rw-r--r-- | indra/llrender/llshadermgr.cpp | 14 |
3 files changed, 10 insertions, 12 deletions
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 6ba5463acd..45bb24a5b7 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -1046,7 +1046,7 @@ void LLGLSLShader::bind() { LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; - llassert(mProgramObject != 0); + llassert_always(mProgramObject != 0); gGL.flush(); @@ -1069,6 +1069,9 @@ void LLGLSLShader::bind() LLShaderMgr::instance()->updateShaderUniforms(this); mUniformsDirty = false; } + + llassert_always(sCurBoundShaderPtr != nullptr); + llassert_always(sCurBoundShader == mProgramObject); } void LLGLSLShader::bind(U8 variant) diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index c8a9fb4893..eb2cd560a6 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -1569,7 +1569,8 @@ void LLRender::flush() if (mCount > 0) { LL_PROFILE_ZONE_SCOPED_CATEGORY_PIPELINE; - llassert(LLGLSLShader::sCurBoundShaderPtr != nullptr); + llassert_always(LLGLSLShader::sCurBoundShaderPtr != nullptr); + if (!mUIOffset.empty()) { sUICalls++; diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 150277c8df..e02dd4771e 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -559,17 +559,11 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev } else if (major_version == 3) { - if (minor_version < 10) + if (minor_version <= 29) { - shader_code_text[shader_code_count++] = strdup("#version 300\n"); - } - else if (minor_version <= 19) - { - shader_code_text[shader_code_count++] = strdup("#version 310\n"); - } - else if (minor_version <= 29) - { - shader_code_text[shader_code_count++] = strdup("#version 320\n"); + // OpenGL 3.2 had GLSL version 1.50. anything after that the version numbers match. + // https://www.khronos.org/opengl/wiki/Core_Language_(GLSL)#OpenGL_and_GLSL_versions + shader_code_text[shader_code_count++] = strdup("#version 150\n"); } else { |