diff options
| author | Brad Linden <46733234+brad-linden@users.noreply.github.com> | 2024-09-09 10:28:57 -0700 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-09 10:28:57 -0700 | 
| commit | 33116ea35ec9a925c1601c8f1833e4d1e9f8390b (patch) | |
| tree | ba3b492b8cdaa69a8de8707265ddda6ca0f085c6 /indra | |
| parent | f3f3f99fcf28dde7bb0e9dc7459be12beb1dfe16 (diff) | |
| parent | 1f754e50908ba325c132b8d83383f7f0dbbdf793 (diff) | |
Merge pull request #2530 from secondlife/release/2024.08-DeltaFPS
Release/2024.08 delta fps
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/llvovolume.h | 1 | 
4 files changed, 27 insertions, 16 deletions
| diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 25ef1336c8..0b6ee541c0 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -4642,6 +4642,12 @@ void LLWindowWin32::LLWindowWin32Thread::checkDXMem()  {      if (!mGLReady || mGotGLBuffer) { return; } +    if ((gGLManager.mHasAMDAssociations || gGLManager.mHasNVXGpuMemoryInfo) && gGLManager.mVRAM != 0) +    { // OpenGL already told us the memory budget, don't ask DX +        mGotGLBuffer = true; +        return; +    } +      IDXGIFactory4* p_factory = nullptr;      HRESULT res = CreateDXGIFactory1(__uuidof(IDXGIFactory4), (void**)&p_factory); @@ -4738,7 +4744,7 @@ void LLWindowWin32::LLWindowWin32Thread::run()      {          LL_PROFILE_ZONE_SCOPED_CATEGORY_WIN32; -        // Check memory budget using DirectX +        // Check memory budget using DirectX if OpenGL doesn't have the means to tell us          checkDXMem();          if (mWindowHandleThrd != 0) diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index d16656abfc..681d91c945 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1553,6 +1553,17 @@ void LLViewerFetchedTexture::postCreateTexture()      setActive(); +    // rebuild any volumes that are using this texture for sculpts in case their LoD has changed +    for (U32 i = 0; i < mNumVolumes[LLRender::SCULPT_TEX]; ++i) +    { +        LLVOVolume* volume = mVolumeList[LLRender::SCULPT_TEX][i]; +        if (volume) +        { +            volume->mSculptChanged = true; +            gPipeline.markRebuild(volume->mDrawable); +        } +    } +      if (!needsToSaveRawImage())      {          mNeedsAux = false; @@ -2647,7 +2658,7 @@ void LLViewerFetchedTexture::destroyRawImage()      if (mAuxRawImage.notNull() && !needsToSaveRawImage())      {          sAuxCount--; -        mAuxRawImage = NULL; +        mAuxRawImage = nullptr;      }      if (mRawImage.notNull()) @@ -2662,7 +2673,7 @@ void LLViewerFetchedTexture::destroyRawImage()              }          } -        mRawImage = NULL; +        mRawImage = nullptr;          mIsRawImageValid = false;          mRawDiscardLevel = INVALID_DISCARD_LEVEL; @@ -2774,7 +2785,9 @@ void LLViewerFetchedTexture::readbackRawImage()  {      LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE; -    if (mGLTexturep.notNull() && mGLTexturep->getTexName() != 0 && mRawImage.isNull()) +    // readback the raw image from vram if the current raw image is null or smaller than the texture +    if (mGLTexturep.notNull() && mGLTexturep->getTexName() != 0 && +        (mRawImage.isNull() || mRawImage->getWidth() < mGLTexturep->getWidth() || mRawImage->getHeight() < mGLTexturep->getHeight() ))      {          mRawImage = new LLImageRaw();          if (!mGLTexturep->readBackRaw(-1, mRawImage, false)) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 7da4358f86..4b63354893 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1149,7 +1149,7 @@ void LLVOVolume::updateSculptTexture()          {              mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, true, LLGLTexture::BOOST_SCULPTED, LLViewerTexture::LOD_TEXTURE);              mSculptTexture->forceToSaveRawImage(0, F32_MAX); -            mSculptTexture->addTextureStats(256.f*256.f); +            mSculptTexture->setKnownDrawSize(256, 256);          }          mSkinInfoUnavaliable = false; @@ -1251,7 +1251,7 @@ void LLVOVolume::sculpt()              discard_level = mSculptTexture->getSavedRawImageLevel();          } -        if (!raw_image) +        if (!raw_image || raw_image->getWidth() < mSculptTexture->getWidth() || raw_image->getHeight() < mSculptTexture->getHeight())          {              // last resort, read back from GL              mSculptTexture->readbackRawImage(); @@ -1338,17 +1338,8 @@ void LLVOVolume::sculpt()                  mSculptTexture->updateBindStatsForTester() ;              }          } -        getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level, mSculptTexture->isMissingAsset()); -        //notify rebuild any other VOVolumes that reference this sculpty volume -        for (S32 i = 0; i < mSculptTexture->getNumVolumes(LLRender::SCULPT_TEX); ++i) -        { -            LLVOVolume* volume = (*(mSculptTexture->getVolumeList(LLRender::SCULPT_TEX)))[i]; -            if (volume != this && volume->getVolume() == getVolume()) -            { -                gPipeline.markRebuild(volume->mDrawable, LLDrawable::REBUILD_GEOMETRY); -            } -        } +        getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level, mSculptTexture->isMissingAsset());      }  } diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 6241bf42d6..97a5131260 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -451,6 +451,7 @@ public:  private:      friend class LLDrawable;      friend class LLFace; +    friend class LLViewerFetchedTexture;      bool        mFaceMappingChanged;      LLFrameTimer mTextureUpdateTimer; | 
