From faab4af12b583b48cfdd9f6e41dad7bba06c3970 Mon Sep 17 00:00:00 2001 From: mobserveur Date: Sat, 22 Mar 2025 15:21:11 +0100 Subject: Temporary fix for antialiasing causing lower performance on mac Water exclusion seems to be at the origin of poor performance with antilasing combind with hdr mode. We remove this from pipeline.cpp for now as a temporary fix. Technically we revert pipeline.cpp to the previous version. --- indra/newview/pipeline.cpp | 60 ---------------------------------------------- 1 file changed, 60 deletions(-) (limited to 'indra') diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index e441e189ad..362930a71e 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -431,7 +431,6 @@ void LLPipeline::init() stop_glerror(); //create render pass pools - getPool(LLDrawPool::POOL_WATEREXCLUSION); getPool(LLDrawPool::POOL_ALPHA_PRE_WATER); getPool(LLDrawPool::POOL_ALPHA_POST_WATER); getPool(LLDrawPool::POOL_SIMPLE); @@ -674,8 +673,6 @@ void LLPipeline::cleanup() // don't delete wl sky pool it was handled above in the for loop //delete mWLSkyPool; mWLSkyPool = NULL; - delete mWaterExclusionPool; - mWaterExclusionPool = nullptr; releaseGLBuffers(); @@ -910,15 +907,6 @@ bool LLPipeline::allocateScreenBufferInternal(U32 resX, U32 resY) mPostMap.allocate(resX, resY, screenFormat); - // The water exclusion mask needs its own depth buffer so we can take care of the problem of multiple water planes. - // Should we ever make water not just a plane, it also aids with that as well as the water planes will be rendered into the mask. - // Why do we do this? Because it saves us some janky logic in the exclusion shader when we generate the mask. - // Regardless, this should always only be an R8 texture unless we choose to start having multiple kinds of exclusion that 8 bits can't handle. - // - Geenz 2025-02-06 - bool success = mWaterExclusionMask.allocate(resX, resY, GL_R8, true); - - assert(success); - // used to scale down textures // See LLViwerTextureList::updateImagesCreateTextures and LLImageGL::scaleDown mDownResMap.allocate(1024, 1024, GL_RGBA); @@ -1178,8 +1166,6 @@ void LLPipeline::releaseGLBuffers() mSceneMap.release(); - mWaterExclusionMask.release(); - mPostMap.release(); mFXAAMap.release(); @@ -1690,10 +1676,6 @@ LLDrawPool *LLPipeline::findPool(const U32 type, LLViewerTexture *tex0) poolp = mPBRAlphaMaskPool; break; - case LLDrawPool::POOL_WATEREXCLUSION: - poolp = mWaterExclusionPool; - break; - default: llassert(0); LL_ERRS() << "Invalid Pool Type in LLPipeline::findPool() type=" << type << LL_ENDL; @@ -4090,8 +4072,6 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera, bool do_occlusion) #endif } -// Render all of our geometry that's required after our deferred pass. -// This is gonna be stuff like alpha, water, etc. void LLPipeline::renderGeomPostDeferred(LLCamera& camera) { LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL; @@ -4110,10 +4090,6 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera) bool done_atmospherics = LLPipeline::sRenderingHUDs; //skip atmospherics on huds bool done_water_haze = done_atmospherics; - bool done_water_exclusion = false; - - // do water exclusion just before water pass. - U32 water_exclusion_pass = LLDrawPool::POOL_WATEREXCLUSION; // do atmospheric haze just before post water alpha U32 atmospherics_pass = LLDrawPool::POOL_ALPHA_POST_WATER; @@ -4152,12 +4128,6 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera) cur_type = poolp->getType(); - if (cur_type >= water_exclusion_pass && !done_water_exclusion) - { // do water exclusion against depth buffer before rendering alpha - doWaterExclusionMask(); - done_water_exclusion = true; - } - if (cur_type >= atmospherics_pass && !done_atmospherics) { // do atmospherics against depth buffer before rendering alpha doAtmospherics(); @@ -5273,17 +5243,6 @@ void LLPipeline::addToQuickLookup( LLDrawPool* new_poolp ) } break; - case LLDrawPool::POOL_WATEREXCLUSION: - if (mWaterExclusionPool) - { - llassert(0); - LL_WARNS() << "LLPipeline::addPool(): Ignoring duplicate Water Exclusion Pool" << LL_ENDL; - } - else - { - mWaterExclusionPool = new_poolp; - } - break; default: llassert(0); @@ -5406,11 +5365,6 @@ void LLPipeline::removeFromQuickLookup( LLDrawPool* poolp ) mPBRAlphaMaskPool = NULL; break; - case LLDrawPool::POOL_WATEREXCLUSION: - llassert(poolp == mWaterExclusionPool); - mWaterExclusionPool = nullptr; - break; - default: llassert(0); LL_WARNS() << "Invalid Pool Type in LLPipeline::removeFromQuickLookup() type=" << poolp->getType() << LL_ENDL; @@ -8912,7 +8866,6 @@ void LLPipeline::renderDeferredLighting() LLPipeline::RENDER_TYPE_FULLBRIGHT_ALPHA_MASK, LLPipeline::RENDER_TYPE_TERRAIN, LLPipeline::RENDER_TYPE_WATER, - LLPipeline::RENDER_TYPE_WATEREXCLUSION, END_RENDER_TYPES); renderGeomPostDeferred(*LLViewerCamera::getInstance()); @@ -9051,8 +9004,6 @@ void LLPipeline::doWaterHaze() static LLStaticHashedString above_water_str("above_water"); haze_shader.uniform1i(above_water_str, sUnderWaterRender ? -1 : 1); - haze_shader.bindTexture(LLShaderMgr::WATER_EXCLUSIONTEX, &mWaterExclusionMask); - if (LLPipeline::sUnderWaterRender) { LLGLDepthTest depth(GL_FALSE); @@ -9083,17 +9034,6 @@ void LLPipeline::doWaterHaze() } } -void LLPipeline::doWaterExclusionMask() -{ - mWaterExclusionMask.bindTarget(); - glClearColor(1, 1, 1, 1); - mWaterExclusionMask.clear(); - mWaterExclusionPool->render(); - - mWaterExclusionMask.flush(); - glClearColor(0, 0, 0, 0); -} - void LLPipeline::setupSpotLight(LLGLSLShader& shader, LLDrawable* drawablep) { //construct frustum -- cgit v1.2.3