diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 8a3c25af1827b3234c7c429fc33247a51427f5d8..260362e0d017eab0b1c809a442eab763a015a18c 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -5574,37 +5574,44 @@ bool LLVolumeFace::cacheOptimize(bool gen_tangents)
 
         U32 vert_count = meshopt_generateVertexRemapMulti(&remap[0], nullptr, data.p.size(), data.p.size(), mos, stream_count);
 
-        std::vector<U32> indices;
-        indices.resize(mNumIndices);
+        if (vert_count < 65535)
+        {
+            std::vector<U32> indices;
+            indices.resize(mNumIndices);
 
-        //copy results back into volume
-        resizeVertices(vert_count);
+            //copy results back into volume
+            resizeVertices(vert_count);
 
-        if (!data.w.empty())
-        {
-            allocateWeights(vert_count);
-        }
+            if (!data.w.empty())
+            {
+                allocateWeights(vert_count);
+            }
 
-        allocateTangents(mNumVertices);
+            allocateTangents(mNumVertices);
 
-        for (int i = 0; i < mNumIndices; ++i)
-        {
-            U32 src_idx = i;
-            U32 dst_idx = remap[i];
-            mIndices[i] = dst_idx;
+            for (int i = 0; i < mNumIndices; ++i)
+            {
+                U32 src_idx = i;
+                U32 dst_idx = remap[i];
+                mIndices[i] = dst_idx;
 
-            mPositions[dst_idx].load3(data.p[src_idx].mV);
-            mNormals[dst_idx].load3(data.n[src_idx].mV);
-            mTexCoords[dst_idx] = data.tc[src_idx];
+                mPositions[dst_idx].load3(data.p[src_idx].mV);
+                mNormals[dst_idx].load3(data.n[src_idx].mV);
+                mTexCoords[dst_idx] = data.tc[src_idx];
 
-            mTangents[dst_idx].loadua(data.t[src_idx].mV);
+                mTangents[dst_idx].loadua(data.t[src_idx].mV);
 
-            if (mWeights)
-            {
-                mWeights[dst_idx].loadua(data.w[src_idx].mV);
+                if (mWeights)
+                {
+                    mWeights[dst_idx].loadua(data.w[src_idx].mV);
+                }
             }
         }
-
+        else
+        {
+            // blew past the max vertex size limit, use legacy tangent generation which never adds verts
+            createTangents();
+        }
 
         // put back in normalized coordinate frame
         LLVector4a inv_scale(1.f/mNormalizedScale.mV[0], 1.f / mNormalizedScale.mV[1], 1.f / mNormalizedScale.mV[2]);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
index b76443f0f09876c490eb0a92a8bad9c19bb87253..d3fa03b02a50622fb3c3a0d8931a00f17c94d775 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
@@ -309,7 +309,6 @@ void main()
 
     
     float a = basecolor.a*vertex_color.a;
-    a = 1.0;
     color += colorEmissive;
     color = linear_to_srgb(color);
     frag_color = vec4(color.rgb,a);
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index fe3fb561f0aef86b29e56937b8e00a2bfcfad025..499c46e6ad7a0573b2a7958fcd8d3157fdf0da19 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -1194,6 +1194,7 @@ void render_hud_attachments()
 		LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
 		gPipeline.updateCull(hud_cam, result);
 
+        // Toggle render types
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_BUMP);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_SIMPLE);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_VOLUME);
@@ -1203,6 +1204,9 @@ void render_hud_attachments()
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_FULLBRIGHT_ALPHA_MASK);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_FULLBRIGHT);
         gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_GLTF_PBR);
+        gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_GLTF_PBR_ALPHA_MASK);
+
+        // Toggle render passes
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_ALPHA);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_BUMP);
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 7300fefc0f51507fc5f4c3ad14428aceea529097..9a3b3cd197d2781c8f3510141b81934f5b1e73dc 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -452,6 +452,7 @@ class LLPipeline
 		RENDER_TYPE_VOIDWATER					= LLDrawPool::POOL_VOIDWATER,
 		RENDER_TYPE_WATER						= LLDrawPool::POOL_WATER,
         RENDER_TYPE_GLTF_PBR                    = LLDrawPool::POOL_GLTF_PBR,
+        RENDER_TYPE_GLTF_PBR_ALPHA_MASK         = LLDrawPool::POOL_GLTF_PBR_ALPHA_MASK,
  		RENDER_TYPE_ALPHA						= LLDrawPool::POOL_ALPHA,
         RENDER_TYPE_ALPHA_PRE_WATER             = LLDrawPool::POOL_ALPHA_PRE_WATER,
         RENDER_TYPE_ALPHA_POST_WATER            = LLDrawPool::POOL_ALPHA_POST_WATER,