Add Float16/Int8/Int16 capabilities for private variables and function parameters
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
old mode 100755
new mode 100644
index 9bf3704..55b0ec6
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -2878,6 +2878,11 @@
             builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
             break;
         default:
+            if (node->getType().containsBasicType(glslang::EbtFloat16))
+                builder.addCapability(spv::CapabilityFloat16);
+            if (node->getType().containsBasicType(glslang::EbtInt16) ||
+                node->getType().containsBasicType(glslang::EbtUint16))
+                builder.addCapability(spv::CapabilityInt16);
             break;
         }
     }
@@ -2894,6 +2899,8 @@
         } else if (storageClass == spv::StorageClassStorageBuffer) {
             builder.addExtension(spv::E_SPV_KHR_8bit_storage);
             builder.addCapability(spv::CapabilityStorageBuffer8BitAccess);
+        } else {
+            builder.addCapability(spv::CapabilityInt8);
         }
     }
 
@@ -3799,6 +3806,16 @@
             symbolValues[parameters[p]->getAsSymbolNode()->getId()] = function->getParamId(p);
             // give a name too
             builder.addName(function->getParamId(p), parameters[p]->getAsSymbolNode()->getName().c_str());
+
+            const glslang::TType& paramType = parameters[p]->getAsTyped()->getType();
+            if (paramType.containsBasicType(glslang::EbtInt8) ||
+                paramType.containsBasicType(glslang::EbtUint8))
+                builder.addCapability(spv::CapabilityInt8);
+            if (paramType.containsBasicType(glslang::EbtInt16) ||
+                paramType.containsBasicType(glslang::EbtUint16))
+                builder.addCapability(spv::CapabilityInt16);
+            if (paramType.containsBasicType(glslang::EbtFloat16))
+                builder.addCapability(spv::CapabilityFloat16);
         }
     }
 }