SPV: PrimitiveId in frag shader will emit Geometry capability

Using PrimitiveId in a fragment shader requires declaring
an OpCapability with either Geometry or Tessellation.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index c79b6c2..34cdc5c 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -499,11 +499,17 @@
     case glslang::EbvInstanceIndex:        return spv::BuiltInInstanceIndex;
     case glslang::EbvBaseVertex:
     case glslang::EbvBaseInstance:
+
     case glslang::EbvDrawId:
         // TODO: Add SPIR-V builtin ID.
         logger->missingFunctionality("shader draw parameters");
         return spv::BuiltInMax;
-    case glslang::EbvPrimitiveId:          return spv::BuiltInPrimitiveId;
+
+    case glslang::EbvPrimitiveId:
+        if (glslangIntermediate->getStage() == EShLangFragment)
+            builder.addCapability(spv::CapabilityGeometry);
+        return spv::BuiltInPrimitiveId;
+
     case glslang::EbvInvocationId:         return spv::BuiltInInvocationId;
     case glslang::EbvTessLevelInner:       return spv::BuiltInTessLevelInner;
     case glslang::EbvTessLevelOuter:       return spv::BuiltInTessLevelOuter;
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index f06b0fc..7858845 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -7,16 +7,17 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1114
+// Id's are bound by 1118
 
                               Capability Shader
+                              Capability Geometry
                               Capability Float64
                               Capability ImageGatherExtended
                               Capability ClipDistance
                               Capability SampledRect
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107
+                              EntryPoint Fragment 4  "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107 1116
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
@@ -55,6 +56,8 @@
                               Name 1099  "vl2"
                               Name 1105  "uo"
                               Name 1107  "u"
+                              Name 1115  "id"
+                              Name 1116  "gl_PrimitiveID"
                               Decorate 17(u2drs) DescriptorSet 0
                               Decorate 1025(arrayedSampler) DescriptorSet 0
                               Decorate 1027(i) Flat
@@ -64,6 +67,8 @@
                               Decorate 1097(gl_FragCoord) BuiltIn FragCoord
                               Decorate 1099(vl2) Location 6
                               Decorate 1107(u) Flat
+                              Decorate 1116(gl_PrimitiveID) Flat
+                              Decorate 1116(gl_PrimitiveID) BuiltIn PrimitiveId
                2:             TypeVoid
                3:             TypeFunction 2
               10:             TypeFloat 32
@@ -185,9 +190,12 @@
         1105(uo):   1104(ptr) Variable Output
             1106:             TypePointer Input 32(int)
          1107(u):   1106(ptr) Variable Input
+            1114:             TypePointer Function 23(int)
+1116(gl_PrimitiveID):   1026(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
          1019(v):   1018(ptr) Variable Function
+        1115(id):   1114(ptr) Variable Function
             1028:     23(int) Load 1027(i)
             1030:   1029(ptr) AccessChain 1025(arrayedSampler) 1028
             1031:        1021 Load 1030
@@ -242,6 +250,8 @@
                               Store 1105(uo) 1111
             1112:           2 FunctionCall 6(foo23()
             1113:           2 FunctionCall 8(doubles()
+            1117:     23(int) Load 1116(gl_PrimitiveID)
+                              Store 1115(id) 1117
                               Return
                               FunctionEnd
        6(foo23():           2 Function None 3
diff --git a/Test/spv.400.frag b/Test/spv.400.frag
index 05b4370..d64c470 100644
--- a/Test/spv.400.frag
+++ b/Test/spv.400.frag
@@ -259,5 +259,7 @@
     uo = u % i;

     foo23();

     doubles();

+

+    int id = gl_PrimitiveID;

 }