Use SV_IsFrontFace to implement gl_FrontFacing on DX11.

TRAC #22426 Signed-off-by: Jamie Madill Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1752 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 8587f41f
......@@ -1416,20 +1416,24 @@ bool ProgramBinary::linkVaryings(InfoLog &infoLog, std::string& pixelHLSL, std::
pixelHLSL += " float2 gl_PointCoord : TEXCOORD0;\n";
}
pixelHLSL += "};\n"
"\n"
"struct PS_OUTPUT\n"
"{\n"
" float4 gl_Color[1] : " + targetSemantic + ";\n"
"};\n"
"\n";
if (fragmentShader->mUsesFrontFacing)
{
pixelHLSL += " float vFace : VFACE;\n";
pixelHLSL += "PS_OUTPUT main(PS_INPUT input, bool isFrontFace : SV_IsFrontFace)\n"
"{\n";
}
else
{
pixelHLSL += "PS_OUTPUT main(PS_INPUT input)\n"
"{\n";
}
pixelHLSL += "};\n"
"\n"
"struct PS_OUTPUT\n"
"{\n"
" float4 gl_Color[1] : " + targetSemantic + ";\n"
"};\n"
"\n"
"PS_OUTPUT main(PS_INPUT input)\n"
"{\n";
if (fragmentShader->mUsesFragCoord)
{
......@@ -1464,7 +1468,14 @@ bool ProgramBinary::linkVaryings(InfoLog &infoLog, std::string& pixelHLSL, std::
if (fragmentShader->mUsesFrontFacing)
{
pixelHLSL += " gl_FrontFacing = (input.vFace * dx_DepthFront.z >= 0.0);\n";
if (shaderModel <= 3)
{
pixelHLSL += " gl_FrontFacing = (vFace * dx_DepthFront.z >= 0.0);\n";
}
else
{
pixelHLSL += " gl_FrontFacing = isFrontFace;\n";
}
}
for (VaryingList::iterator varying = fragmentShader->mVaryings.begin(); varying != fragmentShader->mVaryings.end(); varying++)
......
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