Added support for EXT_frag_depth

This change also required that support be added for associating built-in
variables with an extension, similar to how functions could be associated with
extensions previously.

R=alokp@chromium.org

Review URL: https://codereview.appspot.com/9827044

git-svn-id: https://angleproject.googlecode.com/svn/trunk@2248 736b8ea6-26fd-11df-bfd4-992fa37f6226

TRAC #23333
Authored-by: bajones@chromium.org
Signed-off-by: Shannon Woods
Signed-off-by Nicolas Capens
Merged-by: Jamie Madill
diff --git a/src/libGLESv2/ProgramBinary.cpp b/src/libGLESv2/ProgramBinary.cpp
index 7a25e69..54766b9 100644
--- a/src/libGLESv2/ProgramBinary.cpp
+++ b/src/libGLESv2/ProgramBinary.cpp
@@ -1178,6 +1178,7 @@
     std::string varyingSemantic = (mUsesPointSize && shaderModel == 3) ? "COLOR" : "TEXCOORD";
     std::string targetSemantic = (shaderModel >= 4) ? "SV_Target" : "COLOR";
     std::string positionSemantic = (shaderModel >= 4) ? "SV_Position" : "POSITION";
+    std::string depthSemantic = (shaderModel >= 4) ? "SV_Depth" : "DEPTH";
 
     std::string varyingHLSL = generateVaryingHLSL(fragmentShader, varyingSemantic);
 
@@ -1407,6 +1408,11 @@
         {
             pixelHLSL += "    float4 gl_Color" + str(renderTargetIndex) + " : " + targetSemantic + str(renderTargetIndex) + ";\n";
         }
+
+        if (fragmentShader->mUsesFragDepth)
+        {
+            pixelHLSL += "    float gl_Depth : " + depthSemantic + ";\n";
+        }
     }
     else
     {
@@ -1540,6 +1546,11 @@
 
             pixelHLSL += "    output.gl_Color" + str(renderTargetIndex) + " = gl_Color[" + str(sourceColorIndex) + "];\n";
         }
+
+        if (fragmentShader->mUsesFragDepth)
+        {
+            pixelHLSL += "    output.gl_Depth = gl_Depth;\n";
+        }
     }
     else
     {