diff options
19 files changed, 43 insertions, 53 deletions
| diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 45abb695cb..79979657f1 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -476,6 +476,7 @@ bool LLGLSLShader::createShader()      }      else if (mFeatures.mIndexedTextureChannels > 0)      { //override texture channels for indexed texture rendering +        llassert(mFeatures.mIndexedTextureChannels == LLGLSLShader::sIndexedTextureChannels); // these numbers must always match          bind();          S32 channel_count = mFeatures.mIndexedTextureChannels; @@ -485,19 +486,41 @@ bool LLGLSLShader::createShader()              uniform1i(uniName, i);          } -        S32 cur_tex = channel_count; //adjust any texture channels that might have been overwritten +        //adjust any texture channels that might have been overwritten          for (U32 i = 0; i < mTexture.size(); i++)          { -            if (mTexture[i] > -1 && mTexture[i] < channel_count) +            if (mTexture[i] > -1)              { -                llassert(cur_tex < gGLManager.mNumTextureImageUnits); -                uniform1i(i, cur_tex); -                mTexture[i] = cur_tex++; +                S32 new_tex = mTexture[i] + channel_count; +                uniform1i(i, new_tex); +                mTexture[i] = new_tex;              }          } + +        // get the true number of active texture channels +        mActiveTextureChannels = channel_count; +        for (auto& tex : mTexture) +        { +            mActiveTextureChannels = llmax(mActiveTextureChannels, tex + 1); +        } + +        // when indexed texture channels are used, enforce an upper limit of 16 +        // this should act as a canary in the coal mine for adding textures +        // and breaking machines that are limited to 16 texture channels +        llassert(mActiveTextureChannels <= 16);          unbind();      } +    LL_DEBUGS("GLSLTextureChannels") << mName << " has " << mActiveTextureChannels << " active texture channels" << LL_ENDL; + +    for (U32 i = 0; i < mTexture.size(); i++) +    { +        if (mTexture[i] > -1) +        { +            LL_DEBUGS("GLSLTextureChannels") << "Texture " << LLShaderMgr::instance()->mReservedUniforms[i] << " assigned to channel " << mTexture[i] << LL_ENDL; +        } +    } +  #ifdef LL_PROFILER_ENABLE_RENDER_DOC      setLabel(mName.c_str());  #endif @@ -736,6 +759,10 @@ void LLGLSLShader::mapUniform(GLint index)                  //found it                  mUniform[i] = location;                  mTexture[i] = mapUniformTextureChannel(location, type, size); +                if (mTexture[i] != -1) +                { +                    LL_DEBUGS("GLSLTextureChannels") << name << " assigned to texture channel " << mTexture[i] << LL_ENDL; +                }                  return;              }          } @@ -774,25 +801,21 @@ GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type, GLint          if (size == 1)          {              glUniform1i(location, mActiveTextureChannels); -            LL_DEBUGS("ShaderUniform") << "Assigned to texture channel " << mActiveTextureChannels << LL_ENDL;              mActiveTextureChannels++;          }          else          {              //is array of textures, make sequential after this texture -            GLint channel[32]; // <=== only support up to 32 texture channels -            llassert(size <= 32); -            size = llmin(size, 32); +            GLint channel[16]; // <=== only support up to 16 texture channels +            llassert(size <= 16); +            size = llmin(size, 16);              for (int i = 0; i < size; ++i)              {                  channel[i] = mActiveTextureChannels++;              }              glUniform1iv(location, size, channel); -            LL_DEBUGS("ShaderUniform") << "Assigned to texture channel " << -                (mActiveTextureChannels - size) << " through " << (mActiveTextureChannels - 1) << LL_ENDL;          } -        llassert(mActiveTextureChannels <= 32); // too many textures (probably)          return ret;      }      return -1; diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 9339e7998d..cc2ba0fcff 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -52,7 +52,6 @@ public:      bool hasSrgb = false;      bool isDeferred = false;      bool hasScreenSpaceReflections = false; -    bool disableTextureIndex = false;      bool hasAlphaMask = false;      bool hasReflectionProbes = false;      bool attachNothing = false; diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 634be615e6..574cf55a0e 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -295,7 +295,7 @@ bool LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)      if (features->hasLighting)      { -        if (features->disableTextureIndex) +        if (features->mIndexedTextureChannels <= 1)          {              if (features->hasAlphaMask)              { diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index 482012cdd6..51b5c66384 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -71,7 +71,7 @@  						     <string>Inventory</string>  						     <string>SceneLoadTiming</string>  						     <string>Avatar</string> -						     <string>Voice</string>		 +						     <string>Voice</string>  						-->  						</array>  				</map> diff --git a/indra/newview/app_settings/shaders/class1/deferred/aoUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/aoUtil.glsl index 49470f0e39..ce018623a8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/aoUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/aoUtil.glsl @@ -23,8 +23,7 @@   * $/LicenseInfo$   */ -uniform sampler2D       noiseMap; -uniform sampler2D   normalMap; +uniform sampler2D   noiseMap;  uniform sampler2D   depthMap;  uniform float ssao_radius; diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl index 438e1d1b33..37dcbbd328 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl @@ -27,8 +27,6 @@  out vec4 frag_color; -uniform sampler2D diffuseMap; -  void main()  {      frag_color = vec4(1,1,1,1); diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index d7d98477c0..23a3ca4911 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -27,7 +27,6 @@  out vec4 frag_color; -uniform sampler2D normalMap;  uniform sampler2D lightMap;  uniform float dist_factor; diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl index 3ea2248bec..ab0e4fd4d8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl @@ -50,7 +50,6 @@ SOFTWARE.  uniform sampler2D   normalMap;  uniform sampler2D   depthMap; -uniform sampler2D emissiveRect;  uniform sampler2D projectionMap; // rgba  uniform sampler2D brdfLut; diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl index 9db8f461dd..f208ac746b 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl @@ -27,8 +27,6 @@  out vec4 frag_color; -uniform sampler2D diffuseMap; -  in vec4 post_pos;  in float target_pos_x;  in vec4 vertex_color; diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl index 16cc7cfbbc..6f7bd2bf3c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl @@ -24,7 +24,6 @@   */  uniform sampler2D   normalMap; -uniform sampler2D   depthMap;  #if defined(SUN_SHADOW)  uniform sampler2DShadow shadowMap0; diff --git a/indra/newview/app_settings/shaders/class1/interface/copyF.glsl b/indra/newview/app_settings/shaders/class1/interface/copyF.glsl index edaa2488f0..094d147e86 100644 --- a/indra/newview/app_settings/shaders/class1/interface/copyF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/copyF.glsl @@ -25,7 +25,10 @@  in vec2 tc; +#if defined(COPY_DEPTH)  uniform sampler2D depthMap; +#endif +  uniform sampler2D diffuseMap;  out vec4 frag_color; diff --git a/indra/newview/app_settings/shaders/class3/deferred/hazeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/hazeF.glsl index 87977eb28c..7b82aa1a0d 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/hazeF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/hazeF.glsl @@ -25,8 +25,6 @@  out vec4 frag_color; -uniform sampler2D normalMap; -  // Inputs  uniform vec3 sun_dir;  uniform vec3 moon_dir; diff --git a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl index ac3fec23f6..4ed778371f 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl @@ -27,7 +27,6 @@  out vec4 frag_color; -uniform sampler2D depthMap;  uniform sampler2D diffuseRect;  uniform sampler2D specularRect;  uniform sampler2D emissiveRect; // PBR linear packed Occlusion, Roughness, Metal. See: pbropaqueF.glsl diff --git a/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl index e419525bd5..6c13757149 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl @@ -29,10 +29,8 @@ out vec4 frag_color;  uniform sampler2D diffuseRect;  uniform sampler2D specularRect; -uniform sampler2D normalMap;  uniform sampler2D emissiveRect; // PBR linear packed Occlusion, Roughness, Metal. See: pbropaqueF.glsl  uniform sampler2D lightFunc; -uniform sampler2D depthMap;  uniform vec3 env_mat[3];  uniform float sun_wash; diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index 529d1cba6b..ca88fe7482 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -29,7 +29,6 @@ out vec4 frag_color;  uniform sampler2D diffuseRect;  uniform sampler2D specularRect; -uniform sampler2D normalMap;  uniform sampler2D emissiveRect; // PBR linear packed Occlusion, Roughness, Metal. See: pbropaqueF.glsl  const float M_PI = 3.14159265; @@ -38,7 +37,6 @@ const float M_PI = 3.14159265;  uniform sampler2D lightMap;  #endif -uniform sampler2D depthMap;  uniform sampler2D     lightFunc;  uniform float blur_size; diff --git a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl index 092b0c3c08..bc4d36d10d 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl @@ -29,12 +29,9 @@ out vec4 frag_color;  uniform sampler2D diffuseRect;  uniform sampler2D specularRect; -uniform sampler2D depthMap; -uniform sampler2D normalMap;  uniform sampler2D emissiveRect; // PBR linear packed Occlusion, Roughness, Metal. See: pbropaqueF.glsl  uniform samplerCube environmentMap;  uniform sampler2D lightMap; -uniform sampler2D projectionMap; // rgba  uniform sampler2D lightFunc;  uniform mat4 proj_mat; //screen space to light space diff --git a/indra/newview/app_settings/shaders/class3/deferred/waterHazeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/waterHazeF.glsl index a5a37d80dd..2bf785e773 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/waterHazeF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/waterHazeF.glsl @@ -28,8 +28,6 @@ out vec4 frag_color;  // Inputs  in vec4 vary_fragcoord; -uniform sampler2D normalMap; -  vec4 getPositionWithDepth(vec2 pos_screen, float depth);  float getDepth(vec2 pos_screen); diff --git a/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl index 728d70ebb2..1c02dc764d 100644 --- a/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl +++ b/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl @@ -25,7 +25,6 @@  out vec4 frag_color; -uniform sampler2D diffuseMap;  uniform sampler2D bumpMap;  #ifdef TRANSPARENT_WATER diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 5913e7ba6f..37fbfccbbb 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -515,8 +515,8 @@ void LLViewerShaderMgr::setShaders()      // when using indexed texture rendering, leave some texture units available for shadow and reflection maps      static LLCachedControl<S32> reserved_texture_units(gSavedSettings, "RenderReservedTextureIndices", 14); -    LLGLSLShader::sIndexedTextureChannels = -        llclamp<S32>(max_texture_index, 1, gGLManager.mNumTextureImageUnits-reserved_texture_units); +    LLGLSLShader::sIndexedTextureChannels = 4; +        //llclamp<S32>(max_texture_index, 1, gGLManager.mNumTextureImageUnits-reserved_texture_units);      reentrance = true; @@ -1432,7 +1432,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()                  (mapping == 1 ? "flat" : "triplanar"));          gDeferredPBRTerrainProgram.mFeatures.hasSrgb = true;          gDeferredPBRTerrainProgram.mFeatures.isAlphaLighting = true; -        gDeferredPBRTerrainProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels          gDeferredPBRTerrainProgram.mFeatures.calculatesAtmospherics = true;          gDeferredPBRTerrainProgram.mFeatures.hasAtmospherics = true;          gDeferredPBRTerrainProgram.mFeatures.hasGamma = true; @@ -1646,7 +1645,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()              shader->mFeatures.calculatesLighting = false;              shader->mFeatures.hasLighting = false;              shader->mFeatures.isAlphaLighting = true; -            shader->mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels              shader->mFeatures.hasSrgb = true;              shader->mFeatures.calculatesAtmospherics = true;              shader->mFeatures.hasAtmospherics = true; @@ -1754,7 +1752,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()          gDeferredAvatarEyesProgram.mFeatures.calculatesAtmospherics = true;          gDeferredAvatarEyesProgram.mFeatures.hasGamma = true;          gDeferredAvatarEyesProgram.mFeatures.hasAtmospherics = true; -        gDeferredAvatarEyesProgram.mFeatures.disableTextureIndex = true;          gDeferredAvatarEyesProgram.mFeatures.hasSrgb = true;          gDeferredAvatarEyesProgram.mFeatures.hasShadows = true; @@ -2155,7 +2152,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()          gDeferredTerrainProgram.mName = "Deferred Terrain Shader";          gDeferredTerrainProgram.mFeatures.hasSrgb = true;          gDeferredTerrainProgram.mFeatures.isAlphaLighting = true; -        gDeferredTerrainProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels          gDeferredTerrainProgram.mFeatures.calculatesAtmospherics = true;          gDeferredTerrainProgram.mFeatures.hasAtmospherics = true;          gDeferredTerrainProgram.mFeatures.hasGamma = true; @@ -2187,7 +2183,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()          gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = false;          gDeferredAvatarAlphaProgram.mFeatures.hasLighting = false;          gDeferredAvatarAlphaProgram.mFeatures.isAlphaLighting = true; -        gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;          gDeferredAvatarAlphaProgram.mFeatures.hasSrgb = true;          gDeferredAvatarAlphaProgram.mFeatures.calculatesAtmospherics = true;          gDeferredAvatarAlphaProgram.mFeatures.hasAtmospherics = true; @@ -2426,7 +2421,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()          gDeferredWLSunProgram.mFeatures.hasAtmospherics = true;          gDeferredWLSunProgram.mFeatures.hasGamma = true;          gDeferredWLSunProgram.mFeatures.hasAtmospherics = true; -        gDeferredWLSunProgram.mFeatures.disableTextureIndex = true;          gDeferredWLSunProgram.mFeatures.hasSrgb = true;          gDeferredWLSunProgram.mShaderFiles.clear();          gDeferredWLSunProgram.mShaderFiles.push_back(make_pair("deferred/sunDiscV.glsl", GL_VERTEX_SHADER)); @@ -2445,7 +2439,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()          gDeferredWLMoonProgram.mFeatures.hasGamma = true;          gDeferredWLMoonProgram.mFeatures.hasAtmospherics = true;          gDeferredWLMoonProgram.mFeatures.hasSrgb = true; -        gDeferredWLMoonProgram.mFeatures.disableTextureIndex = true;          gDeferredWLMoonProgram.mShaderFiles.clear();          gDeferredWLMoonProgram.mShaderFiles.push_back(make_pair("deferred/moonV.glsl", GL_VERTEX_SHADER)); @@ -2549,7 +2542,6 @@ bool LLViewerShaderMgr::loadShadersObject()          gObjectAlphaMaskNoColorProgram.mFeatures.hasGamma = true;          gObjectAlphaMaskNoColorProgram.mFeatures.hasAtmospherics = true;          gObjectAlphaMaskNoColorProgram.mFeatures.hasLighting = true; -        gObjectAlphaMaskNoColorProgram.mFeatures.disableTextureIndex = true;          gObjectAlphaMaskNoColorProgram.mFeatures.hasAlphaMask = true;          gObjectAlphaMaskNoColorProgram.mShaderFiles.clear();          gObjectAlphaMaskNoColorProgram.mShaderFiles.push_back(make_pair("objects/simpleNoColorV.glsl", GL_VERTEX_SHADER)); @@ -2561,7 +2553,6 @@ bool LLViewerShaderMgr::loadShadersObject()      if (success)      {          gImpostorProgram.mName = "Impostor Shader"; -        gImpostorProgram.mFeatures.disableTextureIndex = true;          gImpostorProgram.mFeatures.hasSrgb = true;          gImpostorProgram.mShaderFiles.clear();          gImpostorProgram.mShaderFiles.push_back(make_pair("objects/impostorV.glsl", GL_VERTEX_SHADER)); @@ -2573,7 +2564,6 @@ bool LLViewerShaderMgr::loadShadersObject()      if (success)      {          gObjectPreviewProgram.mName = "Object Preview Shader"; -        gObjectPreviewProgram.mFeatures.disableTextureIndex = true;          gObjectPreviewProgram.mShaderFiles.clear();          gObjectPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewV.glsl", GL_VERTEX_SHADER));          gObjectPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewF.glsl", GL_FRAGMENT_SHADER)); @@ -2592,8 +2582,6 @@ bool LLViewerShaderMgr::loadShadersObject()          gPhysicsPreviewProgram.mFeatures.hasGamma = false;          gPhysicsPreviewProgram.mFeatures.hasAtmospherics = false;          gPhysicsPreviewProgram.mFeatures.hasLighting = false; -        gPhysicsPreviewProgram.mFeatures.mIndexedTextureChannels = 0; -        gPhysicsPreviewProgram.mFeatures.disableTextureIndex = true;          gPhysicsPreviewProgram.mShaderFiles.clear();          gPhysicsPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewPhysicsV.glsl", GL_VERTEX_SHADER));          gPhysicsPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewPhysicsF.glsl", GL_FRAGMENT_SHADER)); @@ -2634,7 +2622,6 @@ bool LLViewerShaderMgr::loadShadersAvatar()          gAvatarProgram.mFeatures.hasAtmospherics = true;          gAvatarProgram.mFeatures.hasLighting = true;          gAvatarProgram.mFeatures.hasAlphaMask = true; -        gAvatarProgram.mFeatures.disableTextureIndex = true;          gAvatarProgram.mShaderFiles.clear();          gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER));          gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarF.glsl", GL_FRAGMENT_SHADER)); @@ -2658,7 +2645,6 @@ bool LLViewerShaderMgr::loadShadersAvatar()          gAvatarEyeballProgram.mFeatures.hasAtmospherics = true;          gAvatarEyeballProgram.mFeatures.hasLighting = true;          gAvatarEyeballProgram.mFeatures.hasAlphaMask = true; -        gAvatarEyeballProgram.mFeatures.disableTextureIndex = true;          gAvatarEyeballProgram.mShaderFiles.clear();          gAvatarEyeballProgram.mShaderFiles.push_back(make_pair("avatar/eyeballV.glsl", GL_VERTEX_SHADER));          gAvatarEyeballProgram.mShaderFiles.push_back(make_pair("avatar/eyeballF.glsl", GL_FRAGMENT_SHADER)); | 
