Fixed gl_FragCoord emulation for point sprites of size > 1 using VPOS
semantic for x and y coordinates rather than previous per-vertex
emulation when running on Shader Model 3.

Verified fix in Chromium with test case from bug.

BUG=http://code.google.com/p/angleproject/issues/detail?id=71
TEST=test case from bug
TBR=nicolas (LGTM'd by dgkoch)

Review URL: http://codereview.appspot.com/2921041

git-svn-id: https://angleproject.googlecode.com/svn/trunk@473 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Program.cpp b/src/libGLESv2/Program.cpp
index 812b89d..c5e7505 100644
--- a/src/libGLESv2/Program.cpp
+++ b/src/libGLESv2/Program.cpp
@@ -1373,6 +1373,9 @@
     if (mFragmentShader->mUsesFragCoord)
     {
         mPixelHLSL += "    float4 gl_FragCoord : " + varyingSemantic + str(registers) + ";\n";
+        if (sm3) {
+            mPixelHLSL += "    float4 dx_VPos : VPOS;\n";
+        }
     }
 
     if (mFragmentShader->mUsesPointCoord && sm3)
@@ -1397,10 +1400,15 @@
 
     if (mFragmentShader->mUsesFragCoord)
     {
-        mPixelHLSL += "    float rhw = 1.0 / input.gl_FragCoord.w;\n"
-                      "    gl_FragCoord.x = (input.gl_FragCoord.x * rhw) * dx_Viewport.x + dx_Viewport.z;\n"
-                      "    gl_FragCoord.y = (input.gl_FragCoord.y * rhw) * dx_Viewport.y + dx_Viewport.w;\n"
-                      "    gl_FragCoord.z = (input.gl_FragCoord.z * rhw) * dx_Depth.x + dx_Depth.y;\n"
+        mPixelHLSL += "    float rhw = 1.0 / input.gl_FragCoord.w;\n";
+        if (sm3) {
+            mPixelHLSL += "    gl_FragCoord.x = input.dx_VPos.x;\n"
+                          "    gl_FragCoord.y = input.dx_VPos.y;\n";
+        } else {
+            mPixelHLSL += "    gl_FragCoord.x = (input.gl_FragCoord.x * rhw) * dx_Viewport.x + dx_Viewport.z;\n"
+                          "    gl_FragCoord.y = (input.gl_FragCoord.y * rhw) * dx_Viewport.y + dx_Viewport.w;\n";
+        }
+        mPixelHLSL += "    gl_FragCoord.z = (input.gl_FragCoord.z * rhw) * dx_Depth.x + dx_Depth.y;\n"
                       "    gl_FragCoord.w = rhw;\n";
     }