D3D11: Move TF state management to StateManager11.

This also changes the dirty TF object to use a Serial, which is more
secure for very edge-care reallocation issues. It also moves the
StateManager11::updateState call to be the very first thing that
happens in a draw call. This prepares the back-end for making the
state sync actually happen in Context11::syncState, instead of
inside the draw call.

Also moves a bit more TF management code out of RendererD3D and
Renderer9.

BUG=angleproject:2052

Change-Id: I93d033a07be2049023111975a31637c53893e8c8
Reviewed-on: https://chromium-review.googlesource.com/659229
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/ProgramD3D.cpp b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
index 07efd29..2c1bbb2 100644
--- a/src/libANGLE/renderer/d3d/ProgramD3D.cpp
+++ b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
@@ -1272,7 +1272,7 @@
     return gl::NoError();
 }
 
-gl::Error ProgramD3D::getGeometryExecutableForPrimitiveType(const gl::ContextState &data,
+gl::Error ProgramD3D::getGeometryExecutableForPrimitiveType(const gl::Context *context,
                                                             GLenum drawMode,
                                                             ShaderExecutableD3D **outExecutable,
                                                             gl::InfoLog *infoLog)
@@ -1300,7 +1300,7 @@
     }
 
     std::string geometryHLSL = mDynamicHLSL->generateGeometryShaderHLSL(
-        geometryShaderType, data, mState, mRenderer->presentPathFastEnabled(),
+        context, geometryShaderType, mState, mRenderer->presentPathFastEnabled(),
         mHasANGLEMultiviewEnabled, mRenderer->canSelectViewInVertexShader(),
         usesGeometryShaderForPointSpriteEmulation(), mGeometryShaderPreamble);
 
@@ -1404,8 +1404,8 @@
 class ProgramD3D::GetGeometryExecutableTask : public ProgramD3D::GetExecutableTask
 {
   public:
-    GetGeometryExecutableTask(ProgramD3D *program, const gl::ContextState &contextState)
-        : GetExecutableTask(program), mContextState(contextState)
+    GetGeometryExecutableTask(ProgramD3D *program, const gl::Context *context)
+        : GetExecutableTask(program), mContext(context)
     {
     }
 
@@ -1415,15 +1415,15 @@
         // D3D11.
         if (mProgram->usesGeometryShader(GL_POINTS))
         {
-            ANGLE_TRY(mProgram->getGeometryExecutableForPrimitiveType(mContextState, GL_POINTS,
-                                                                      &mResult, &mInfoLog));
+            ANGLE_TRY(mProgram->getGeometryExecutableForPrimitiveType(mContext, GL_POINTS, &mResult,
+                                                                      &mInfoLog));
         }
 
         return gl::NoError();
     }
 
   private:
-    const gl::ContextState &mContextState;
+    const gl::Context *mContext;
 };
 
 gl::Error ProgramD3D::getComputeExecutable(ShaderExecutableD3D **outExecutable)
@@ -1446,7 +1446,7 @@
 
     GetVertexExecutableTask vertexTask(this, context);
     GetPixelExecutableTask pixelTask(this);
-    GetGeometryExecutableTask geometryTask(this, context->getContextState());
+    GetGeometryExecutableTask geometryTask(this, context);
 
     std::array<WaitableEvent, 3> waitEvents = {{workerPool->postWorkerTask(&vertexTask),
                                                 workerPool->postWorkerTask(&pixelTask),