SPV: Implement GLSL interpolation built-in functions.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 0fff30e..4ed3af7 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -822,7 +822,8 @@
 
     if (node->getOp() == glslang::EOpAtomicCounterIncrement ||
         node->getOp() == glslang::EOpAtomicCounterDecrement ||
-        node->getOp() == glslang::EOpAtomicCounter)
+        node->getOp() == glslang::EOpAtomicCounter          ||
+        node->getOp() == glslang::EOpInterpolateAtCentroid)
         operand = builder.accessChainGetLValue(); // Special case l-value operands
     else
         operand = builder.accessChainLoad(convertGlslangToSpvType(node->getOperand()->getType()));
@@ -1174,6 +1175,11 @@
             if (arg == 1)
                 lvalue = true;
             break;
+        case glslang::EOpInterpolateAtSample:
+        case glslang::EOpInterpolateAtOffset:
+            if (arg == 0)
+                lvalue = true;
+            break;
         case glslang::EOpAtomicAdd:
         case glslang::EOpAtomicMin:
         case glslang::EOpAtomicMax:
@@ -2508,7 +2514,9 @@
     case glslang::EOpFwidthCoarse:
         unaryOp = spv::OpFwidthCoarse;
         break;
-
+    case glslang::EOpInterpolateAtCentroid:
+        libCall = spv::GLSLstd450InterpolateAtCentroid;
+        break;
     case glslang::EOpAny:
         unaryOp = spv::OpAny;
         break;
@@ -2840,7 +2848,12 @@
     case glslang::EOpRefract:
         libCall = spv::GLSLstd450Refract;
         break;
-
+    case glslang::EOpInterpolateAtSample:
+        libCall = spv::GLSLstd450InterpolateAtSample;
+        break;
+    case glslang::EOpInterpolateAtOffset:
+        libCall = spv::GLSLstd450InterpolateAtOffset;
+        break;
     case glslang::EOpAddCarry:
         opCode = spv::OpIAddCarry;
         typeId = builder.makeStructResultType(typeId0, typeId0);