Commit 72d58c4c by kbr@chromium.org

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
parent 74d760bc
...@@ -1373,6 +1373,9 @@ bool Program::linkVaryings() ...@@ -1373,6 +1373,9 @@ bool Program::linkVaryings()
if (mFragmentShader->mUsesFragCoord) if (mFragmentShader->mUsesFragCoord)
{ {
mPixelHLSL += " float4 gl_FragCoord : " + varyingSemantic + str(registers) + ";\n"; mPixelHLSL += " float4 gl_FragCoord : " + varyingSemantic + str(registers) + ";\n";
if (sm3) {
mPixelHLSL += " float4 dx_VPos : VPOS;\n";
}
} }
if (mFragmentShader->mUsesPointCoord && sm3) if (mFragmentShader->mUsesPointCoord && sm3)
...@@ -1397,10 +1400,15 @@ bool Program::linkVaryings() ...@@ -1397,10 +1400,15 @@ bool Program::linkVaryings()
if (mFragmentShader->mUsesFragCoord) if (mFragmentShader->mUsesFragCoord)
{ {
mPixelHLSL += " float rhw = 1.0 / input.gl_FragCoord.w;\n" 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" if (sm3) {
" gl_FragCoord.y = (input.gl_FragCoord.y * rhw) * dx_Viewport.y + dx_Viewport.w;\n" mPixelHLSL += " gl_FragCoord.x = input.dx_VPos.x;\n"
" gl_FragCoord.z = (input.gl_FragCoord.z * rhw) * dx_Depth.x + dx_Depth.y;\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"; " gl_FragCoord.w = rhw;\n";
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment