From 20ef149dcb59faa1fe75740d76df5e47f566b7bf Mon Sep 17 00:00:00 2001 From: Shyotl Date: Tue, 16 Aug 2011 02:37:18 -0500 Subject: [PATCH] Added test setting 'ShyotlUseLegacyTextureBatching' to disable new texture indexing. The new indexing method requires heavy branching in shaders, which some hardware may not perfom well with. --- indra/llrender/llglslshader.cpp | 8 +++++--- indra/newview/app_settings/settings.xml | 24 ++++++++++++++++++++++-- indra/newview/llviewercontrol.cpp | 2 ++ indra/newview/llviewershadermgr.cpp | 3 ++- indra/newview/llvovolume.cpp | 3 ++- 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 225ba3913..d84158342 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -37,6 +37,7 @@ #include "llshadermgr.h" #include "llfile.h" #include "llrender.h" +#include "llcontrol.h" #if LL_DARWIN #include "OpenGL/OpenGL.h" @@ -131,11 +132,12 @@ BOOL LLGLSLShader::createShader(vector * attributes, // Create program mProgramObject = glCreateProgramObjectARB(); - if (gGLManager.mGLVersion < 3.1f) + static const LLCachedControl no_texture_indexing("ShyotlUseLegacyTextureBatching",false); + if (gGLManager.mGLVersion < 3.1f || no_texture_indexing) { //force indexed texture channels to 1 if GL version is old (performance improvement for drivers with poor branching shader model support) mFeatures.mIndexedTextureChannels = llmin(mFeatures.mIndexedTextureChannels, 1); } - + //compile new source vector< pair >::iterator fileIter = mShaderFiles.begin(); for ( ; fileIter != mShaderFiles.end(); fileIter++ ) @@ -161,7 +163,7 @@ BOOL LLGLSLShader::createShader(vector * attributes, return FALSE; } - if (gGLManager.mGLVersion < 3.1f) + if (gGLManager.mGLVersion < 3.1f || no_texture_indexing) { //attachShaderFeatures may have set the number of indexed texture channels, so set to 1 again mFeatures.mIndexedTextureChannels = llmin(mFeatures.mIndexedTextureChannels, 1); } diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 33247451a..856453420 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -488,7 +488,28 @@ Value 0 - + ShyotlUseLegacyRenderPath + + Comment + Use deprecated pre-3.x OpenGL api calls. + Persist + 1 + Type + Boolean + Value + 0 + + ShyotlUseLegacyTextureBatching + + Comment + Disable usage of extra samplers in shaders. Decreases batch sizes, however also reduces branching in shaders drastcially. + Persist + 1 + Type + Boolean + Value + 0 + ResetFocusOnSelfClick Comment @@ -500,7 +521,6 @@ Value 1 - MoyFastMiniMap Comment diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 672beff7a..8b30dfe04 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -648,6 +648,8 @@ void settings_setup_listeners() //See LL jira VWR-3258 comment section. Implemented by LL in 2.1 -Shyotl gSavedSettings.getControl("ShyotlRenderUseStreamVBO")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("ShyotlRenderVBOStrideMode")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); + gSavedSettings.getControl("ShyotlUseLegacyRenderPath")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); + gSavedSettings.getControl("ShyotlUseLegacyTextureBatching")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("SianaRenderOmitBlankVBO")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _2)); gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 82669c8e1..461d8411e 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -654,7 +654,8 @@ BOOL LLViewerShaderMgr::loadBasicShaders() shaders.reserve(13); S32 ch = gGLManager.mNumTextureImageUnits-1; - if (gGLManager.mGLVersion < 3.1f) + static const LLCachedControl no_texture_indexing("ShyotlUseLegacyTextureBatching",false); + if (gGLManager.mGLVersion < 3.1f || no_texture_indexing) { //force to 1 texture index channel for old drivers ch = 1; } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index d74ac2f9d..ea5af4c0e 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3657,7 +3657,8 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: S32 texture_index_channels = gGLManager.mNumTextureImageUnits-1; //always reserve one for shiny for now just for simplicity - if (gGLManager.mGLVersion < 3.1f) + static const LLCachedControl no_texture_indexing("ShyotlUseLegacyTextureBatching",false); + if (gGLManager.mGLVersion < 3.1f || no_texture_indexing) { texture_index_channels = 1; }