diff options
Diffstat (limited to 'indra/llrender')
| -rw-r--r-- | indra/llrender/llfontfreetype.cpp | 27 | ||||
| -rw-r--r-- | indra/llrender/llgl.cpp | 19 | ||||
| -rw-r--r-- | indra/llrender/llglslshader.cpp | 33 | 
3 files changed, 48 insertions, 31 deletions
| diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp index 649dd369cb..5f04664267 100644 --- a/indra/llrender/llfontfreetype.cpp +++ b/indra/llrender/llfontfreetype.cpp @@ -654,7 +654,14 @@ LLFontGlyphInfo* LLFontFreetype::addGlyphFromFont(const LLFontFreetype *fontp, l      LLImageGL *image_gl = mFontBitmapCachep->getImageGL(bitmap_glyph_type, bitmap_num);      LLImageRaw *image_raw = mFontBitmapCachep->getImageRaw(bitmap_glyph_type, bitmap_num); -    image_gl->setSubImage(image_raw, 0, 0, image_gl->getWidth(), image_gl->getHeight()); +    if (image_gl && image_raw) +    { +        image_gl->setSubImage(image_raw, 0, 0, image_gl->getWidth(), image_gl->getHeight()); +    } +    else +    { +        llassert(false); //images were just inserted by nextOpenPos, they shouldn't be missing +    }      return gi;  } @@ -838,7 +845,12 @@ bool LLFontFreetype::setSubImageBGRA(U32 x, U32 y, U32 bitmap_num, U16 width, U1  {      LLImageRaw* image_raw = mFontBitmapCachep->getImageRaw(EFontGlyphType::Color, bitmap_num);      llassert(!mIsFallback); -    llassert(image_raw && (image_raw->getComponents() == 4)); +    if (!image_raw) +    { +        llassert(false); +        return false; +    } +    llassert(image_raw->getComponents() == 4);      // NOTE: inspired by LLImageRaw::setSubImage()      U32* image_data = (U32*)image_raw->getData(); @@ -866,10 +878,17 @@ bool LLFontFreetype::setSubImageBGRA(U32 x, U32 y, U32 bitmap_num, U16 width, U1  void LLFontFreetype::setSubImageLuminanceAlpha(U32 x, U32 y, U32 bitmap_num, U32 width, U32 height, U8 *data, S32 stride) const  {      LLImageRaw *image_raw = mFontBitmapCachep->getImageRaw(EFontGlyphType::Grayscale, bitmap_num); -    LLImageDataLock lock(image_raw);      llassert(!mIsFallback); -    llassert(image_raw && (image_raw->getComponents() == 2)); +    if (!image_raw) +    { +        llassert(false); +        return; +    } + +    LLImageDataLock lock(image_raw); + +    llassert(image_raw->getComponents() == 2);      U8 *target = image_raw->getData();      llassert(target); diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 1966e48f2e..0be27b8975 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -1228,28 +1228,9 @@ bool LLGLManager::initGL()      }  #endif -#if LL_WINDOWS -    if (mVRAM < 256) -    { -        // Something likely went wrong using the above extensions -        // try WMI first and fall back to old method (from dxdiag) if all else fails -        // Function will check all GPUs WMI knows of and will pick up the one with most -        // memory. We need to check all GPUs because system can switch active GPU to -        // weaker one, to preserve power when not under load. -        U32 mem = LLDXHardware::getMBVideoMemoryViaWMI(); -        if (mem != 0) -        { -            mVRAM = mem; -            LL_WARNS("RenderInit") << "VRAM Detected (WMI):" << mVRAM<< LL_ENDL; -        } -    } -#endif -      if (mVRAM < 256 && old_vram > 0)      {          // fall back to old method -        // Note: on Windows value will be from LLDXHardware. -        // Either received via dxdiag or via WMI by id from dxdiag.          mVRAM = old_vram;      } diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index b3f32fdc83..3735a99109 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -1076,8 +1076,8 @@ void LLGLSLShader::bind()  void LLGLSLShader::bind(U8 variant)  { -    llassert(mGLTFVariants.size() == LLGLSLShader::NUM_GLTF_VARIANTS); -    llassert(variant < LLGLSLShader::NUM_GLTF_VARIANTS); +    llassert_always(mGLTFVariants.size() == LLGLSLShader::NUM_GLTF_VARIANTS); +    llassert_always(variant < LLGLSLShader::NUM_GLTF_VARIANTS);      mGLTFVariants[variant].bind();  } @@ -1085,7 +1085,7 @@ void LLGLSLShader::bind(bool rigged)  {      if (rigged)      { -        llassert(mRiggedVariant); +        llassert_always(mRiggedVariant);          mRiggedVariant->bind();      }      else @@ -1247,23 +1247,40 @@ S32 LLGLSLShader::disableTexture(S32 uniform, LLTexUnit::eTextureType mode)          llassert(false);          return -1;      } +      S32 index = mTexture[uniform]; -    if (index != -1 && gGL.getTexUnit(index)->getCurrType() != LLTexUnit::TT_NONE) +    if (index < 0) +    { +        // Invalid texture index - nothing to disable +        return index; +    } + +    LLTexUnit* tex_unit = gGL.getTexUnit(index); +    if (!tex_unit)      { -        if (gDebugGL && gGL.getTexUnit(index)->getCurrType() != mode) +        // Invalid texture unit +        LL_WARNS_ONCE("Shader") << "Invalid texture unit at index: " << index << LL_ENDL; +        return index; +    } + +    LLTexUnit::eTextureType curr_type = tex_unit->getCurrType(); +    if (curr_type != LLTexUnit::TT_NONE) +    { +        if (gDebugGL && curr_type != mode)          {              if (gDebugSession)              { -                gFailLog << "Texture channel " << index << " texture type corrupted." << std::endl; +                gFailLog << "Texture channel " << index << " texture type corrupted. Expected: " << mode << ", Found: " << curr_type << std::endl;                  ll_fail("LLGLSLShader::disableTexture failed");              }              else              { -                LL_ERRS() << "Texture channel " << index << " texture type corrupted." << LL_ENDL; +                LL_ERRS() << "Texture channel " << index << " texture type corrupted. Expected: " << mode << ", Found: " << curr_type << LL_ENDL;              }          } -        gGL.getTexUnit(index)->disable(); +        tex_unit->disable();      } +      return index;  } | 
