diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llappviewer.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerdisplay.cpp | 81 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 175 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 123 | 
4 files changed, 203 insertions, 178 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 79f1cc0e8f..94f0b31ecd 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1667,6 +1667,8 @@ bool LLAppViewer::doFrame()  		LL_INFOS() << "Exiting main_loop" << LL_ENDL;  	} +    LL_PROFILER_FRAME_END +  	return ! LLApp::isRunning();  } diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 109dc93261..a590237440 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -1259,7 +1259,7 @@ bool setup_hud_matrices(const LLRect& screen_region)  void render_ui(F32 zoom_factor, int subfield)  { -    LL_RECORD_BLOCK_TIME(FTM_RENDER_UI); +	LL_RECORD_BLOCK_TIME(FTM_RENDER_UI);  	LLGLState::checkStates(); @@ -1274,7 +1274,7 @@ void render_ui(F32 zoom_factor, int subfield)  	if(LLSceneMonitor::getInstance()->needsUpdate())  	{ -        LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_SCENE_MON); +		LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_SCENE_MON);  		gGL.pushMatrix();  		gViewerWindow->setup2DRender();  		LLSceneMonitor::getInstance()->compare(); @@ -1282,55 +1282,64 @@ void render_ui(F32 zoom_factor, int subfield)  		gGL.popMatrix();  	} -    // Finalize scene -    gPipeline.renderFinalize(); +	// Finalize scene +	gPipeline.renderFinalize(); -    LL_RECORD_BLOCK_TIME(FTM_RENDER_HUD); -    render_hud_elements(); -	render_hud_attachments(); - -	LLGLSDefault gls_default; -	LLGLSUIDefault gls_ui;  	{ -		gPipeline.disableLights(); -	} +		// SL-15709 +		// NOTE: Tracy only allows one ZoneScoped per function. +		// Solutions are: +		// 1. Use a new scope +		// 2. Use named zones +		// 3. Use transient zones +		LL_RECORD_BLOCK_TIME(FTM_RENDER_HUD); +		render_hud_elements(); +		render_hud_attachments(); + +		LLGLSDefault gls_default; +		LLGLSUIDefault gls_ui; +		{ +			gPipeline.disableLights(); +		} -	{ -		gGL.color4f(1,1,1,1); -		if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))  		{ -			if (!gDisconnected) +			gGL.color4f(1,1,1,1); +			if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))  			{ -                LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_3D); -				render_ui_3d(); +				if (!gDisconnected) +				{ +					LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_3D); +					render_ui_3d(); +					LLGLState::checkStates(); +				} +				else +				{ +					render_disconnected_background(); +				} + +				LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_2D); +				render_ui_2d();  				LLGLState::checkStates();  			} -			else +			gGL.flush(); +  			{ -				render_disconnected_background(); +				LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_DEBUG_TEXT); +				gViewerWindow->setup2DRender(); +				gViewerWindow->updateDebugText(); +				gViewerWindow->drawDebugText();  			} -            LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_2D); -			render_ui_2d(); -			LLGLState::checkStates(); +			LLVertexBuffer::unbind();  		} -		gGL.flush(); +		if (!gSnapshot)  		{ -            LL_RECORD_BLOCK_TIME(FTM_RENDER_UI_DEBUG_TEXT); -			gViewerWindow->setup2DRender(); -			gViewerWindow->updateDebugText(); -			gViewerWindow->drawDebugText(); +			set_current_modelview(saved_view); +			gGL.popMatrix();  		} -		LLVertexBuffer::unbind(); -	} - -	if (!gSnapshot) -	{ -		set_current_modelview(saved_view); -		gGL.popMatrix(); -	} +	} // Tracy integration  }  static LLTrace::BlockTimerStatHandle FTM_SWAP("Swap"); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index f063800587..f9b2285989 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -6045,123 +6045,130 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)  	if (group && group->hasState(LLSpatialGroup::MESH_DIRTY) && !group->hasState(LLSpatialGroup::GEOM_DIRTY))  	{  		LL_RECORD_BLOCK_TIME(FTM_REBUILD_VOLUME_VB); -		LL_RECORD_BLOCK_TIME(FTM_REBUILD_VOLUME_GEN_DRAW_INFO); //make sure getgeometryvolume shows up in the right place in timers +		{ +			// SL-15709 -- NOTE: Tracy only allows one ZoneScoped per function. +			// Solutions are: +			// 1. Use a new scope +			// 2. Use named zones +			// 3. Use transient zones +			LL_RECORD_BLOCK_TIME(FTM_REBUILD_VOLUME_GEN_DRAW_INFO); //make sure getgeometryvolume shows up in the right place in timers -		group->mBuilt = 1.f; +			group->mBuilt = 1.f; -		S32 num_mapped_vertex_buffer = LLVertexBuffer::sMappedCount ; +			S32 num_mapped_vertex_buffer = LLVertexBuffer::sMappedCount ; -		const U32 MAX_BUFFER_COUNT = 4096; -		LLVertexBuffer* locked_buffer[MAX_BUFFER_COUNT]; -		 -		U32 buffer_count = 0; +			const U32 MAX_BUFFER_COUNT = 4096; +			LLVertexBuffer* locked_buffer[MAX_BUFFER_COUNT]; -		for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter) -		{ -			LLDrawable* drawablep = (LLDrawable*)(*drawable_iter)->getDrawable(); +			U32 buffer_count = 0; -			if (drawablep && !drawablep->isDead() && drawablep->isState(LLDrawable::REBUILD_ALL) && !drawablep->isState(LLDrawable::RIGGED) ) +			for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter)  			{ -				LLVOVolume* vobj = drawablep->getVOVolume(); -                if (debugLoggingEnabled("AnimatedObjectsLinkset")) -                { -                    if (vobj->isAnimatedObject() && vobj->isRiggedMesh()) -                    { -                        std::string vobj_name = llformat("Vol%p", vobj); -                        F32 est_tris = vobj->getEstTrianglesMax(); -                        LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuildMesh, tris " << est_tris << LL_ENDL;  -                    } -                } -				if (vobj->isNoLOD()) continue; - -				vobj->preRebuild(); - -				if (drawablep->isState(LLDrawable::ANIMATED_CHILD)) -				{ -					vobj->updateRelativeXform(true); -				} +				LLDrawable* drawablep = (LLDrawable*)(*drawable_iter)->getDrawable(); -				LLVolume* volume = vobj->getVolume(); -				for (S32 i = 0; i < drawablep->getNumFaces(); ++i) +				if (drawablep && !drawablep->isDead() && drawablep->isState(LLDrawable::REBUILD_ALL) && !drawablep->isState(LLDrawable::RIGGED) )  				{ -					LLFace* face = drawablep->getFace(i); -					if (face) +					LLVOVolume* vobj = drawablep->getVOVolume(); +					if (debugLoggingEnabled("AnimatedObjectsLinkset"))  					{ -						LLVertexBuffer* buff = face->getVertexBuffer(); -						if (buff) +						if (vobj->isAnimatedObject() && vobj->isRiggedMesh())  						{ -							llassert(!face->isState(LLFace::RIGGED)); +							std::string vobj_name = llformat("Vol%p", vobj); +							F32 est_tris = vobj->getEstTrianglesMax(); +							LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuildMesh, tris " << est_tris << LL_ENDL; +						} +					} +					if (vobj->isNoLOD()) continue; -							if (!face->getGeometryVolume(*volume, face->getTEOffset(),  -								vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex())) -							{ //something's gone wrong with the vertex buffer accounting, rebuild this group  -								group->dirtyGeom(); -								gPipeline.markRebuild(group, TRUE); -							} +					vobj->preRebuild(); +					if (drawablep->isState(LLDrawable::ANIMATED_CHILD)) +					{ +						vobj->updateRelativeXform(true); +					} -							if (buff->isLocked() && buffer_count < MAX_BUFFER_COUNT) +					LLVolume* volume = vobj->getVolume(); +					for (S32 i = 0; i < drawablep->getNumFaces(); ++i) +					{ +						LLFace* face = drawablep->getFace(i); +						if (face) +						{ +							LLVertexBuffer* buff = face->getVertexBuffer(); +							if (buff)  							{ -								locked_buffer[buffer_count++] = buff; +								llassert(!face->isState(LLFace::RIGGED)); + +								if (!face->getGeometryVolume(*volume, face->getTEOffset(),  +									vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex())) +								{ //something's gone wrong with the vertex buffer accounting, rebuild this group  +									group->dirtyGeom(); +									gPipeline.markRebuild(group, TRUE); +								} + + +								if (buff->isLocked() && buffer_count < MAX_BUFFER_COUNT) +								{ +									locked_buffer[buffer_count++] = buff; +								}  							}  						}  					} + +					if (drawablep->isState(LLDrawable::ANIMATED_CHILD)) +					{ +						vobj->updateRelativeXform(); +					} + +					drawablep->clearState(LLDrawable::REBUILD_ALL);  				} +			} -				if (drawablep->isState(LLDrawable::ANIMATED_CHILD)) +			{ +				LL_RECORD_BLOCK_TIME(FTM_REBUILD_MESH_FLUSH); +				for (LLVertexBuffer** iter = locked_buffer, ** end_iter = locked_buffer+buffer_count; iter != end_iter; ++iter)  				{ -					vobj->updateRelativeXform(); +					(*iter)->flush();  				} -				 -				drawablep->clearState(LLDrawable::REBUILD_ALL); +				// don't forget alpha +				if(group != NULL && +				   !group->mVertexBuffer.isNull() && +				   group->mVertexBuffer->isLocked()) +				{ +					group->mVertexBuffer->flush(); +				}  			} -		} -		 -		{ -			LL_RECORD_BLOCK_TIME(FTM_REBUILD_MESH_FLUSH); -			for (LLVertexBuffer** iter = locked_buffer, ** end_iter = locked_buffer+buffer_count; iter != end_iter; ++iter) -		{ -			(*iter)->flush(); -		} - -		// don't forget alpha -		if(group != NULL &&  -		   !group->mVertexBuffer.isNull() &&  -		   group->mVertexBuffer->isLocked()) -		{ -			group->mVertexBuffer->flush(); -		} -		} -		//if not all buffers are unmapped -		if(num_mapped_vertex_buffer != LLVertexBuffer::sMappedCount)  -		{ -			LL_WARNS() << "Not all mapped vertex buffers are unmapped!" << LL_ENDL ;  -			for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter) +			//if not all buffers are unmapped +			if(num_mapped_vertex_buffer != LLVertexBuffer::sMappedCount)  			{ -				LLDrawable* drawablep = (LLDrawable*)(*drawable_iter)->getDrawable(); -				if(!drawablep) -				{ -					continue; -				} -				for (S32 i = 0; i < drawablep->getNumFaces(); ++i) +				LL_WARNS() << "Not all mapped vertex buffers are unmapped!" << LL_ENDL ; +				for (LLSpatialGroup::element_iter drawable_iter = group->getDataBegin(); drawable_iter != group->getDataEnd(); ++drawable_iter)  				{ -					LLFace* face = drawablep->getFace(i); -					if (face) +					LLDrawable* drawablep = (LLDrawable*)(*drawable_iter)->getDrawable(); +					if(!drawablep) +					{ +						continue; +					} +					for (S32 i = 0; i < drawablep->getNumFaces(); ++i)  					{ -						LLVertexBuffer* buff = face->getVertexBuffer(); -						if (buff && buff->isLocked()) +						LLFace* face = drawablep->getFace(i); +						if (face)  						{ -							buff->flush(); +							LLVertexBuffer* buff = face->getVertexBuffer(); +							if (buff && buff->isLocked()) +							{ +								buff->flush(); +							}  						}  					}  				} -			}  +			} + +			group->clearState(LLSpatialGroup::MESH_DIRTY | LLSpatialGroup::NEW_DRAWINFO);  		} -		group->clearState(LLSpatialGroup::MESH_DIRTY | LLSpatialGroup::NEW_DRAWINFO); -	} +	} // Tracy integration  //	llassert(!group || !group->isState(LLSpatialGroup::NEW_DRAWINFO));  } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index cd1b9c7c69..e7c2d4db39 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -4564,92 +4564,99 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera)  	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomDeferred");  	LL_RECORD_BLOCK_TIME(FTM_RENDER_GEOMETRY); +	{ +		// SL-15709 -- NOTE: Tracy only allows one ZoneScoped per function. +		// Solutions are: +		// 1. Use a new scope +		// 2. Use named zones +		// 3. Use transient zones +		LL_RECORD_BLOCK_TIME(FTM_DEFERRED_POOLS); -	LL_RECORD_BLOCK_TIME(FTM_DEFERRED_POOLS); - -	LLGLEnable cull(GL_CULL_FACE); +		LLGLEnable cull(GL_CULL_FACE); -	for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter) -	{ -		LLDrawPool *poolp = *iter; -		if (hasRenderType(poolp->getType())) +		for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)  		{ -			poolp->prerender(); +			LLDrawPool *poolp = *iter; +			if (hasRenderType(poolp->getType())) +			{ +				poolp->prerender(); +			}  		} -	} -	LLGLEnable multisample(RenderFSAASamples > 0 ? GL_MULTISAMPLE_ARB : 0); +		LLGLEnable multisample(RenderFSAASamples > 0 ? GL_MULTISAMPLE_ARB : 0); -	LLVertexBuffer::unbind(); +		LLVertexBuffer::unbind(); -	LLGLState::checkStates(); -	LLGLState::checkTextureChannels(); -	LLGLState::checkClientArrays(); +		LLGLState::checkStates(); +		LLGLState::checkTextureChannels(); +		LLGLState::checkClientArrays(); -	U32 cur_type = 0; +		U32 cur_type = 0; -	gGL.setColorMask(true, true); +		gGL.setColorMask(true, true); -	pool_set_t::iterator iter1 = mPools.begin(); +		pool_set_t::iterator iter1 = mPools.begin(); -	while ( iter1 != mPools.end() ) -	{ -		LLDrawPool *poolp = *iter1; +		while ( iter1 != mPools.end() ) +		{ +			LLDrawPool *poolp = *iter1; -		cur_type = poolp->getType(); +			cur_type = poolp->getType(); -		pool_set_t::iterator iter2 = iter1; -		if (hasRenderType(poolp->getType()) && poolp->getNumDeferredPasses() > 0) -		{ -			LL_RECORD_BLOCK_TIME(FTM_DEFERRED_POOLRENDER); +			pool_set_t::iterator iter2 = iter1; +			if (hasRenderType(poolp->getType()) && poolp->getNumDeferredPasses() > 0) +			{ +				LL_RECORD_BLOCK_TIME(FTM_DEFERRED_POOLRENDER); -			gGLLastMatrix = NULL; -			gGL.loadMatrix(gGLModelView); +				gGLLastMatrix = NULL; +				gGL.loadMatrix(gGLModelView); -			for( S32 i = 0; i < poolp->getNumDeferredPasses(); i++ ) -			{ -				LLVertexBuffer::unbind(); -				poolp->beginDeferredPass(i); -				for (iter2 = iter1; iter2 != mPools.end(); iter2++) +				for( S32 i = 0; i < poolp->getNumDeferredPasses(); i++ )  				{ -					LLDrawPool *p = *iter2; -					if (p->getType() != cur_type) +					LLVertexBuffer::unbind(); +					poolp->beginDeferredPass(i); +					for (iter2 = iter1; iter2 != mPools.end(); iter2++)  					{ -						break; +						LLDrawPool *p = *iter2; +						if (p->getType() != cur_type) +						{ +							break; +						} + +						if ( !p->getSkipRenderFlag() ) { p->renderDeferred(i); }  					} -										 -					if ( !p->getSkipRenderFlag() ) { p->renderDeferred(i); } -				} -				poolp->endDeferredPass(i); -				LLVertexBuffer::unbind(); +					poolp->endDeferredPass(i); +					LLVertexBuffer::unbind(); -				if (gDebugGL || gDebugPipeline) -				{ -					LLGLState::checkStates(); +					if (gDebugGL || gDebugPipeline) +					{ +						LLGLState::checkStates(); +					}  				}  			} -		} -		else -		{ -			// Skip all pools of this type -			for (iter2 = iter1; iter2 != mPools.end(); iter2++) +			else  			{ -				LLDrawPool *p = *iter2; -				if (p->getType() != cur_type) +				// Skip all pools of this type +				for (iter2 = iter1; iter2 != mPools.end(); iter2++)  				{ -					break; +					LLDrawPool *p = *iter2; +					if (p->getType() != cur_type) +					{ +						break; +					}  				}  			} +			iter1 = iter2; +			stop_glerror();  		} -		iter1 = iter2; -		stop_glerror(); -	} -	gGLLastMatrix = NULL; -    gGL.matrixMode(LLRender::MM_MODELVIEW); -	gGL.loadMatrix(gGLModelView); +		gGLLastMatrix = NULL; +		gGL.matrixMode(LLRender::MM_MODELVIEW); +		gGL.loadMatrix(gGLModelView); -	gGL.setColorMask(true, false); +		gGL.setColorMask(true, false); + +	} // Tracy ZoneScoped  }  void LLPipeline::renderGeomPostDeferred(LLCamera& camera, bool do_occlusion)  | 
