Call onProgramExecutableChange in useProgram.
This cleans up the code slightly and removes a few if checks.
Also fixes a potential edge case with ProgramBinary called on a program
that is in-use.
Bug: angleproject:2763
Change-Id: Ibe0ab20ed44f593bb6c2b0612871680a7df1a15f
Reviewed-on: https://chromium-review.googlesource.com/1254041
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 68fa842..374e174 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -5715,8 +5715,11 @@
// ProgramD3D.
if (programObject->isInUse())
{
- // isLinked() which forces to resolve linking, will be called.
- mGLState.onProgramExecutableChange(programObject);
+ if (programObject->isLinked())
+ {
+ mGLState.onProgramExecutableChange(programObject);
+ }
+
mStateCache.onProgramExecutableChange(this);
}
}
@@ -5927,10 +5930,10 @@
ASSERT(programObject != nullptr);
handleError(programObject->loadBinary(this, binaryFormat, binary, length));
- mStateCache.onProgramExecutableChange(this);
if (programObject->isInUse())
{
- mGLState.setObjectDirty(GL_PROGRAM);
+ mGLState.onProgramExecutableChange(programObject);
+ mStateCache.onProgramExecutableChange(this);
}
}