Support virtualized contexts and transform feedback in Renderer11.

Track buffer offets in the transform feedback object and dirty them when a
buffer is bound.  This fixes problems when a buffer is rebound at the same
offset and maintains tracking between context switches.

BUG=angleproject:1447
BUG=angleproject:1298

Change-Id: I2f890e3ad5edacab47f624a95a502615c86cc0c8
Reviewed-on: https://chromium-review.googlesource.com/360910
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/TransformFeedback_unittest.cpp b/src/libANGLE/TransformFeedback_unittest.cpp
index d173686..07a0959 100644
--- a/src/libANGLE/TransformFeedback_unittest.cpp
+++ b/src/libANGLE/TransformFeedback_unittest.cpp
@@ -14,12 +14,18 @@
 #include "tests/angle_unittests_utils.h"
 
 using ::testing::_;
+using ::testing::get;
 using ::testing::Return;
 using ::testing::SetArgumentPointee;
 
 namespace
 {
 
+ACTION(CreateMockTransformFeedbackImpl)
+{
+    return new rx::MockTransformFeedbackImpl(arg0);
+}
+
 class TransformFeedbackTest : public testing::Test
 {
   protected:
@@ -27,17 +33,18 @@
 
     void SetUp() override
     {
-        mImpl = new rx::MockTransformFeedbackImpl;
-        EXPECT_CALL(mMockFactory, createTransformFeedback())
-            .WillOnce(Return(mImpl))
+        EXPECT_CALL(mMockFactory, createTransformFeedback(_))
+            .WillOnce(CreateMockTransformFeedbackImpl())
             .RetiresOnSaturation();
 
         // Set a reasonable number of tf attributes
         mCaps.maxTransformFeedbackSeparateAttributes = 8;
 
-        EXPECT_CALL(*mImpl, destructor());
         mFeedback = new gl::TransformFeedback(&mMockFactory, 1, mCaps);
         mFeedback->addRef();
+
+        mImpl = rx::GetImplAs<rx::MockTransformFeedbackImpl>(mFeedback);
+        EXPECT_CALL(*mImpl, destructor());
     }
 
     void TearDown() override