Add workaround to always call useProgram after a successful link.
This workaround is meant to reproduce the behavior of the
use_current_program_after_successful_link workaround in
Chromium (http://crbug.com/110263)
The workaround was shown to be unnecessary for MacOSX 10.9 and
higher (http://crrev.com/39eb535b).
BUG=349137
Change-Id: I3023f053aa1593ba7044a889dd47746b8f7e0581
Reviewed-on: https://chromium-review.googlesource.com/337780
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/gl/ProgramGL.cpp b/src/libANGLE/renderer/gl/ProgramGL.cpp
index cac1985..71d73fd 100644
--- a/src/libANGLE/renderer/gl/ProgramGL.cpp
+++ b/src/libANGLE/renderer/gl/ProgramGL.cpp
@@ -13,6 +13,7 @@
#include "libANGLE/renderer/gl/FunctionsGL.h"
#include "libANGLE/renderer/gl/ShaderGL.h"
#include "libANGLE/renderer/gl/StateManagerGL.h"
+#include "libANGLE/renderer/gl/WorkaroundsGL.h"
#include "platform/Platform.h"
namespace rx
@@ -20,8 +21,13 @@
ProgramGL::ProgramGL(const gl::Program::Data &data,
const FunctionsGL *functions,
+ const WorkaroundsGL &workarounds,
StateManagerGL *stateManager)
- : ProgramImpl(data), mFunctions(functions), mStateManager(stateManager), mProgramID(0)
+ : ProgramImpl(data),
+ mFunctions(functions),
+ mWorkarounds(workarounds),
+ mStateManager(stateManager),
+ mProgramID(0)
{
ASSERT(mFunctions);
ASSERT(mStateManager);
@@ -144,6 +150,11 @@
return LinkResult(false, gl::Error(GL_NO_ERROR));
}
+ if (mWorkarounds.alwaysCallUseProgramAfterLink)
+ {
+ mStateManager->forceUseProgram(mProgramID);
+ }
+
// Query the uniform information
ASSERT(mUniformRealLocationMap.empty());
const auto &uniforms = mData.getUniforms();