summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/cmake/Copy3rdPartyLibs.cmake1
-rwxr-xr-xindra/lib/python/indra/util/llmanifest.py43
-rw-r--r--indra/llmath/lloctree.h12
-rw-r--r--indra/llmath/llvolume.cpp4
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl3
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl3
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinyV.glsl3
-rw-r--r--indra/newview/lldrawpoolbump.cpp6
-rw-r--r--indra/newview/llface.cpp2
-rw-r--r--indra/newview/llpanelgroupcreate.cpp2
-rw-r--r--indra/newview/llpanelpeople.cpp4
-rw-r--r--indra/newview/llspatialpartition.h17
-rw-r--r--indra/newview/llstartup.cpp6
-rw-r--r--indra/newview/llvieweroctree.cpp2
-rw-r--r--indra/newview/llvoavatar.cpp22
-rw-r--r--indra/newview/pipeline.cpp4
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/strings.xml2
-rwxr-xr-xindra/newview/viewer_manifest.py2
25 files changed, 122 insertions, 30 deletions
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index b408702f04..ff705101de 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -129,6 +129,7 @@ if(WINDOWS)
msvcp${MSVC_VER}.dll
msvcr${MSVC_VER}.dll
vcruntime${MSVC_VER}.dll
+ vcruntime${MSVC_VER}_1.dll
)
if(EXISTS "${registry_path}/${release_msvc_file}")
to_staging_dirs(
diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py
index 30b7228289..aedd3b7ee4 100755
--- a/indra/lib/python/indra/util/llmanifest.py
+++ b/indra/lib/python/indra/util/llmanifest.py
@@ -881,6 +881,49 @@ class LLManifest(object, metaclass=LLManifestRegistry):
# particular, let caller notice 0.
return count
+ def path_optional(self, src, dst=None):
+ sys.stdout.flush()
+ if src == None:
+ raise ManifestError("No source file, dst is " + dst)
+ if dst == None:
+ dst = src
+ dst = os.path.join(self.get_dst_prefix(), dst)
+ sys.stdout.write("Processing %s => %s ... " % (src, self._relative_dst_path(dst)))
+
+ def try_path(src):
+ # expand globs
+ count = 0
+ if self.wildcard_pattern.search(src):
+ for s,d in self.expand_globs(src, dst):
+ assert(s != d)
+ count += self.process_file(s, d)
+ else:
+ # if we're specifying a single path (not a glob),
+ # we should error out if it doesn't exist
+ self.check_file_exists(src)
+ count += self.process_either(src, dst)
+ return count
+
+ try_prefixes = [self.get_src_prefix(), self.get_artwork_prefix(), self.get_build_prefix()]
+ for pfx in try_prefixes:
+ try:
+ count = try_path(os.path.join(pfx, src))
+ except MissingError:
+ # if we produce MissingError, just try the next prefix
+ continue
+ # If we actually found nonzero files, stop looking
+ if count:
+ break
+ else:
+ sys.stdout.write("Skipping %s\n" % (src))
+ return 0
+
+ print("%d files" % count)
+
+ # Let caller check whether we processed as many files as expected. In
+ # particular, let caller notice 0.
+ return count
+
def do(self, *actions):
self.actions = actions
self.construct()
diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h
index 2283df1e1a..a9a54a8113 100644
--- a/indra/llmath/lloctree.h
+++ b/indra/llmath/lloctree.h
@@ -73,7 +73,7 @@ template <class T>
class LLOctreeTravelerDepthFirst : public LLOctreeTraveler<T>
{
public:
- virtual void traverse(const LLOctreeNode<T>* node);
+ virtual void traverse(const LLOctreeNode<T>* node) override;
};
template <class T>
@@ -696,7 +696,7 @@ public:
{
}
- bool balance()
+ bool balance() override
{
//LL_PROFILE_ZONE_NAMED_COLOR("Octree::balance()",OCTREE_DEBUG_COLOR_BALANCE);
@@ -732,7 +732,7 @@ public:
}
// LLOctreeRoot::insert
- bool insert(T* data)
+ bool insert(T* data) override
{
if (data == NULL)
{
@@ -835,6 +835,12 @@ public:
return false;
}
+
+ bool isLeaf() const override
+ {
+ // root can't be a leaf
+ return false;
+ }
};
//========================
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 3727ce85af..5099920f32 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -414,7 +414,7 @@ public:
max.setMax(max, *tri->mV[2]);
}
}
- else if (!branch->isLeaf())
+ else if (branch->getChildCount() > 0)
{ //no data, but child nodes exist
LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(0)->getListener(0);
@@ -424,7 +424,7 @@ public:
}
else
{
- LL_ERRS() << "Empty leaf" << LL_ENDL;
+ llassert(!branch->isLeaf()); // Empty leaf
}
for (S32 i = 0; i < branch->getChildCount(); ++i)
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 54358db763..09a7391e4e 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.5.4
+6.6.1
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
index 2c139430e7..3bd6b693fa 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
@@ -25,6 +25,7 @@
uniform mat3 normal_matrix;
uniform mat4 texture_matrix0;
+uniform mat4 texture_matrix1;
uniform mat4 modelview_matrix;
uniform mat4 modelview_projection_matrix;
@@ -71,7 +72,7 @@ void main()
vec3 ref = reflect(pos.xyz, -norm);
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
- vary_texcoord1 = transpose(normal_matrix) * ref.xyz;
+ vary_texcoord1 = (texture_matrix1 * vec4(ref,1.0)).xyz;
calcAtmospherics(pos.xyz);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
index 1855cfceeb..ad2170bbd3 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
@@ -50,7 +50,7 @@ void fullbright_lighting()
discard;
}
- color.rgb *= vertex_color.rgb;
+ color *= vertex_color;
color.rgb = pow(color.rgb, vec3(texture_gamma));
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
index ace2574ac2..891515ab1e 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
@@ -25,6 +25,7 @@
uniform mat3 normal_matrix;
uniform mat4 texture_matrix0;
+uniform mat4 texture_matrix1;
uniform mat4 modelview_matrix;
uniform mat4 modelview_projection_matrix;
@@ -70,7 +71,7 @@ void main()
vec3 ref = reflect(pos.xyz, -norm);
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
- vary_texcoord1 = transpose(normal_matrix) * ref;
+ vary_texcoord1 = (texture_matrix1 * vec4(ref,1.0)).xyz;
calcAtmospherics(pos.xyz);
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
index 097e42d233..3ad7bcaa50 100644
--- a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
@@ -25,6 +25,7 @@
uniform mat3 normal_matrix;
uniform mat4 texture_matrix0;
+uniform mat4 texture_matrix1;
uniform mat4 modelview_matrix;
uniform mat4 modelview_projection_matrix;
@@ -69,7 +70,7 @@ void main()
vec3 ref = reflect(pos.xyz, -norm);
vary_texcoord0 = (texture_matrix0*vec4(texcoord0,0,1)).xy;
- vary_texcoord1 = transpose(normal_matrix) * ref;
+ vary_texcoord1 = (texture_matrix1 * vec4(ref,1.0)).xyz;
calcAtmospherics(pos.xyz);
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 2892fc6f9f..8db6a10e26 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -311,6 +311,7 @@ void LLDrawPoolBump::bindCubeMap(LLGLSLShader* shader, S32 shader_level, S32& di
shader->uniform4fv(LLViewerShaderMgr::SHINY_ORIGIN, 1, vec4.mV);
if (shader_level > 1)
{
+ cube_map->setMatrix(1);
// Make sure that texture coord generation happens for tex unit 1, as that's the one we use for
// the cube map in the one pass shiny shaders
cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
@@ -319,6 +320,7 @@ void LLDrawPoolBump::bindCubeMap(LLGLSLShader* shader, S32 shader_level, S32& di
}
else
{
+ cube_map->setMatrix(0);
cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
diffuse_channel = -1;
cube_map->enable(cube_channel);
@@ -332,6 +334,7 @@ void LLDrawPoolBump::bindCubeMap(LLGLSLShader* shader, S32 shader_level, S32& di
diffuse_channel = -1;
gGL.getTexUnit(0)->disable();
cube_map->enable(0);
+ cube_map->setMatrix(0);
gGL.getTexUnit(0)->bind(cube_map);
}
}
@@ -390,6 +393,7 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&
// Moved below shader->disableTexture call to avoid false alarms from auto-re-enable of textures on stage 0
// MAINT-755
cube_map->disable();
+ cube_map->restoreMatrix();
}
}
@@ -460,6 +464,7 @@ void LLDrawPoolBump::beginFullbrightShiny()
LLVector4 vec4(vec, gShinyOrigin.mV[3]);
shader->uniform4fv(LLViewerShaderMgr::SHINY_ORIGIN, 1, vec4.mV);
+ cube_map->setMatrix(1);
// Make sure that texture coord generation happens for tex unit 1, as that's the one we use for
// the cube map in the one pass shiny shaders
gGL.getTexUnit(1)->disable();
@@ -520,6 +525,7 @@ void LLDrawPoolBump::endFullbrightShiny()
if( cube_map )
{
cube_map->disable();
+ cube_map->restoreMatrix();
shader->unbind();
}
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index d1e2b8b93d..d0c26bc43b 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -2377,7 +2377,7 @@ BOOL LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
{
//override with avatar bounding box
LLVOAvatar* avatar = mVObjp->getAvatar();
- if (avatar)
+ if (avatar && avatar->mDrawable)
{
center.load3(avatar->getPositionAgent().mV);
const LLVector4a* exts = avatar->mDrawable->getSpatialExtents();
diff --git a/indra/newview/llpanelgroupcreate.cpp b/indra/newview/llpanelgroupcreate.cpp
index 52be75072c..01a4ab0455 100644
--- a/indra/newview/llpanelgroupcreate.cpp
+++ b/indra/newview/llpanelgroupcreate.cpp
@@ -104,7 +104,7 @@ void LLPanelGroupCreate::onOpen(const LLSD& key)
// populate list
addMembershipRow("Base");
addMembershipRow("Premium");
- addMembershipRow("Premium Plus");
+ addMembershipRow("Premium_Plus");
addMembershipRow("Internal");// Present only if you are already in one, needed for testing
S32 cost = LLAgentBenefitsMgr::current().getCreateGroupCost();
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 5997d522c4..e424d6b5f5 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -1090,9 +1090,9 @@ void LLPanelPeople::onGroupLimitInfo()
args["MAX_BASIC"] = max_basic;
args["MAX_PREMIUM"] = max_premium;
- if (LLAgentBenefitsMgr::has("Premium Plus"))
+ if (LLAgentBenefitsMgr::has("Premium_Plus"))
{
- S32 max_premium_plus = LLAgentBenefitsMgr::get("Premium Plus").getGroupMembershipLimit();
+ S32 max_premium_plus = LLAgentBenefitsMgr::get("Premium_Plus").getGroupMembershipLimit();
args["MAX_PREMIUM_PLUS"] = max_premium_plus;
LLNotificationsUtil::add("GroupLimitInfoPlus", args);
}
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index acfcd63686..6d3ef33801 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -255,6 +255,19 @@ public:
}
};
+ struct CompareRenderOrder
+ {
+ bool operator()(const LLSpatialGroup* const& lhs, const LLSpatialGroup* const& rhs)
+ {
+ if (lhs->mAvatarp != rhs->mAvatarp)
+ {
+ return lhs->mAvatarp < rhs->mAvatarp;
+ }
+
+ return lhs->mRenderOrder > rhs->mRenderOrder;
+ }
+ };
+
typedef enum
{
GEOM_DIRTY = LLViewerOctreeGroup::INVALID_STATE,
@@ -338,6 +351,10 @@ public:
F32 mPixelArea;
F32 mRadius;
+
+ //used by LLVOAVatar to set render order in alpha draw pool to preserve legacy render order behavior
+ LLVOAvatar* mAvatarp = nullptr;
+ U32 mRenderOrder = 0;
} LL_ALIGN_POSTFIX(64);
class LLGeometryManager
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 6c074dfa08..5aec579fd8 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -3337,12 +3337,6 @@ bool init_benefits(LLSD& response)
succ = false;
}
- // FIXME PREMIUM - for testing if login does not yet provide Premium Plus. Should be removed thereafter.
- //if (succ && !LLAgentBenefitsMgr::has("Premium Plus"))
- //{
- // LLAgentBenefitsMgr::init("Premium Plus", packages_sd["Premium"]["benefits"]);
- // llassert(LLAgentBenefitsMgr::has("Premium Plus"));
- //}
return succ;
}
diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index 87e296012d..12624ec3a2 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -564,7 +564,7 @@ void LLViewerOctreeGroup::rebound()
group->setState(SKIP_FRUSTUM_CHECK);
}
- else if (mOctreeNode->isLeaf())
+ else if (mOctreeNode->getChildCount() == 0)
{ //copy object bounding box if this is a leaf
boundObjects(TRUE, mExtents[0], mExtents[1]);
mBounds[0] = mObjectBounds[0];
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 625fdf1977..f0c379f1ae 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2813,6 +2813,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
// update attachments positions
if (detailed_update)
{
+ U32 draw_order = 0;
for (attachment_map_t::iterator iter = mAttachmentPoints.begin();
iter != mAttachmentPoints.end();
++iter)
@@ -2851,9 +2852,17 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
}
}
-
- attached_object->mDrawable->makeActive();
- attached_object->mDrawable->updateXform(TRUE);
+ // if selecting any attachments, update all of them as non-damped
+ if (LLSelectMgr::getInstance()->getSelection()->getObjectCount() && LLSelectMgr::getInstance()->getSelection()->isAttachment())
+ {
+ gPipeline.updateMoveNormalAsync(attached_object->mDrawable);
+ }
+ else
+ {
+ // Note: SL-17415; While most objects follow joints,
+ // some objects get position updates from server
+ gPipeline.updateMoveDampedAsync(attached_object->mDrawable);
+ }
// override_bbox calls movePartition() and getSpatialPartition(),
// so bridge might no longer be valid, get it again.
@@ -2871,6 +2880,13 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
bridge->setState(LLDrawable::MOVE_UNDAMPED);
bridge->updateMove();
bridge->setState(LLDrawable::EARLY_MOVE);
+
+ LLSpatialGroup* group = attached_object->mDrawable->getSpatialGroup();
+ if (group)
+ { //set draw order of group
+ group->mAvatarp = this;
+ group->mRenderOrder = draw_order++;
+ }
}
}
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 545fe9642a..ee1f8eba9c 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -3883,7 +3883,11 @@ void LLPipeline::postSort(LLCamera& camera)
if (!sShadowRender)
{
+ // order alpha groups by distance
std::sort(sCull->beginAlphaGroups(), sCull->endAlphaGroups(), LLSpatialGroup::CompareDepthGreater());
+
+ // order rigged alpha groups by avatar attachment order
+ std::sort(sCull->beginRiggedAlphaGroups(), sCull->endRiggedAlphaGroups(), LLSpatialGroup::CompareRenderOrder());
}
LL_PUSH_CALLSTACKS();
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index f021e03dc7..ba26f721fe 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -5101,7 +5101,7 @@ Bitte überprüfen Sie http://status.secondlifegrid.net, um herauszufinden, ob e
<string name="PremiumMembership">
Premium
</string>
- <string name="Premium PlusMembership">
+ <string name="Premium_PlusMembership">
Premium Plus
</string>
<string name="DeleteItems">
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 6ad4976410..be9ea71f4c 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3964,7 +3964,7 @@ Please check http://status.secondlifegrid.net to see if there is a known problem
<!-- SL Membership -->
<string name="BaseMembership">Base</string>
<string name="PremiumMembership">Premium</string>
- <string name="Premium PlusMembership">Premium Plus</string>
+ <string name="Premium_PlusMembership">Premium Plus</string>
<string name="InternalMembership">Internal</string> <!-- No need to translate -->
<string name="MembershipUpgradeText">Upgrade to Premium</string>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 9fde703d6c..f7545f08d2 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -5102,7 +5102,7 @@ Veuillez vous reporter à http://status.secondlifegrid.net afin de déterminer s
<string name="PremiumMembership">
Premium
</string>
- <string name="Premium PlusMembership">
+ <string name="Premium_PlusMembership">
Premium Plus
</string>
<string name="DeleteItems">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 3049828f46..7690e02692 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -5017,7 +5017,7 @@ Consulta la pagina http://status.secondlifegrid.net per determinare se il proble
<string name="PremiumMembership">
Premium
</string>
- <string name="Premium PlusMembership">
+ <string name="Premium_PlusMembership">
Premium Plus
</string>
<string name="DeleteItems">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index dcd6e65d34..b4bc36a800 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -5100,7 +5100,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="PremiumMembership">
プレミアム
</string>
- <string name="Premium PlusMembership">
+ <string name="Premium_PlusMembership">
プレミアムプラス
</string>
<string name="DeleteItems">
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index 43a87b2b18..ee2dcfe9cc 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -5096,7 +5096,7 @@ support@secondlife.com.
<string name="PremiumMembership">
Премиум
</string>
- <string name="Premium PlusMembership">
+ <string name="Premium_PlusMembership">
Премиум Плюс
</string>
<string name="DeleteItems">
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 76160b73ba..de5ac5ed3d 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -527,6 +527,7 @@ class WindowsManifest(ViewerManifest):
# See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
self.path("msvcp140.dll")
self.path("vcruntime140.dll")
+ self.path_optional("vcruntime140_1.dll")
# SLVoice executable
with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')):
@@ -604,6 +605,7 @@ class WindowsManifest(ViewerManifest):
'sharedlibs', 'Release')):
self.path("msvcp140.dll")
self.path("vcruntime140.dll")
+ self.path_optional("vcruntime140_1.dll")
# CEF files common to all configurations
with self.prefix(src=os.path.join(pkgdir, 'resources')):