Commit 73e32ee1 by Cooper Partin Committed by Jamie Madill

Fixed FL9_3 shaders that use glPointCoord without glPointSize.

This change fixes a Shader error on FL9_3 that reports Vertex/Pixel Shader linkage signatures between stages being incompatible when glPointCoord is used without glPointSize. Change-Id: I93ffb6c6dd38f26e2156a374b1b58ecc3a5f250b Reviewed-on: https://chromium-review.googlesource.com/301450Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarCooper Partin <coopp@microsoft.com>
parent 02f98029
......@@ -775,6 +775,10 @@ bool DynamicHLSL::generateShaderLinkHLSL(const gl::Data &data,
bool usesPointCoord = fragmentShader->mUsesPointCoord;
bool usesPointSize = vertexShader->mUsesPointSize;
bool useInstancedPointSpriteEmulation = usesPointSize && mRenderer->getWorkarounds().useInstancedPointSpriteEmulation;
bool insertDummyPointCoordValue = !usesPointSize && usesPointCoord &&
mRenderer->getWorkarounds().useInstancedPointSpriteEmulation;
bool addPointCoord = (useInstancedPointSpriteEmulation && usesPointCoord) ||
insertDummyPointCoordValue || (!usesPointSize && usesPointCoord);
// Validation done in the compiler
ASSERT(!fragmentShader->mUsesFragColor || !fragmentShader->mUsesFragData);
......@@ -811,9 +815,9 @@ bool DynamicHLSL::generateShaderLinkHLSL(const gl::Data &data,
// generated pixel shader.
// The Geometry Shader point sprite implementation needs gl_PointSize to be in VS_OUTPUT and GS_INPUT.
// Instanced point sprites doesn't need gl_PointSize in VS_OUTPUT.
const SemanticInfo &vertexSemantics = getSemanticInfo(registers, outputPositionFromVS,
usesFragCoord, (useInstancedPointSpriteEmulation && usesPointCoord),
(!useInstancedPointSpriteEmulation && usesPointSize), false);
const SemanticInfo &vertexSemantics =
getSemanticInfo(registers, outputPositionFromVS, usesFragCoord, addPointCoord,
(!useInstancedPointSpriteEmulation && usesPointSize), false);
storeUserLinkedVaryings(packedVaryings, usesPointSize, linkedVaryings);
storeBuiltinLinkedVaryings(vertexSemantics, linkedVaryings);
......@@ -929,6 +933,18 @@ bool DynamicHLSL::generateShaderLinkHLSL(const gl::Data &data,
}
}
// Renderers that enable instanced pointsprite emulation require the vertex shader output member
// gl_PointCoord
// to be set to a default value if used without gl_PointSize. 0.5,0.5 is the same default value
// used in the
// generated pixel shader.
if (insertDummyPointCoordValue)
{
vertexHLSL +=
"\n"
" output.gl_PointCoord = float2(0.5, 0.5);\n";
}
vertexHLSL += "\n"
" return output;\n"
"}\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