diff options
| author | Runitai Linden <davep@lindenlab.com> | 2021-10-13 10:35:39 -0500 | 
|---|---|---|
| committer | Runitai Linden <davep@lindenlab.com> | 2021-10-13 10:35:39 -0500 | 
| commit | a1e6cbe4a802f92182163171e6743e7f63d89ace (patch) | |
| tree | 0e2bf172b1dec9ca0a8c88fd91cb763c68f3f197 /indra | |
| parent | 74a2354353813db529ae123858bafba86cd12110 (diff) | |
SL-16166 Apply LLRenderPass::pushBatch optimizations to LLDrawPoolBump::pushBatch
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llrender/llrender.cpp | 22 | ||||
| -rw-r--r-- | indra/llrender/llrender.h | 3 | ||||
| -rw-r--r-- | indra/newview/lldrawpool.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/lldrawpoolbump.cpp | 28 | 
4 files changed, 39 insertions, 28 deletions
| diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 34c5b77944..91d3c96fbe 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -472,6 +472,28 @@ void LLTexUnit::unbind(eTextureType type)  	}  } +void LLTexUnit::unbindFast(eTextureType type) +{ +    activate(); + +    // Disabled caching of binding state. +    if (mCurrTexType == type) +    { +        mCurrTexture = 0; + +        // Always make sure our texture color space is reset to linear.  SRGB sampling should be opt-in in the vast majority of cases.  Also prevents color space "popping". +        mTexColorSpace = TCS_LINEAR; +        if (type == LLTexUnit::TT_TEXTURE) +        { +            glBindTexture(sGLTextureType[type], sWhiteTexture); +        } +        else +        { +            glBindTexture(sGLTextureType[type], 0); +        } +    } +} +  void LLTexUnit::setTextureAddressMode(eTextureAddressMode mode)  {  	if (mIndex < 0 || mCurrTexture == 0) return; diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 658cdda504..6e2647a16b 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -188,6 +188,9 @@ public:  	// (only if there's a texture of the given type currently bound)  	void unbind(eTextureType type); +    // Fast but unsafe version of unbind +    void unbindFast(eTextureType type); +  	// Sets the addressing mode used to sample the texture  	// Warning: this stays set for the bound texture forever,   	// make sure you want to permanently change the address mode  for the bound texture. diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 01dd307187..75d569ffbb 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -496,17 +496,15 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL ba  		}  	} +    if (params.mGroup)      { -        if (params.mGroup) -        { -            params.mGroup->rebuildMesh(); -        } +        params.mGroup->rebuildMesh(); +    } -        LLGLEnableFunc stencil_test(GL_STENCIL_TEST, params.mSelected, &LLGLCommonFunc::selected_stencil_test); +    LLGLEnableFunc stencil_test(GL_STENCIL_TEST, params.mSelected, &LLGLCommonFunc::selected_stencil_test); -        params.mVertexBuffer->setBufferFast(mask); -        params.mVertexBuffer->drawRangeFast(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); -    } +    params.mVertexBuffer->setBufferFast(mask); +    params.mVertexBuffer->drawRangeFast(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);  	if (tex_setup)  	{ diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 14069fa6c2..7e2dfbfda1 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -677,6 +677,7 @@ BOOL LLDrawPoolBump::bindBumpMap(LLFace* face, S32 channel)  //static  BOOL LLDrawPoolBump::bindBumpMap(U8 bump_code, LLViewerTexture* texture, F32 vsize, S32 channel)  { +    LL_PROFILE_ZONE_SCOPED;  	//Note: texture atlas does not support bump texture now.  	LLViewerFetchedTexture* tex = LLViewerTextureManager::staticCastToFetchedTexture(texture) ;  	if(!tex) @@ -1497,6 +1498,7 @@ void LLDrawPoolBump::renderBump(U32 type, U32 mask)  void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures)  { +    LL_PROFILE_ZONE_SCOPED;  	applyModelMatrix(params);  	bool tex_setup = false; @@ -1507,7 +1509,7 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL  		{  			if (params.mTextureList[i].notNull())  			{ -				gGL.getTexUnit(i)->bind(params.mTextureList[i], TRUE); +				gGL.getTexUnit(i)->bindFast(params.mTextureList[i]);  			}  		}  	} @@ -1522,13 +1524,6 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL  			}  			else  			{ -				if (!LLGLSLShader::sNoFixedFunction) -				{ -					gGL.getTexUnit(1)->activate(); -					gGL.matrixMode(LLRender::MM_TEXTURE); -					gGL.loadMatrix((GLfloat*) params.mTextureMatrix->mMatrix); -				} -  				gGL.getTexUnit(0)->activate();  				gGL.matrixMode(LLRender::MM_TEXTURE);  				gGL.loadMatrix((GLfloat*) params.mTextureMatrix->mMatrix); @@ -1545,8 +1540,7 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL  		{  			if (params.mTexture.notNull())  			{ -				gGL.getTexUnit(diffuse_channel)->bind(params.mTexture); -				params.mTexture->addTextureStats(params.mVSize);		 +				gGL.getTexUnit(diffuse_channel)->bindFast(params.mTexture);  			}  			else  			{ @@ -1559,10 +1553,10 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL  	{  		params.mGroup->rebuildMesh();  	} -	params.mVertexBuffer->setBuffer(mask); -	params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); -	gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); -	if (tex_setup) +	params.mVertexBuffer->setBufferFast(mask); +	params.mVertexBuffer->drawRangeFast(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); + +    if (tex_setup)  	{  		if (mShiny)  		{ @@ -1570,12 +1564,6 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL  		}  		else  		{ -			if (!LLGLSLShader::sNoFixedFunction) -			{ -				gGL.getTexUnit(1)->activate(); -				gGL.matrixMode(LLRender::MM_TEXTURE); -				gGL.loadIdentity(); -			}  			gGL.getTexUnit(0)->activate();  			gGL.matrixMode(LLRender::MM_TEXTURE);  		} | 
