diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 4 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llnetmap.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/lltexturefetch.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.cpp | 311 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.h | 8 | ||||
| -rw-r--r-- | indra/newview/llviewertexturelist.cpp | 36 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 2 | 
8 files changed, 252 insertions, 117 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 05c3fc3bfe..d05d100ddf 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9814,7 +9814,7 @@        <key>Type</key>        <string>Boolean</string>        <key>Value</key> -      <integer>0</integer> +      <integer>1</integer>      </map>      <key>RenderGlow</key>      <map> @@ -10599,7 +10599,7 @@        <key>Type</key>        <string>Boolean</string>        <key>Value</key> -      <integer>0</integer> +      <integer>1</integer>      </map>    <key>RenderUseTransformFeedback</key>    <map> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 722a6caa65..e46e8feb14 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -613,7 +613,7 @@ static void settings_modify()  	LLPipeline::sRenderDeferred		= LLPipeline::sRenderTransparentWater && LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred");  	LLVOSurfacePatch::sLODFactor		= gSavedSettings.getF32("RenderTerrainLODFactor");  	LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4] -	gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession; +    gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession;  	gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");  } @@ -4831,6 +4831,7 @@ void LLAppViewer::idle()  	LLNotificationsUI::LLToast::updateClass();  	LLSmoothInterpolation::updateInterpolants();  	LLMortician::updateClass(); +    LLImageGL::updateClass();  	LLFilePickerThread::clearDead();  //calls LLFilePickerThread::notify()  	LLDirPickerThread::clearDead();  	F32 dt_raw = idle_timer.getElapsedTimeAndResetF32(); diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 112da55682..111b45612e 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -147,6 +147,7 @@ void LLNetMap::setScale( F32 scale )  void LLNetMap::draw()  { +    LL_PROFILE_ZONE_SCOPED;   	static LLFrameTimer map_timer;  	static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white);  	static LLUIColor map_avatar_friend_color = LLUIColorTable::instance().getColor("MapAvatarFriendColor", LLColor4::white); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index f64db7beb5..63e561147d 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -314,6 +314,7 @@ private:  		// Threads:  Ttc  		virtual void completed(bool success)  		{ +            LL_PROFILE_ZONE_SCOPED;  			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);  			if (worker)  			{ @@ -338,6 +339,7 @@ private:  		// Threads:  Ttc  		virtual void completed(bool success)  		{ +            LL_PROFILE_ZONE_SCOPED;  			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);  			if (worker)  			{ @@ -362,6 +364,7 @@ private:  		// Threads:  Tid  		virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux)  		{ +            LL_PROFILE_ZONE_SCOPED;  			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);  			if (worker)  			{ @@ -1139,6 +1142,7 @@ void LLTextureFetchWorker::startWork(S32 param)  // Threads:  Ttf  bool LLTextureFetchWorker::doWork(S32 param)  { +    LL_PROFILE_ZONE_SCOPED;  	static const LLCore::HttpStatus http_not_found(HTTP_NOT_FOUND);						// 404  	static const LLCore::HttpStatus http_service_unavail(HTTP_SERVICE_UNAVAILABLE);		// 503  	static const LLCore::HttpStatus http_not_sat(HTTP_REQUESTED_RANGE_NOT_SATISFIABLE);	// 416; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index af55f68cd2..274f53a160 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -184,6 +184,7 @@ void LLViewerTextureManager::findFetchedTextures(const LLUUID& id, std::vector<L  void  LLViewerTextureManager::findTextures(const LLUUID& id, std::vector<LLViewerTexture*> &output)  { +    LL_PROFILE_ZONE_SCOPED;      std::vector<LLViewerFetchedTexture*> fetched_output;      gTextureList.findTexturesByID(id, fetched_output);      std::vector<LLViewerFetchedTexture*>::iterator iter = fetched_output.begin(); @@ -485,6 +486,7 @@ static LLTrace::BlockTimerStatHandle FTM_TEXTURE_MEMORY_CHECK("Memory Check");  //static   bool LLViewerTexture::isMemoryForTextureLow()  { +    LL_PROFILE_ZONE_SCOPED;      // Note: we need to figure out a better source for 'min' values,      // what is free for low end at minimal settings is 'nothing left'      // for higher end gpus at high settings. @@ -501,6 +503,7 @@ bool LLViewerTexture::isMemoryForTextureLow()  //static  bool LLViewerTexture::isMemoryForTextureSuficientlyFree()  { +    LL_PROFILE_ZONE_SCOPED;      const S32Megabytes DESIRED_FREE_TEXTURE_MEMORY(50);      const S32Megabytes DESIRED_FREE_MAIN_MEMORY(200); @@ -514,6 +517,7 @@ bool LLViewerTexture::isMemoryForTextureSuficientlyFree()  //static  void LLViewerTexture::getGPUMemoryForTextures(S32Megabytes &gpu, S32Megabytes &physical)  { +    LL_PROFILE_ZONE_SCOPED;      static LLFrameTimer timer;      static S32Megabytes gpu_res = S32Megabytes(S32_MAX);      static S32Megabytes physical_res = S32Megabytes(S32_MAX); @@ -526,27 +530,29 @@ void LLViewerTexture::getGPUMemoryForTextures(S32Megabytes &gpu, S32Megabytes &p      }      timer.reset(); -    LL_RECORD_BLOCK_TIME(FTM_TEXTURE_MEMORY_CHECK); - -    if (gGLManager.mHasATIMemInfo)      { -        S32 meminfo[4]; -        glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, meminfo); -        gpu_res = (S32Megabytes)meminfo[0]; +        LL_RECORD_BLOCK_TIME(FTM_TEXTURE_MEMORY_CHECK); -        //check main memory, only works for windows. -        LLMemory::updateMemoryInfo(); -        physical_res = LLMemory::getAvailableMemKB(); -    } -    else if (gGLManager.mHasNVXMemInfo) -    { -        S32 free_memory; -        glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &free_memory); -        gpu_res = (S32Megabytes)(free_memory / 1024); -    } +        if (gGLManager.mHasATIMemInfo) +        { +            S32 meminfo[4]; +            glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, meminfo); +            gpu_res = (S32Megabytes)meminfo[0]; -    gpu = gpu_res; -    physical = physical_res; +            //check main memory, only works for windows. +            LLMemory::updateMemoryInfo(); +            physical_res = LLMemory::getAvailableMemKB(); +        } +        else if (gGLManager.mHasNVXMemInfo) +        { +            S32 free_memory; +            glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &free_memory); +            gpu_res = (S32Megabytes)(free_memory / 1024); +        } + +        gpu = gpu_res; +        physical = physical_res; +    }  }  static LLTrace::BlockTimerStatHandle FTM_TEXTURE_UPDATE_MEDIA("Media"); @@ -555,6 +561,7 @@ static LLTrace::BlockTimerStatHandle FTM_TEXTURE_UPDATE_TEST("Test");  //static  void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity)  { +    LL_PROFILE_ZONE_SCOPED;  	sCurrentTime = gFrameTimeSeconds;  	LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName); @@ -704,6 +711,7 @@ void LLViewerTexture::cleanup()  void LLViewerTexture::notifyAboutCreatingTexture()  { +    LL_PROFILE_ZONE_SCOPED;  	for(U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)  	{  		for(U32 f = 0; f < mNumFaces[ch]; f++) @@ -715,6 +723,7 @@ void LLViewerTexture::notifyAboutCreatingTexture()  void LLViewerTexture::notifyAboutMissingAsset()  { +    LL_PROFILE_ZONE_SCOPED;  	for(U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)  	{  		for(U32 f = 0; f < mNumFaces[ch]; f++) @@ -727,6 +736,7 @@ void LLViewerTexture::notifyAboutMissingAsset()  // virtual  void LLViewerTexture::dump()  { +    LL_PROFILE_ZONE_SCOPED;  	LLGLTexture::dump();  	LL_INFOS() << "LLViewerTexture" @@ -762,6 +772,7 @@ bool LLViewerTexture::isActiveFetching()  bool LLViewerTexture::bindDebugImage(const S32 stage)  { +    LL_PROFILE_ZONE_SCOPED;  	if (stage < 0) return false;  	bool res = true; @@ -780,6 +791,7 @@ bool LLViewerTexture::bindDebugImage(const S32 stage)  bool LLViewerTexture::bindDefaultImage(S32 stage)   { +    LL_PROFILE_ZONE_SCOPED;  	if (stage < 0) return false;  	bool res = true; @@ -822,6 +834,7 @@ void LLViewerTexture::forceImmediateUpdate()  void LLViewerTexture::addTextureStats(F32 virtual_size, BOOL needs_gltexture) const   { +    LL_PROFILE_ZONE_SCOPED;  	if(needs_gltexture)  	{  		mNeedsGLTexture = TRUE; @@ -864,6 +877,7 @@ void LLViewerTexture::setKnownDrawSize(S32 width, S32 height)  //virtual  void LLViewerTexture::addFace(U32 ch, LLFace* facep)   { +    LL_PROFILE_ZONE_SCOPED;  	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);  	if(mNumFaces[ch] >= mFaceList[ch].size()) @@ -879,6 +893,7 @@ void LLViewerTexture::addFace(U32 ch, LLFace* facep)  //virtual  void LLViewerTexture::removeFace(U32 ch, LLFace* facep)   { +    LL_PROFILE_ZONE_SCOPED;  	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);  	if(mNumFaces[ch] > 1) @@ -919,6 +934,7 @@ S32 LLViewerTexture::getNumFaces(U32 ch) const  //virtual  void LLViewerTexture::addVolume(U32 ch, LLVOVolume* volumep)  { +    LL_PROFILE_ZONE_SCOPED;  	if (mNumVolumes[ch] >= mVolumeList[ch].size())  	{  		mVolumeList[ch].resize(2 * mNumVolumes[ch] + 1); @@ -932,6 +948,7 @@ void LLViewerTexture::addVolume(U32 ch, LLVOVolume* volumep)  //virtual  void LLViewerTexture::removeVolume(U32 ch, LLVOVolume* volumep)  { +    LL_PROFILE_ZONE_SCOPED;  	if (mNumVolumes[ch] > 1)  	{  		S32 index = volumep->getIndexInTex(ch);  @@ -955,6 +972,7 @@ S32 LLViewerTexture::getNumVolumes(U32 ch) const  void LLViewerTexture::reorganizeFaceList()  { +    LL_PROFILE_ZONE_SCOPED;  	static const F32 MAX_WAIT_TIME = 20.f; // seconds  	static const U32 MAX_EXTRA_BUFFER_SIZE = 4; @@ -978,6 +996,7 @@ void LLViewerTexture::reorganizeFaceList()  void LLViewerTexture::reorganizeVolumeList()  { +    LL_PROFILE_ZONE_SCOPED;  	static const F32 MAX_WAIT_TIME = 20.f; // seconds  	static const U32 MAX_EXTRA_BUFFER_SIZE = 4; @@ -1180,6 +1199,7 @@ FTType LLViewerFetchedTexture::getFTType() const  void LLViewerFetchedTexture::cleanup()  { +    LL_PROFILE_ZONE_SCOPED;  	for(callback_list_t::iterator iter = mLoadedCallbackList.begin();  		iter != mLoadedCallbackList.end(); )  	{ @@ -1205,6 +1225,7 @@ void LLViewerFetchedTexture::cleanup()  //access the fast cache  void LLViewerFetchedTexture::loadFromFastCache()  { +    LL_PROFILE_ZONE_SCOPED;  	if(!mInFastCacheList)  	{  		return; //no need to access the fast cache. @@ -1350,6 +1371,7 @@ void LLViewerFetchedTexture::dump()  // ONLY called from LLViewerFetchedTextureList  void LLViewerFetchedTexture::destroyTexture()   { +    LL_PROFILE_ZONE_SCOPED;  	if(LLImageGL::sGlobalTextureMemory < sMaxDesiredTextureMem * 0.95f)//not ready to release unused memory.  	{  		return ; @@ -1366,6 +1388,7 @@ void LLViewerFetchedTexture::destroyTexture()  void LLViewerFetchedTexture::addToCreateTexture()  { +    LL_PROFILE_ZONE_SCOPED;  	bool force_update = false;  	if (getComponents() != mRawImage->getComponents())  	{ @@ -1407,6 +1430,7 @@ void LLViewerFetchedTexture::addToCreateTexture()  	}  	else  	{	 +        LL_PROFILE_ZONE_SCOPED;  #if 1  		//  		//if mRequestedDiscardLevel > mDesiredDiscardLevel, we assume the required image res keep going up, @@ -1451,99 +1475,100 @@ void LLViewerFetchedTexture::addToCreateTexture()  			}  		}  #endif -		mNeedsCreateTexture = TRUE; -		gTextureList.mCreateTextureList.insert(this); -	}	 +        scheduleCreateTexture(); +	}  	return;  }  // ONLY called from LLViewerTextureList -BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/) +BOOL LLViewerFetchedTexture::preCreateTexture(S32 usename/*= 0*/)  { -	if (!mNeedsCreateTexture) -	{ -		destroyRawImage(); -		return FALSE; -	} -	mNeedsCreateTexture = FALSE; -	if (mRawImage.isNull()) -	{ -		LL_ERRS() << "LLViewerTexture trying to create texture with no Raw Image" << LL_ENDL; -	} -	if (mRawImage->isBufferInvalid()) -	{ -		LL_WARNS() << "Can't create a texture: invalid image data" << LL_ENDL; -		destroyRawImage(); -		return FALSE; -	} -// 	LL_INFOS() << llformat("IMAGE Creating (%d) [%d x %d] Bytes: %d ", -// 						mRawDiscardLevel,  -// 						mRawImage->getWidth(), mRawImage->getHeight(),mRawImage->getDataSize()) -// 			<< mID.getString() << LL_ENDL; -	BOOL res = TRUE; +    LL_PROFILE_ZONE_SCOPED; +    if (!mNeedsCreateTexture) +    { +        destroyRawImage(); +        return FALSE; +    } +    mNeedsCreateTexture = FALSE; -	// store original size only for locally-sourced images -	if (mUrl.compare(0, 7, "file://") == 0) -	{ -		mOrigWidth = mRawImage->getWidth(); -		mOrigHeight = mRawImage->getHeight(); +    if (mRawImage.isNull()) +    { +        LL_ERRS() << "LLViewerTexture trying to create texture with no Raw Image" << LL_ENDL; +    } +    if (mRawImage->isBufferInvalid()) +    { +        LL_WARNS() << "Can't create a texture: invalid image data" << LL_ENDL; +        destroyRawImage(); +        return FALSE; +    } +    // 	LL_INFOS() << llformat("IMAGE Creating (%d) [%d x %d] Bytes: %d ", +    // 						mRawDiscardLevel,  +    // 						mRawImage->getWidth(), mRawImage->getHeight(),mRawImage->getDataSize()) +    // 			<< mID.getString() << LL_ENDL; +    BOOL res = TRUE; + +    // store original size only for locally-sourced images +    if (mUrl.compare(0, 7, "file://") == 0) +    { +        mOrigWidth = mRawImage->getWidth(); +        mOrigHeight = mRawImage->getHeight();          // This is only safe because it's a local image and fetcher doesn't use raw data          // from local images, but this might become unsafe in case of changes to fetcher -		if (mBoostLevel == BOOST_PREVIEW) -		{  -			mRawImage->biasedScaleToPowerOfTwo(1024); -		} -		else -		{ // leave black border, do not scale image content -			mRawImage->expandToPowerOfTwo(MAX_IMAGE_SIZE, FALSE); -		} -		 -		mFullWidth = mRawImage->getWidth(); -		mFullHeight = mRawImage->getHeight(); -		setTexelsPerImage(); -	} -	else -	{ -		mOrigWidth = mFullWidth; -		mOrigHeight = mFullHeight; -	} +        if (mBoostLevel == BOOST_PREVIEW) +        { +            mRawImage->biasedScaleToPowerOfTwo(1024); +        } +        else +        { // leave black border, do not scale image content +            mRawImage->expandToPowerOfTwo(MAX_IMAGE_SIZE, FALSE); +        } -	bool size_okay = true; +        mFullWidth = mRawImage->getWidth(); +        mFullHeight = mRawImage->getHeight(); +        setTexelsPerImage(); +    } +    else +    { +        mOrigWidth = mFullWidth; +        mOrigHeight = mFullHeight; +    } -	S32 discard_level = mRawDiscardLevel; -	if (mRawDiscardLevel < 0) -	{ -		LL_DEBUGS() << "Negative raw discard level when creating image: " << mRawDiscardLevel << LL_ENDL; -		discard_level = 0; -	} +    bool size_okay = true; -	U32 raw_width = mRawImage->getWidth() << discard_level; -	U32 raw_height = mRawImage->getHeight() << discard_level; +    S32 discard_level = mRawDiscardLevel; +    if (mRawDiscardLevel < 0) +    { +        LL_DEBUGS() << "Negative raw discard level when creating image: " << mRawDiscardLevel << LL_ENDL; +        discard_level = 0; +    } -	if( raw_width > MAX_IMAGE_SIZE || raw_height > MAX_IMAGE_SIZE ) -	{ -		LL_INFOS() << "Width or height is greater than " << MAX_IMAGE_SIZE << ": (" << raw_width << "," << raw_height << ")" << LL_ENDL; -		size_okay = false; -	} -	 -	if (!LLImageGL::checkSize(mRawImage->getWidth(), mRawImage->getHeight())) -	{ -		// A non power-of-two image was uploaded (through a non standard client) -		LL_INFOS() << "Non power of two width or height: (" << mRawImage->getWidth() << "," << mRawImage->getHeight() << ")" << LL_ENDL; -		size_okay = false; -	} -	 -	if( !size_okay ) -	{ -		// An inappropriately-sized image was uploaded (through a non standard client) -		// We treat these images as missing assets which causes them to -		// be renderd as 'missing image' and to stop requesting data -		LL_WARNS() << "!size_ok, setting as missing" << LL_ENDL; -		setIsMissingAsset(); -		destroyRawImage(); -		return FALSE; -	} +    U32 raw_width = mRawImage->getWidth() << discard_level; +    U32 raw_height = mRawImage->getHeight() << discard_level; + +    if (raw_width > MAX_IMAGE_SIZE || raw_height > MAX_IMAGE_SIZE) +    { +        LL_INFOS() << "Width or height is greater than " << MAX_IMAGE_SIZE << ": (" << raw_width << "," << raw_height << ")" << LL_ENDL; +        size_okay = false; +    } + +    if (!LLImageGL::checkSize(mRawImage->getWidth(), mRawImage->getHeight())) +    { +        // A non power-of-two image was uploaded (through a non standard client) +        LL_INFOS() << "Non power of two width or height: (" << mRawImage->getWidth() << "," << mRawImage->getHeight() << ")" << LL_ENDL; +        size_okay = false; +    } + +    if (!size_okay) +    { +        // An inappropriately-sized image was uploaded (through a non standard client) +        // We treat these images as missing assets which causes them to +        // be renderd as 'missing image' and to stop requesting data +        LL_WARNS() << "!size_ok, setting as missing" << LL_ENDL; +        setIsMissingAsset(); +        destroyRawImage(); +        return FALSE; +    }      if (mGLTexturep->getHasExplicitFormat())      { @@ -1565,19 +1590,79 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)          }      } -	res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel); +    return res; +} -	notifyAboutCreatingTexture(); +BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/) +{ +    if (!mNeedsCreateTexture) +    { +        return FALSE; +    } -	setActive(); +	BOOL res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel); +     +	return res; +} -	if (!needsToSaveRawImage()) -	{ -		mNeedsAux = FALSE; -		destroyRawImage(); -	} +void LLViewerFetchedTexture::postCreateTexture() +{ +    if (!mNeedsCreateTexture) +    { +        return; +    } -	return res; +    notifyAboutCreatingTexture(); + +    setActive(); + +    if (!needsToSaveRawImage()) +    { +        mNeedsAux = FALSE; +        destroyRawImage(); +    } + +    mNeedsCreateTexture = FALSE; +} + +void LLViewerFetchedTexture::scheduleCreateTexture() +{ +    ref(); +    mNeedsCreateTexture = TRUE; +    if (preCreateTexture()) +    { +        mNeedsCreateTexture = TRUE; +#if LL_WINDOWS //flip to 0 to revert to single-threaded OpenGL texture uploads +        if (!LLImageGLThread::sInstance->post([this]() +            { +                //actually create the texture on a background thread +                createTexture(); +                { +                    LL_PROFILE_ZONE_NAMED("iglt - sync"); +                    if (gGLManager.mHasSync) +                    { +                        auto sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); +                        glClientWaitSync(sync, 0, 0); +                        glDeleteSync(sync); +                    } +                    else +                    { +                        glFinish(); +                    } +                } +                LLImageGLThread::sInstance->postCallback([this]() +                    { +                        //finalize on main thread +                        postCreateTexture(); +                        unref(); +                    }); +            })) +#endif +        { +            gTextureList.mCreateTextureList.insert(this); +            unref(); +        } +    }  }  // Call with 0,0 to turn this feature off. @@ -1869,6 +1954,7 @@ void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority)  void LLViewerFetchedTexture::updateVirtualSize()   {	 +    LL_PROFILE_ZONE_SCOPED;  	if(!mMaxVirtualSizeResetCounter)  	{  		addTextureStats(0.f, FALSE);//reset @@ -1960,6 +2046,7 @@ bool LLViewerFetchedTexture::isActiveFetching()  bool LLViewerFetchedTexture::updateFetch()  { +    LL_PROFILE_ZONE_SCOPED;  	static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled", false);  	static LLCachedControl<F32>  sCameraMotionThreshold(gSavedSettings,"TextureCameraMotionThreshold", 0.2);  	static LLCachedControl<S32>  sCameraMotionBoost(gSavedSettings,"TextureCameraMotionBoost", 3); @@ -2062,7 +2149,7 @@ bool LLViewerFetchedTexture::updateFetch()  				}  				else  				{ -					mIsRawImageValid = TRUE;			 +					mIsRawImageValid = TRUE;  					addToCreateTexture();  				} @@ -2890,6 +2977,7 @@ void LLViewerFetchedTexture::destroyRawImage()  //virtual  void LLViewerFetchedTexture::switchToCachedImage()  { +    LL_PROFILE_ZONE_SCOPED;  	if(mCachedRawImage.notNull())  	{  		mRawImage = mCachedRawImage; @@ -2901,12 +2989,12 @@ void LLViewerFetchedTexture::switchToCachedImage()  			mComponents = mRawImage->getComponents();  			mGLTexturep->setComponents(mComponents);  			gTextureList.dirtyImage(this); -		}			 +		}  		mIsRawImageValid = TRUE;  		mRawDiscardLevel = mCachedRawDiscardLevel; -		gTextureList.mCreateTextureList.insert(this); -		mNeedsCreateTexture = TRUE;		 + +        scheduleCreateTexture();  	}  } @@ -3180,6 +3268,7 @@ bool LLViewerLODTexture::isUpdateFrozen()  //virtual  void LLViewerLODTexture::processTextureStats()  { +    LL_PROFILE_ZONE_SCOPED;  	updateVirtualSize();  	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes", false); diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 69568cc825..a5a1fb2c16 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -321,9 +321,13 @@ public:  	void addToCreateTexture(); - -	 // ONLY call from LLViewerTextureList +    //call to determine if createTexture is necessary +    BOOL preCreateTexture(S32 usename = 0); +	 // ONLY call from LLViewerTextureList or ImageGL background thread  	BOOL createTexture(S32 usename = 0); +    void postCreateTexture(); +    void scheduleCreateTexture(); +  	void destroyTexture() ;  	virtual void processTextureStats() ; diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 12495078e9..db740b69e9 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -114,6 +114,7 @@ void LLViewerTextureList::init()  void LLViewerTextureList::doPreloadImages()  { +    LL_PROFILE_ZONE_SCOPED;  	LL_DEBUGS("ViewerImages") << "Preloading images..." << LL_ENDL;  	llassert_always(mInitialized) ; @@ -205,6 +206,7 @@ static std::string get_texture_list_name()  void LLViewerTextureList::doPrefetchImages()  { +    LL_PROFILE_ZONE_SCOPED;  	if (LLAppViewer::instance()->getPurgeCache())  	{  		// cache was purged, no point @@ -258,6 +260,7 @@ LLViewerTextureList::~LLViewerTextureList()  void LLViewerTextureList::shutdown()  { +    LL_PROFILE_ZONE_SCOPED;  	// clear out preloads  	mImagePreloads.clear(); @@ -333,6 +336,7 @@ void LLViewerTextureList::shutdown()  void LLViewerTextureList::dump()  { +    LL_PROFILE_ZONE_SCOPED;  	LL_INFOS() << "LLViewerTextureList::dump()" << LL_ENDL;  	for (image_priority_list_t::iterator it = mImageList.begin(); it != mImageList.end(); ++it)  	{ @@ -377,6 +381,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&  												   LLGLenum primary_format,   												   const LLUUID& force_id)  { +    LL_PROFILE_ZONE_SCOPED;  	if(!mInitialized)  	{  		return NULL ; @@ -404,6 +409,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&  												   LLGLenum primary_format,   												   const LLUUID& force_id)  { +    LL_PROFILE_ZONE_SCOPED;  	if(!mInitialized)  	{  		return NULL ; @@ -492,6 +498,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,  												   LLGLenum primary_format,  												   LLHost request_from_host)  { +    LL_PROFILE_ZONE_SCOPED;  	if(!mInitialized)  	{  		return NULL ; @@ -554,6 +561,7 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,  												   LLGLenum primary_format,  												   LLHost request_from_host)  { +    LL_PROFILE_ZONE_SCOPED;  	static LLCachedControl<bool> fast_cache_fetching_enabled(gSavedSettings, "FastCacheFetchEnabled", true);  	LLPointer<LLViewerFetchedTexture> imagep ; @@ -609,6 +617,7 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,  void LLViewerTextureList::findTexturesByID(const LLUUID &image_id, std::vector<LLViewerFetchedTexture*> &output)  { +    LL_PROFILE_ZONE_SCOPED;      LLTextureKey search_key(image_id, TEX_LIST_STANDARD);      uuid_map_t::iterator iter = mUUIDMap.lower_bound(search_key);      while (iter != mUUIDMap.end() && iter->first.textureId == image_id) @@ -634,6 +643,7 @@ LLViewerFetchedTexture *LLViewerTextureList::findImage(const LLUUID &image_id, E  void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)  { +    LL_PROFILE_ZONE_SCOPED;  	assert_main_thread();  	llassert_always(mInitialized) ;  	llassert(image); @@ -653,6 +663,7 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)  void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)  { +    LL_PROFILE_ZONE_SCOPED;  	assert_main_thread();  	llassert_always(mInitialized) ;  	llassert(image); @@ -701,6 +712,7 @@ void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)  void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image, ETexListType tex_type)  { +    LL_PROFILE_ZONE_SCOPED;  	if (!new_image)  	{  		return; @@ -724,6 +736,7 @@ void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image, ETexListTy  void LLViewerTextureList::deleteImage(LLViewerFetchedTexture *image)  { +    LL_PROFILE_ZONE_SCOPED;  	if( image)  	{  		if (image->hasCallbacks()) @@ -845,6 +858,7 @@ void LLViewerTextureList::updateImages(F32 max_time)  void LLViewerTextureList::clearFetchingRequests()  { +    LL_PROFILE_ZONE_SCOPED;  	if (LLAppViewer::getTextureFetch()->getNumRequests() == 0)  	{  		return; @@ -862,6 +876,7 @@ void LLViewerTextureList::clearFetchingRequests()  void LLViewerTextureList::updateImagesDecodePriorities()  { +    LL_PROFILE_ZONE_SCOPED;  	// Update the decode priority for N images each frame  	{  		F32 lazy_flush_timeout = 30.f; // stop decoding @@ -977,6 +992,7 @@ void LLViewerTextureList::updateImagesDecodePriorities()  void LLViewerTextureList::setDebugFetching(LLViewerFetchedTexture* tex, S32 debug_level)  { +    LL_PROFILE_ZONE_SCOPED;  	if(!tex->setDebugFetching(debug_level))  	{  		return; @@ -1025,6 +1041,7 @@ void LLViewerTextureList::setDebugFetching(LLViewerFetchedTexture* tex, S32 debu  F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time)  { +    LL_PROFILE_ZONE_SCOPED;  	if (gGLManager.mIsDisabled) return 0.0f;  	// @@ -1041,6 +1058,7 @@ F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time)  		enditer = iter;  		LLViewerFetchedTexture *imagep = *curiter;  		imagep->createTexture(); +        imagep->postCreateTexture();  		if (create_timer.getElapsedTimeF32() > max_time)  		{  			break; @@ -1052,6 +1070,7 @@ F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time)  F32 LLViewerTextureList::updateImagesLoadingFastCache(F32 max_time)  { +    LL_PROFILE_ZONE_SCOPED;  	if (gGLManager.mIsDisabled) return 0.0f;  	if(mFastCacheList.empty())  	{ @@ -1082,6 +1101,7 @@ F32 LLViewerTextureList::updateImagesLoadingFastCache(F32 max_time)  void LLViewerTextureList::forceImmediateUpdate(LLViewerFetchedTexture* imagep)  { +    LL_PROFILE_ZONE_SCOPED;  	if(!imagep)  	{  		return ; @@ -1101,6 +1121,7 @@ void LLViewerTextureList::forceImmediateUpdate(LLViewerFetchedTexture* imagep)  F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)  { +    LL_PROFILE_ZONE_SCOPED;  	LLTimer image_op_timer;  	// Update fetch for N images each frame @@ -1176,6 +1197,7 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)  void LLViewerTextureList::updateImagesUpdateStats()  { +    LL_PROFILE_ZONE_SCOPED;  	if (mForceResetTextureStats)  	{  		for (image_priority_list_t::iterator iter = mImageList.begin(); @@ -1190,6 +1212,7 @@ void LLViewerTextureList::updateImagesUpdateStats()  void LLViewerTextureList::decodeAllImages(F32 max_time)  { +    LL_PROFILE_ZONE_SCOPED;  	LLTimer timer;  	//loading from fast cache  @@ -1259,6 +1282,7 @@ BOOL LLViewerTextureList::createUploadFile(const std::string& filename,  										 const std::string& out_filename,  										 const U8 codec)  {	 +    LL_PROFILE_ZONE_SCOPED;  	// Load the image  	LLPointer<LLImageFormatted> image = LLImageFormatted::createFromType(codec);  	if (image.isNull()) @@ -1312,6 +1336,7 @@ BOOL LLViewerTextureList::createUploadFile(const std::string& filename,  // note: modifies the argument raw_image!!!!  LLPointer<LLImageJ2C> LLViewerTextureList::convertToUploadFile(LLPointer<LLImageRaw> raw_image)  { +    LL_PROFILE_ZONE_SCOPED;  	raw_image->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);  	LLPointer<LLImageJ2C> compressedImage = new LLImageJ2C(); @@ -1345,6 +1370,7 @@ LLPointer<LLImageJ2C> LLViewerTextureList::convertToUploadFile(LLPointer<LLImage  // Returns min setting for TextureMemory (in MB)  S32Megabytes LLViewerTextureList::getMinVideoRamSetting()  { +    LL_PROFILE_ZONE_SCOPED;  	U32Megabytes system_ram = gSysMemory.getPhysicalMemoryKB();  	//min texture mem sets to 64M if total physical mem is more than 1.5GB  	return (system_ram > U32Megabytes(1500)) ? S32Megabytes(64) : gMinVideoRam ; @@ -1354,6 +1380,7 @@ S32Megabytes LLViewerTextureList::getMinVideoRamSetting()  // Returns max setting for TextureMemory (in MB)  S32Megabytes LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, float mem_multiplier)  { +    LL_PROFILE_ZONE_SCOPED;  	S32Megabytes max_texmem;  	if (gGLManager.mVRAM != 0)  	{ @@ -1407,6 +1434,7 @@ const S32Megabytes VIDEO_CARD_FRAMEBUFFER_MEM(12);  const S32Megabytes MIN_MEM_FOR_NON_TEXTURE(512);  void LLViewerTextureList::updateMaxResidentTexMem(S32Megabytes mem)  { +    LL_PROFILE_ZONE_SCOPED;  	// Initialize the image pipeline VRAM settings  	S32Megabytes cur_mem(gSavedSettings.getS32("TextureMemory"));  	F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple"); @@ -1647,6 +1675,7 @@ void LLUIImageList::cleanUp()  LLUIImagePtr LLUIImageList::getUIImageByID(const LLUUID& image_id, S32 priority)  { +    LL_PROFILE_ZONE_SCOPED;  	// use id as image name  	std::string image_name = image_id.asString(); @@ -1665,6 +1694,7 @@ LLUIImagePtr LLUIImageList::getUIImageByID(const LLUUID& image_id, S32 priority)  LLUIImagePtr LLUIImageList::getUIImage(const std::string& image_name, S32 priority)  { +    LL_PROFILE_ZONE_SCOPED;  	// look for existing image  	uuid_ui_image_map_t::iterator found_it = mUIImages.find(image_name);  	if (found_it != mUIImages.end()) @@ -1682,6 +1712,7 @@ LLUIImagePtr LLUIImageList::loadUIImageByName(const std::string& name, const std  											  BOOL use_mips, const LLRect& scale_rect, const LLRect& clip_rect, LLViewerTexture::EBoostLevel boost_priority,  											  LLUIImage::EScaleStyle scale_style)  { +    LL_PROFILE_ZONE_SCOPED;  	if (boost_priority == LLGLTexture::BOOST_NONE)  	{  		boost_priority = LLGLTexture::BOOST_UI; @@ -1694,6 +1725,7 @@ LLUIImagePtr LLUIImageList::loadUIImageByID(const LLUUID& id,  											BOOL use_mips, const LLRect& scale_rect, const LLRect& clip_rect, LLViewerTexture::EBoostLevel boost_priority,  											LLUIImage::EScaleStyle scale_style)  { +    LL_PROFILE_ZONE_SCOPED;  	if (boost_priority == LLGLTexture::BOOST_NONE)  	{  		boost_priority = LLGLTexture::BOOST_UI; @@ -1705,6 +1737,7 @@ LLUIImagePtr LLUIImageList::loadUIImageByID(const LLUUID& id,  LLUIImagePtr LLUIImageList::loadUIImage(LLViewerFetchedTexture* imagep, const std::string& name, BOOL use_mips, const LLRect& scale_rect, const LLRect& clip_rect,  										LLUIImage::EScaleStyle scale_style)  { +    LL_PROFILE_ZONE_SCOPED;  	if (!imagep) return NULL;  	imagep->setAddressMode(LLTexUnit::TAM_CLAMP); @@ -1742,6 +1775,7 @@ LLUIImagePtr LLUIImageList::loadUIImage(LLViewerFetchedTexture* imagep, const st  LLUIImagePtr LLUIImageList::preloadUIImage(const std::string& name, const std::string& filename, BOOL use_mips, const LLRect& scale_rect, const LLRect& clip_rect, LLUIImage::EScaleStyle scale_style)  { +    LL_PROFILE_ZONE_SCOPED;  	// look for existing image  	uuid_ui_image_map_t::iterator found_it = mUIImages.find(name);  	if (found_it != mUIImages.end()) @@ -1756,6 +1790,7 @@ LLUIImagePtr LLUIImageList::preloadUIImage(const std::string& name, const std::s  //static   void LLUIImageList::onUIImageLoaded( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* user_data )  { +    LL_PROFILE_ZONE_SCOPED;  	if(!success || !user_data)   	{  		return; @@ -1857,6 +1892,7 @@ struct UIImageDeclarations : public LLInitParam::Block<UIImageDeclarations>  bool LLUIImageList::initFromFile()  { +    LL_PROFILE_ZONE_SCOPED;  	// Look for textures.xml in all the right places. Pass  	// constraint=LLDir::ALL_SKINS because we want to overlay textures.xml  	// from all the skins directories. diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index c52a4e98d3..82ece85c1b 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2011,7 +2011,7 @@ LLViewerWindow::LLViewerWindow(const Params& p)  	// Init the image list.  Must happen after GL is initialized and before the images that  	// LLViewerWindow needs are requested. -	LLImageGL::initClass(LLViewerTexture::MAX_GL_IMAGE_CATEGORY) ; +	LLImageGL::initClass(mWindow, LLViewerTexture::MAX_GL_IMAGE_CATEGORY) ;  	gTextureList.init();  	LLViewerTextureManager::init() ;  	gBumpImageList.init();  | 
