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: