From 50f6504d75f30efb2955b82d7ec2b5283c10f402 Mon Sep 17 00:00:00 2001
From: Graham Linden <graham@lindenlab.com>
Date: Sat, 25 Aug 2018 00:26:26 +0100
Subject: [PATCH] MAINT-9046 honor alpha mode none even when texture has alpha
 channel when checking state in avatar attachment shadow passes

---
 indra/newview/lldrawpoolavatar.cpp | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 89e861bb517..a9df63debd5 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -1859,6 +1859,20 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
             bool is_alpha_blend = false;
             bool is_alpha_mask  = false;
 
+            LLViewerTexture* tex = face->getTexture(LLRender::DIFFUSE_MAP);
+            if (tex)
+            {
+                LLGLenum image_format = tex->getPrimaryFormat();
+                if (tex->getIsAlphaMask())
+                {
+                    is_alpha_mask = true;
+                }
+                else if (!is_alpha_mask && (image_format == GL_RGBA || image_format == GL_ALPHA))
+                {
+                    is_alpha_blend = true;
+                }
+            }
+
             if (mat)
             {                
                 switch (LLMaterial::eDiffuseAlphaMode(mat->getDiffuseAlphaMode()))
@@ -1879,6 +1893,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
                     case LLMaterial::DIFFUSE_ALPHA_MODE_DEFAULT:
                     case LLMaterial::DIFFUSE_ALPHA_MODE_NONE:
                     default:
+                        is_alpha_blend = false;
                         break;
                 }
             }
@@ -1891,20 +1906,6 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
                 }
             }
 
-            LLViewerTexture* tex = face->getTexture(LLRender::DIFFUSE_MAP);
-            if (tex)
-            {
-                LLGLenum image_format = tex->getPrimaryFormat();
-                if (tex->getIsAlphaMask())
-                {
-                    is_alpha_mask = true;
-                }
-                else if (!is_alpha_mask && (image_format == GL_RGBA || image_format == GL_ALPHA))
-                {
-                    is_alpha_blend = true;
-                }
-            }
-
             // if this is alpha mask content and we're doing opaques or a non-alpha-mask shadow pass...
             if (is_alpha_mask && (LLDrawPoolAvatar::sSkipTransparent || LLDrawPoolAvatar::sShadowPass != SHADOW_PASS_ATTACHMENT_ALPHA_MASK))
             {
-- 
GitLab