Smart caching of VAO input layout.

Don't recompute the cached attribute layout for a program if the
vertex array info hasn't changed. We can use the Serial class to
know when a vertex array has identical state.

BUG=angleproject:1156

Change-Id: Ia11f6ac268f63c3299f6d6d80c2866009cb8429c
Reviewed-on: https://chromium-review.googlesource.com/529768
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 349491d..240dcd8 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -4649,6 +4649,7 @@
     Program *programObject = getProgram(program);
     ASSERT(programObject);
     handleError(programObject->link(this));
+    mGLState.onProgramExecutableChange(programObject);
 }
 
 void Context::releaseShaderCompiler()
@@ -4843,8 +4844,8 @@
 {
     Program *programObject = getProgram(program);
     ASSERT(programObject != nullptr);
-
     handleError(programObject->loadBinary(this, binaryFormat, binary, length));
+    mGLState.onProgramExecutableChange(programObject);
 }
 
 }  // namespace gl