diff options
author | Jamie Madill <jmadill@chromium.org> | 2014-10-24 16:28:14 -0400 |
---|---|---|
committer | Jamie Madill <jmadill@chromium.org> | 2014-10-27 14:22:28 +0000 |
commit | 55d611e780b115e29fdb552bb1f4bbebb3ab8b7a (patch) | |
tree | 44147c30dd0d46eda4992c93eebb584fff59dcf1 | |
parent | 39eab03ffb927a6f8154b5ee838bf1d6c0cac2ca (diff) | |
download | angle-55d611e780b115e29fdb552bb1f4bbebb3ab8b7a.tar.gz |
Fix ASSERT failure in XFB test.
With the invariant handling changes, we're also exporting gl_Position
and other builtin variables from the translator where we were not
previously. This was causing an assert in the XFB code, where we
would inadvertently assign a register to gl_Position, and trip up
logic further in the varying handling logic.
BUG=angle:808
Change-Id: I674902da75c572e969f9516033a85c7a7170d7d1
Reviewed-on: https://chromium-review.googlesource.com/225261
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
-rw-r--r-- | src/libGLESv2/renderer/d3d/DynamicHLSL.cpp | 9 | ||||
-rw-r--r-- | src/libGLESv2/renderer/d3d/ShaderD3D.cpp | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/libGLESv2/renderer/d3d/DynamicHLSL.cpp b/src/libGLESv2/renderer/d3d/DynamicHLSL.cpp index 13411ebe..daf73f20 100644 --- a/src/libGLESv2/renderer/d3d/DynamicHLSL.cpp +++ b/src/libGLESv2/renderer/d3d/DynamicHLSL.cpp @@ -262,6 +262,13 @@ int DynamicHLSL::packVaryings(InfoLog &infoLog, VaryingPacking packing, rx::Shad for (unsigned int feedbackVaryingIndex = 0; feedbackVaryingIndex < transformFeedbackVaryings.size(); feedbackVaryingIndex++) { const std::string &transformFeedbackVarying = transformFeedbackVaryings[feedbackVaryingIndex]; + + if (transformFeedbackVarying == "gl_Position" || transformFeedbackVarying == "gl_PointSize") + { + // do not pack builtin XFB varyings + continue; + } + if (packedVaryings.find(transformFeedbackVarying) == packedVaryings.end()) { bool found = false; @@ -281,7 +288,7 @@ int DynamicHLSL::packVaryings(InfoLog &infoLog, VaryingPacking packing, rx::Shad } } - if (!found && transformFeedbackVarying != "gl_Position" && transformFeedbackVarying != "gl_PointSize") + if (!found) { infoLog.append("Transform feedback varying %s does not exist in the vertex shader.", transformFeedbackVarying.c_str()); return -1; diff --git a/src/libGLESv2/renderer/d3d/ShaderD3D.cpp b/src/libGLESv2/renderer/d3d/ShaderD3D.cpp index f3778d9a..cdb927b7 100644 --- a/src/libGLESv2/renderer/d3d/ShaderD3D.cpp +++ b/src/libGLESv2/renderer/d3d/ShaderD3D.cpp @@ -153,7 +153,7 @@ void ShaderD3D::releaseCompiler() void ShaderD3D::parseVaryings(void *compiler) { - if (!mHlsl.empty()) + if (!mHlsl.empty()) { const std::vector<sh::Varying> *varyings = ShGetVaryings(compiler); ASSERT(varyings); |