SPV: Fix unexpected declarations of capability and extension
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 276899c..9f272ee 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -480,16 +480,18 @@
         return spv::BuiltInCullDistance;
 
     case glslang::EbvViewportIndex:
-        builder.addCapability(spv::CapabilityMultiViewport);
+        if (!memberDeclaration) {
+            builder.addCapability(spv::CapabilityMultiViewport);
 #ifdef NV_EXTENSIONS
-        if (glslangIntermediate->getStage() == EShLangVertex ||
-            glslangIntermediate->getStage() == EShLangTessControl ||
-            glslangIntermediate->getStage() == EShLangTessEvaluation)
-        {
-            builder.addExtension(spv::E_SPV_NV_viewport_array2);
-            builder.addCapability(spv::CapabilityShaderViewportIndexLayerNV);
-        }
+            if (glslangIntermediate->getStage() == EShLangVertex ||
+                glslangIntermediate->getStage() == EShLangTessControl ||
+                glslangIntermediate->getStage() == EShLangTessEvaluation) {
+
+                builder.addExtension(spv::E_SPV_NV_viewport_array2);
+                builder.addCapability(spv::CapabilityShaderViewportIndexLayerNV);
+            }
 #endif
+        }
         return spv::BuiltInViewportIndex;
 
     case glslang::EbvSampleId:
@@ -505,19 +507,19 @@
         return spv::BuiltInSampleMask;
 
     case glslang::EbvLayer:
-        builder.addCapability(spv::CapabilityGeometry);
+        if (!memberDeclaration) {
+            builder.addCapability(spv::CapabilityGeometry);
 #ifdef NV_EXTENSIONS
-        if (!memberDeclaration)
-        {
             if (glslangIntermediate->getStage() == EShLangVertex ||
                 glslangIntermediate->getStage() == EShLangTessControl ||
-                glslangIntermediate->getStage() == EShLangTessEvaluation)
-            {
+                glslangIntermediate->getStage() == EShLangTessEvaluation) {
+
                 builder.addExtension(spv::E_SPV_NV_viewport_array2);
                 builder.addCapability(spv::CapabilityShaderViewportIndexLayerNV);
             }
-        }
 #endif
+        }
+
         return spv::BuiltInLayer;
 
     case glslang::EbvPosition:             return spv::BuiltInPosition;
@@ -640,8 +642,10 @@
 
 #ifdef NV_EXTENSIONS
     case glslang::EbvViewportMaskNV:
-        builder.addExtension(spv::E_SPV_NV_viewport_array2);
-        builder.addCapability(spv::CapabilityShaderViewportMaskNV);
+        if (!memberDeclaration) {
+            builder.addExtension(spv::E_SPV_NV_viewport_array2);
+            builder.addCapability(spv::CapabilityShaderViewportMaskNV);
+        }
         return spv::BuiltInViewportMaskNV;
     case glslang::EbvSecondaryPositionNV:
         if (!memberDeclaration) {
@@ -2690,6 +2694,7 @@
     case glslang::EbvPointSize:
 #ifdef NV_EXTENSIONS
     case glslang::EbvLayer:
+    case glslang::EbvViewportIndex:
     case glslang::EbvViewportMaskNV:
     case glslang::EbvSecondaryPositionNV:
     case glslang::EbvSecondaryViewportMaskNV: