Pass Context to Fence Impl methods.

This is needed for the error refactoring and also for the Vulkan
implementation.

Bug: angleproject:2738
Change-Id: I4e1bed7f67ef17feb5554b5838a2ed5feb22bba0
Reviewed-on: https://chromium-review.googlesource.com/1150091
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index d081a37..4ceda20 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -4987,7 +4987,7 @@
 void Context::getSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
 {
     const Sync *syncObject = getSync(sync);
-    handleError(QuerySynciv(syncObject, pname, bufSize, length, values));
+    handleError(QuerySynciv(this, syncObject, pname, bufSize, length, values));
 }
 
 void Context::getFramebufferParameteriv(GLenum target, GLenum pname, GLint *params)
@@ -6119,7 +6119,7 @@
     GLsync syncHandle = reinterpret_cast<GLsync>(static_cast<uintptr_t>(handle));
 
     Sync *syncObject = getSync(syncHandle);
-    Error error      = syncObject->set(condition, flags);
+    Error error      = syncObject->set(this, condition, flags);
     if (error.isError())
     {
         deleteSync(syncHandle);
@@ -6140,14 +6140,14 @@
     Sync *syncObject = getSync(sync);
 
     GLenum result = GL_WAIT_FAILED;
-    handleError(syncObject->clientWait(flags, timeout, &result));
+    handleError(syncObject->clientWait(this, flags, timeout, &result));
     return result;
 }
 
 void Context::waitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
 {
     Sync *syncObject = getSync(sync);
-    handleError(syncObject->serverWait(flags, timeout));
+    handleError(syncObject->serverWait(this, flags, timeout));
 }
 
 void Context::getInteger64v(GLenum pname, GLint64 *params)
@@ -6550,7 +6550,7 @@
     FenceNV *fenceObject = getFenceNV(fence);
 
     ASSERT(fenceObject && fenceObject->isSet());
-    handleError(fenceObject->finish());
+    handleError(fenceObject->finish(this));
 }
 
 void Context::getFenceivNV(GLuint fence, GLenum pname, GLint *params)
@@ -6570,7 +6570,7 @@
             GLboolean status = GL_TRUE;
             if (fenceObject->getStatus() != GL_TRUE)
             {
-                ANGLE_CONTEXT_TRY(fenceObject->test(&status));
+                ANGLE_CONTEXT_TRY(fenceObject->test(this, &status));
             }
             *params = status;
             break;
@@ -6673,7 +6673,7 @@
 
     FenceNV *fenceObject = getFenceNV(fence);
     ASSERT(fenceObject != nullptr);
-    handleError(fenceObject->set(condition));
+    handleError(fenceObject->set(this, condition));
 }
 
 GLboolean Context::testFenceNV(GLuint fence)
@@ -6684,7 +6684,7 @@
     ASSERT(fenceObject->isSet() == GL_TRUE);
 
     GLboolean result = GL_TRUE;
-    Error error      = fenceObject->test(&result);
+    Error error      = fenceObject->test(this, &result);
     if (error.isError())
     {
         handleError(error);
diff --git a/src/libANGLE/Fence.cpp b/src/libANGLE/Fence.cpp
index 9c4d381..a424a8c 100644
--- a/src/libANGLE/Fence.cpp
+++ b/src/libANGLE/Fence.cpp
@@ -31,13 +31,9 @@
     SafeDelete(mFence);
 }
 
-Error FenceNV::set(GLenum condition)
+Error FenceNV::set(const Context *context, GLenum condition)
 {
-    Error error = mFence->set(condition);
-    if (error.isError())
-    {
-        return error;
-    }
+    ANGLE_TRY(mFence->set(context, condition));
 
     mCondition = condition;
     mStatus = GL_FALSE;
@@ -46,28 +42,20 @@
     return NoError();
 }
 
-Error FenceNV::test(GLboolean *outResult)
+Error FenceNV::test(const Context *context, GLboolean *outResult)
 {
     // Flush the command buffer by default
-    Error error = mFence->test(&mStatus);
-    if (error.isError())
-    {
-        return error;
-    }
+    ANGLE_TRY(mFence->test(context, &mStatus));
 
     *outResult = mStatus;
     return NoError();
 }
 
-Error FenceNV::finish()
+Error FenceNV::finish(const Context *context)
 {
     ASSERT(mIsSet);
 
-    gl::Error error = mFence->finish();
-    if (error.isError())
-    {
-        return error;
-    }
+    ANGLE_TRY(mFence->finish(context));
 
     mStatus = GL_TRUE;
 
@@ -103,33 +91,32 @@
     return mLabel;
 }
 
-Error Sync::set(GLenum condition, GLbitfield flags)
+Error Sync::set(const Context *context, GLenum condition, GLbitfield flags)
 {
-    Error error = mFence->set(condition, flags);
-    if (error.isError())
-    {
-        return error;
-    }
+    ANGLE_TRY(mFence->set(context, condition, flags));
 
     mCondition = condition;
     mFlags = flags;
     return NoError();
 }
 
-Error Sync::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult)
+Error Sync::clientWait(const Context *context,
+                       GLbitfield flags,
+                       GLuint64 timeout,
+                       GLenum *outResult)
 {
     ASSERT(mCondition != GL_NONE);
-    return mFence->clientWait(flags, timeout, outResult);
+    return mFence->clientWait(context, flags, timeout, outResult);
 }
 
-Error Sync::serverWait(GLbitfield flags, GLuint64 timeout)
+Error Sync::serverWait(const Context *context, GLbitfield flags, GLuint64 timeout)
 {
-    return mFence->serverWait(flags, timeout);
+    return mFence->serverWait(context, flags, timeout);
 }
 
-Error Sync::getStatus(GLint *outResult) const
+Error Sync::getStatus(const Context *context, GLint *outResult) const
 {
-    return mFence->getStatus(outResult);
+    return mFence->getStatus(context, outResult);
 }
 
 }  // namespace gl
diff --git a/src/libANGLE/Fence.h b/src/libANGLE/Fence.h
index 24bc689..22a6fbe 100644
--- a/src/libANGLE/Fence.h
+++ b/src/libANGLE/Fence.h
@@ -31,9 +31,9 @@
     explicit FenceNV(rx::FenceNVImpl *impl);
     virtual ~FenceNV();
 
-    Error set(GLenum condition);
-    Error test(GLboolean *outResult);
-    Error finish();
+    Error set(const Context *context, GLenum condition);
+    Error test(const Context *context, GLboolean *outResult);
+    Error finish(const Context *context);
 
     bool isSet() const { return mIsSet; }
     GLboolean getStatus() const { return mStatus; }
@@ -59,10 +59,10 @@
     void setLabel(const std::string &label) override;
     const std::string &getLabel() const override;
 
-    Error set(GLenum condition, GLbitfield flags);
-    Error clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult);
-    Error serverWait(GLbitfield flags, GLuint64 timeout);
-    Error getStatus(GLint *outResult) const;
+    Error set(const Context *context, GLenum condition, GLbitfield flags);
+    Error clientWait(const Context *context, GLbitfield flags, GLuint64 timeout, GLenum *outResult);
+    Error serverWait(const Context *context, GLbitfield flags, GLuint64 timeout);
+    Error getStatus(const Context *context, GLint *outResult) const;
 
     GLenum getCondition() const { return mCondition; }
     GLbitfield getFlags() const { return mFlags; }
diff --git a/src/libANGLE/Fence_unittest.cpp b/src/libANGLE/Fence_unittest.cpp
index edc5501..418ec9d 100644
--- a/src/libANGLE/Fence_unittest.cpp
+++ b/src/libANGLE/Fence_unittest.cpp
@@ -25,9 +25,9 @@
   public:
     virtual ~MockFenceNVImpl() { destroy(); }
 
-    MOCK_METHOD1(set, gl::Error(GLenum));
-    MOCK_METHOD1(test, gl::Error(GLboolean *));
-    MOCK_METHOD0(finish, gl::Error());
+    MOCK_METHOD2(set, gl::Error(const gl::Context *, GLenum));
+    MOCK_METHOD2(test, gl::Error(const gl::Context *, GLboolean *));
+    MOCK_METHOD1(finish, gl::Error(const gl::Context *));
 
     MOCK_METHOD0(destroy, void());
 };
@@ -67,19 +67,19 @@
 
 TEST_F(FenceNVTest, SetAndTestBehavior)
 {
-    EXPECT_CALL(*mImpl, set(_)).WillOnce(Return(gl::NoError())).RetiresOnSaturation();
+    EXPECT_CALL(*mImpl, set(_, _)).WillOnce(Return(gl::NoError())).RetiresOnSaturation();
     EXPECT_FALSE(mFence->isSet());
-    EXPECT_FALSE(mFence->set(GL_ALL_COMPLETED_NV).isError());
+    EXPECT_FALSE(mFence->set(nullptr, GL_ALL_COMPLETED_NV).isError());
     EXPECT_TRUE(mFence->isSet());
     // Fake the behavior of testing the fence before and after it's passed.
-    EXPECT_CALL(*mImpl, test(_))
-        .WillOnce(DoAll(SetArgumentPointee<0>(GL_FALSE), Return(gl::NoError())))
-        .WillOnce(DoAll(SetArgumentPointee<0>(GL_TRUE), Return(gl::NoError())))
+    EXPECT_CALL(*mImpl, test(_, _))
+        .WillOnce(DoAll(SetArgumentPointee<1>(GL_FALSE), Return(gl::NoError())))
+        .WillOnce(DoAll(SetArgumentPointee<1>(GL_TRUE), Return(gl::NoError())))
         .RetiresOnSaturation();
     GLboolean out;
-    EXPECT_FALSE(mFence->test(&out).isError());
+    EXPECT_FALSE(mFence->test(nullptr, &out).isError());
     EXPECT_EQ(GL_FALSE, out);
-    EXPECT_FALSE(mFence->test(&out).isError());
+    EXPECT_FALSE(mFence->test(nullptr, &out).isError());
     EXPECT_EQ(GL_TRUE, out);
 }
 
@@ -92,10 +92,10 @@
   public:
     virtual ~MockSyncImpl() { destroy(); }
 
-    MOCK_METHOD2(set, gl::Error(GLenum, GLbitfield));
-    MOCK_METHOD3(clientWait, gl::Error(GLbitfield, GLuint64, GLenum *));
-    MOCK_METHOD2(serverWait, gl::Error(GLbitfield, GLuint64));
-    MOCK_METHOD1(getStatus, gl::Error(GLint *));
+    MOCK_METHOD3(set, gl::Error(const gl::Context *, GLenum, GLbitfield));
+    MOCK_METHOD4(clientWait, gl::Error(const gl::Context *, GLbitfield, GLuint64, GLenum *));
+    MOCK_METHOD3(serverWait, gl::Error(const gl::Context *, GLbitfield, GLuint64));
+    MOCK_METHOD2(getStatus, gl::Error(const gl::Context *, GLint *));
 
     MOCK_METHOD0(destroy, void());
 };
@@ -134,18 +134,18 @@
 
 TEST_F(FenceSyncTest, SetAndGetStatusBehavior)
 {
-    EXPECT_CALL(*mImpl, set(_, _)).WillOnce(Return(gl::NoError())).RetiresOnSaturation();
-    EXPECT_FALSE(mFence->set(GL_SYNC_GPU_COMMANDS_COMPLETE, 0).isError());
+    EXPECT_CALL(*mImpl, set(_, _, _)).WillOnce(Return(gl::NoError())).RetiresOnSaturation();
+    EXPECT_FALSE(mFence->set(nullptr, GL_SYNC_GPU_COMMANDS_COMPLETE, 0).isError());
     EXPECT_EQ(static_cast<GLenum>(GL_SYNC_GPU_COMMANDS_COMPLETE), mFence->getCondition());
     // Fake the behavior of testing the fence before and after it's passed.
-    EXPECT_CALL(*mImpl, getStatus(_))
-        .WillOnce(DoAll(SetArgumentPointee<0>(GL_UNSIGNALED), Return(gl::NoError())))
-        .WillOnce(DoAll(SetArgumentPointee<0>(GL_SIGNALED), Return(gl::NoError())))
+    EXPECT_CALL(*mImpl, getStatus(_, _))
+        .WillOnce(DoAll(SetArgumentPointee<1>(GL_UNSIGNALED), Return(gl::NoError())))
+        .WillOnce(DoAll(SetArgumentPointee<1>(GL_SIGNALED), Return(gl::NoError())))
         .RetiresOnSaturation();
     GLint out;
-    EXPECT_FALSE(mFence->getStatus(&out).isError());
+    EXPECT_FALSE(mFence->getStatus(nullptr, &out).isError());
     EXPECT_EQ(GL_UNSIGNALED, out);
-    EXPECT_FALSE(mFence->getStatus(&out).isError());
+    EXPECT_FALSE(mFence->getStatus(nullptr, &out).isError());
     EXPECT_EQ(GL_SIGNALED, out);
 }
 
diff --git a/src/libANGLE/queryutils.cpp b/src/libANGLE/queryutils.cpp
index 751c5e2..eaf57fa 100644
--- a/src/libANGLE/queryutils.cpp
+++ b/src/libANGLE/queryutils.cpp
@@ -1330,7 +1330,12 @@
     }
 }
 
-Error QuerySynciv(const Sync *sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+Error QuerySynciv(const Context *context,
+                  const Sync *sync,
+                  GLenum pname,
+                  GLsizei bufSize,
+                  GLsizei *length,
+                  GLint *values)
 {
     ASSERT(sync);
 
@@ -1356,7 +1361,7 @@
             *values = clampCast<GLint>(sync->getFlags());
             break;
         case GL_SYNC_STATUS:
-            ANGLE_TRY(sync->getStatus(values));
+            ANGLE_TRY(sync->getStatus(context, values));
             break;
 
         default:
diff --git a/src/libANGLE/queryutils.h b/src/libANGLE/queryutils.h
index 5be1609..b19eeaa 100644
--- a/src/libANGLE/queryutils.h
+++ b/src/libANGLE/queryutils.h
@@ -100,7 +100,12 @@
 
 void QueryFramebufferParameteriv(const Framebuffer *framebuffer, GLenum pname, GLint *params);
 
-Error QuerySynciv(const Sync *sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+Error QuerySynciv(const Context *context,
+                  const Sync *sync,
+                  GLenum pname,
+                  GLsizei bufSize,
+                  GLsizei *length,
+                  GLint *values);
 
 void SetTexParameterf(Context *context, Texture *texture, GLenum pname, GLfloat param);
 void SetTexParameterfv(Context *context, Texture *texture, GLenum pname, const GLfloat *params);
diff --git a/src/libANGLE/renderer/FenceNVImpl.h b/src/libANGLE/renderer/FenceNVImpl.h
index a534914..4a85bb2 100644
--- a/src/libANGLE/renderer/FenceNVImpl.h
+++ b/src/libANGLE/renderer/FenceNVImpl.h
@@ -15,20 +15,23 @@
 
 #include "angle_gl.h"
 
+namespace gl
+{
+class Context;
+}  // namespace gl
+
 namespace rx
 {
-
 class FenceNVImpl : angle::NonCopyable
 {
   public:
     FenceNVImpl() { };
     virtual ~FenceNVImpl() { };
 
-    virtual gl::Error set(GLenum condition) = 0;
-    virtual gl::Error test(GLboolean *outFinished) = 0;
-    virtual gl::Error finish() = 0;
+    virtual gl::Error set(const gl::Context *context, GLenum condition)        = 0;
+    virtual gl::Error test(const gl::Context *context, GLboolean *outFinished) = 0;
+    virtual gl::Error finish(const gl::Context *context)                       = 0;
 };
-
-}
+}  // namespace rx
 
 #endif // LIBANGLE_RENDERER_FENCENVIMPL_H_
diff --git a/src/libANGLE/renderer/SyncImpl.h b/src/libANGLE/renderer/SyncImpl.h
index 22c92c3..949ac9e 100644
--- a/src/libANGLE/renderer/SyncImpl.h
+++ b/src/libANGLE/renderer/SyncImpl.h
@@ -15,20 +15,29 @@
 
 #include "angle_gl.h"
 
+namespace gl
+{
+class Context;
+}  // namespace gl
+
 namespace rx
 {
-
 class SyncImpl : angle::NonCopyable
 {
   public:
     SyncImpl(){};
     virtual ~SyncImpl(){};
 
-    virtual gl::Error set(GLenum condition, GLbitfield flags) = 0;
-    virtual gl::Error clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult) = 0;
-    virtual gl::Error serverWait(GLbitfield flags, GLuint64 timeout) = 0;
-    virtual gl::Error getStatus(GLint *outResult) = 0;
+    virtual gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) = 0;
+    virtual gl::Error clientWait(const gl::Context *context,
+                                 GLbitfield flags,
+                                 GLuint64 timeout,
+                                 GLenum *outResult)                                       = 0;
+    virtual gl::Error serverWait(const gl::Context *context,
+                                 GLbitfield flags,
+                                 GLuint64 timeout)                                        = 0;
+    virtual gl::Error getStatus(const gl::Context *context, GLint *outResult)             = 0;
 };
-}
+}  // namespace rx
 
 #endif  // LIBANGLE_RENDERER_FENCESYNCIMPL_H_
diff --git a/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp b/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp
index 140cb67..65ab132 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp
@@ -71,17 +71,17 @@
     SafeRelease(mQuery);
 }
 
-gl::Error FenceNV11::set(GLenum condition)
+gl::Error FenceNV11::set(const gl::Context *context, GLenum condition)
 {
     return FenceSetHelper(this);
 }
 
-gl::Error FenceNV11::test(GLboolean *outFinished)
+gl::Error FenceNV11::test(const gl::Context *context, GLboolean *outFinished)
 {
     return FenceTestHelper(this, true, outFinished);
 }
 
-gl::Error FenceNV11::finish()
+gl::Error FenceNV11::finish(const gl::Context *context)
 {
     GLboolean finished = GL_FALSE;
 
@@ -132,13 +132,16 @@
     SafeRelease(mQuery);
 }
 
-gl::Error Sync11::set(GLenum condition, GLbitfield flags)
+gl::Error Sync11::set(const gl::Context *context, GLenum condition, GLbitfield flags)
 {
     ASSERT(condition == GL_SYNC_GPU_COMMANDS_COMPLETE && flags == 0);
     return FenceSetHelper(this);
 }
 
-gl::Error Sync11::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult)
+gl::Error Sync11::clientWait(const gl::Context *context,
+                             GLbitfield flags,
+                             GLuint64 timeout,
+                             GLenum *outResult)
 {
     ASSERT(outResult);
 
@@ -212,7 +215,7 @@
     return gl::NoError();
 }
 
-gl::Error Sync11::serverWait(GLbitfield flags, GLuint64 timeout)
+gl::Error Sync11::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout)
 {
     // Because our API is currently designed to be called from a single thread, we don't need to do
     // extra work for a server-side fence. GPU commands issued after the fence is created will
@@ -220,7 +223,7 @@
     return gl::NoError();
 }
 
-gl::Error Sync11::getStatus(GLint *outResult)
+gl::Error Sync11::getStatus(const gl::Context *context, GLint *outResult)
 {
     GLboolean result = GL_FALSE;
     gl::Error error  = FenceTestHelper(this, false, &result);
diff --git a/src/libANGLE/renderer/d3d/d3d11/Fence11.h b/src/libANGLE/renderer/d3d/d3d11/Fence11.h
index 4168df5..2e62c1a 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Fence11.h
+++ b/src/libANGLE/renderer/d3d/d3d11/Fence11.h
@@ -23,9 +23,9 @@
     explicit FenceNV11(Renderer11 *renderer);
     ~FenceNV11() override;
 
-    gl::Error set(GLenum condition) override;
-    gl::Error test(GLboolean *outFinished) override;
-    gl::Error finish() override;
+    gl::Error set(const gl::Context *context, GLenum condition) override;
+    gl::Error test(const gl::Context *context, GLboolean *outFinished) override;
+    gl::Error finish(const gl::Context *context) override;
 
   private:
     template<class T> friend gl::Error FenceSetHelper(T *fence);
@@ -41,10 +41,13 @@
     explicit Sync11(Renderer11 *renderer);
     ~Sync11() override;
 
-    gl::Error set(GLenum condition, GLbitfield flags) override;
-    gl::Error clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult) override;
-    gl::Error serverWait(GLbitfield flags, GLuint64 timeout) override;
-    gl::Error getStatus(GLint *outResult) override;
+    gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
+    gl::Error clientWait(const gl::Context *context,
+                         GLbitfield flags,
+                         GLuint64 timeout,
+                         GLenum *outResult) override;
+    gl::Error serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override;
+    gl::Error getStatus(const gl::Context *context, GLint *outResult) override;
 
   private:
     template<class T> friend gl::Error FenceSetHelper(T *fence);
diff --git a/src/libANGLE/renderer/d3d/d3d9/Fence9.cpp b/src/libANGLE/renderer/d3d/d3d9/Fence9.cpp
index bff3881..bc7faa8 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Fence9.cpp
+++ b/src/libANGLE/renderer/d3d/d3d9/Fence9.cpp
@@ -22,7 +22,7 @@
     SafeRelease(mQuery);
 }
 
-gl::Error FenceNV9::set(GLenum condition)
+gl::Error FenceNV9::set(const gl::Context *context, GLenum condition)
 {
     if (!mQuery)
     {
@@ -44,12 +44,12 @@
     return gl::NoError();
 }
 
-gl::Error FenceNV9::test(GLboolean *outFinished)
+gl::Error FenceNV9::test(const gl::Context *context, GLboolean *outFinished)
 {
     return testHelper(true, outFinished);
 }
 
-gl::Error FenceNV9::finish()
+gl::Error FenceNV9::finish(const gl::Context *context)
 {
     GLboolean finished = GL_FALSE;
     while (finished != GL_TRUE)
@@ -88,4 +88,4 @@
     return gl::NoError();
 }
 
-}
+}  // namespace rx
diff --git a/src/libANGLE/renderer/d3d/d3d9/Fence9.h b/src/libANGLE/renderer/d3d/d3d9/Fence9.h
index de0ff20..d23e42d 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Fence9.h
+++ b/src/libANGLE/renderer/d3d/d3d9/Fence9.h
@@ -22,9 +22,9 @@
     explicit FenceNV9(Renderer9 *renderer);
     ~FenceNV9() override;
 
-    gl::Error set(GLenum condition) override;
-    gl::Error test(GLboolean *outFinished) override;
-    gl::Error finish() override;
+    gl::Error set(const gl::Context *context, GLenum condition) override;
+    gl::Error test(const gl::Context *context, GLboolean *outFinished) override;
+    gl::Error finish(const gl::Context *context) override;
 
   private:
     gl::Error testHelper(bool flushCommandBuffer, GLboolean *outFinished);
@@ -32,7 +32,6 @@
     Renderer9 *mRenderer;
     IDirect3DQuery9 *mQuery;
 };
-
-}
+}  // namespace rx
 
 #endif // LIBANGLE_RENDERER_D3D_D3D9_FENCE9_H_
diff --git a/src/libANGLE/renderer/gl/FenceNVGL.cpp b/src/libANGLE/renderer/gl/FenceNVGL.cpp
index f4c3778..5c785ca 100644
--- a/src/libANGLE/renderer/gl/FenceNVGL.cpp
+++ b/src/libANGLE/renderer/gl/FenceNVGL.cpp
@@ -28,21 +28,21 @@
     mFence = 0;
 }
 
-gl::Error FenceNVGL::set(GLenum condition)
+gl::Error FenceNVGL::set(const gl::Context *context, GLenum condition)
 {
     ASSERT(condition == GL_ALL_COMPLETED_NV);
     mFunctions->setFenceNV(mFence, condition);
     return gl::NoError();
 }
 
-gl::Error FenceNVGL::test(GLboolean *outFinished)
+gl::Error FenceNVGL::test(const gl::Context *context, GLboolean *outFinished)
 {
     ASSERT(outFinished);
     *outFinished = mFunctions->testFenceNV(mFence);
     return gl::NoError();
 }
 
-gl::Error FenceNVGL::finish()
+gl::Error FenceNVGL::finish(const gl::Context *context)
 {
     mFunctions->finishFenceNV(mFence);
     return gl::NoError();
diff --git a/src/libANGLE/renderer/gl/FenceNVGL.h b/src/libANGLE/renderer/gl/FenceNVGL.h
index ffeca85..a40bdb0 100644
--- a/src/libANGLE/renderer/gl/FenceNVGL.h
+++ b/src/libANGLE/renderer/gl/FenceNVGL.h
@@ -21,9 +21,9 @@
     explicit FenceNVGL(const FunctionsGL *functions);
     ~FenceNVGL() override;
 
-    gl::Error set(GLenum condition) override;
-    gl::Error test(GLboolean *outFinished) override;
-    gl::Error finish() override;
+    gl::Error set(const gl::Context *context, GLenum condition) override;
+    gl::Error test(const gl::Context *context, GLboolean *outFinished) override;
+    gl::Error finish(const gl::Context *context) override;
 
   private:
     GLuint mFence;
diff --git a/src/libANGLE/renderer/gl/SyncGL.cpp b/src/libANGLE/renderer/gl/SyncGL.cpp
index 15759cf..fecc56b 100644
--- a/src/libANGLE/renderer/gl/SyncGL.cpp
+++ b/src/libANGLE/renderer/gl/SyncGL.cpp
@@ -27,7 +27,7 @@
     }
 }
 
-gl::Error SyncGL::set(GLenum condition, GLbitfield flags)
+gl::Error SyncGL::set(const gl::Context *context, GLenum condition, GLbitfield flags)
 {
     ASSERT(condition == GL_SYNC_GPU_COMMANDS_COMPLETE && flags == 0);
     mSyncObject = mFunctions->fenceSync(condition, flags);
@@ -40,21 +40,24 @@
     return gl::NoError();
 }
 
-gl::Error SyncGL::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult)
+gl::Error SyncGL::clientWait(const gl::Context *context,
+                             GLbitfield flags,
+                             GLuint64 timeout,
+                             GLenum *outResult)
 {
     ASSERT(mSyncObject != 0);
     *outResult = mFunctions->clientWaitSync(mSyncObject, flags, timeout);
     return gl::NoError();
 }
 
-gl::Error SyncGL::serverWait(GLbitfield flags, GLuint64 timeout)
+gl::Error SyncGL::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout)
 {
     ASSERT(mSyncObject != 0);
     mFunctions->waitSync(mSyncObject, flags, timeout);
     return gl::NoError();
 }
 
-gl::Error SyncGL::getStatus(GLint *outResult)
+gl::Error SyncGL::getStatus(const gl::Context *context, GLint *outResult)
 {
     ASSERT(mSyncObject != 0);
     mFunctions->getSynciv(mSyncObject, GL_SYNC_STATUS, 1, nullptr, outResult);
diff --git a/src/libANGLE/renderer/gl/SyncGL.h b/src/libANGLE/renderer/gl/SyncGL.h
index 8e36604..aab06c6 100644
--- a/src/libANGLE/renderer/gl/SyncGL.h
+++ b/src/libANGLE/renderer/gl/SyncGL.h
@@ -21,10 +21,13 @@
     explicit SyncGL(const FunctionsGL *functions);
     ~SyncGL() override;
 
-    gl::Error set(GLenum condition, GLbitfield flags) override;
-    gl::Error clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult) override;
-    gl::Error serverWait(GLbitfield flags, GLuint64 timeout) override;
-    gl::Error getStatus(GLint *outResult) override;
+    gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
+    gl::Error clientWait(const gl::Context *context,
+                         GLbitfield flags,
+                         GLuint64 timeout,
+                         GLenum *outResult) override;
+    gl::Error serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override;
+    gl::Error getStatus(const gl::Context *context, GLint *outResult) override;
 
   private:
     const FunctionsGL *mFunctions;
diff --git a/src/libANGLE/renderer/null/FenceNVNULL.cpp b/src/libANGLE/renderer/null/FenceNVNULL.cpp
index 5684379..a10ca74 100644
--- a/src/libANGLE/renderer/null/FenceNVNULL.cpp
+++ b/src/libANGLE/renderer/null/FenceNVNULL.cpp
@@ -22,18 +22,18 @@
 {
 }
 
-gl::Error FenceNVNULL::set(GLenum condition)
+gl::Error FenceNVNULL::set(const gl::Context *context, GLenum condition)
 {
     return gl::NoError();
 }
 
-gl::Error FenceNVNULL::test(GLboolean *outFinished)
+gl::Error FenceNVNULL::test(const gl::Context *context, GLboolean *outFinished)
 {
     *outFinished = GL_TRUE;
     return gl::NoError();
 }
 
-gl::Error FenceNVNULL::finish()
+gl::Error FenceNVNULL::finish(const gl::Context *context)
 {
     return gl::NoError();
 }
diff --git a/src/libANGLE/renderer/null/FenceNVNULL.h b/src/libANGLE/renderer/null/FenceNVNULL.h
index 10cf5c2..a1d5028 100644
--- a/src/libANGLE/renderer/null/FenceNVNULL.h
+++ b/src/libANGLE/renderer/null/FenceNVNULL.h
@@ -14,18 +14,16 @@
 
 namespace rx
 {
-
 class FenceNVNULL : public FenceNVImpl
 {
   public:
     FenceNVNULL();
     ~FenceNVNULL() override;
 
-    gl::Error set(GLenum condition) override;
-    gl::Error test(GLboolean *outFinished) override;
-    gl::Error finish() override;
+    gl::Error set(const gl::Context *context, GLenum condition) override;
+    gl::Error test(const gl::Context *context, GLboolean *outFinished) override;
+    gl::Error finish(const gl::Context *context) override;
 };
-
 }  // namespace rx
 
 #endif  // LIBANGLE_RENDERER_NULL_FENCENVNULL_H_
diff --git a/src/libANGLE/renderer/null/SyncNULL.cpp b/src/libANGLE/renderer/null/SyncNULL.cpp
index e75deb3..50c0d6f 100644
--- a/src/libANGLE/renderer/null/SyncNULL.cpp
+++ b/src/libANGLE/renderer/null/SyncNULL.cpp
@@ -22,23 +22,26 @@
 {
 }
 
-gl::Error SyncNULL::set(GLenum condition, GLbitfield flags)
+gl::Error SyncNULL::set(const gl::Context *context, GLenum condition, GLbitfield flags)
 {
     return gl::NoError();
 }
 
-gl::Error SyncNULL::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult)
+gl::Error SyncNULL::clientWait(const gl::Context *context,
+                               GLbitfield flags,
+                               GLuint64 timeout,
+                               GLenum *outResult)
 {
     *outResult = GL_ALREADY_SIGNALED;
     return gl::NoError();
 }
 
-gl::Error SyncNULL::serverWait(GLbitfield flags, GLuint64 timeout)
+gl::Error SyncNULL::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout)
 {
     return gl::NoError();
 }
 
-gl::Error SyncNULL::getStatus(GLint *outResult)
+gl::Error SyncNULL::getStatus(const gl::Context *context, GLint *outResult)
 {
     *outResult = GL_SIGNALED;
     return gl::NoError();
diff --git a/src/libANGLE/renderer/null/SyncNULL.h b/src/libANGLE/renderer/null/SyncNULL.h
index 10096a2..24eab05 100644
--- a/src/libANGLE/renderer/null/SyncNULL.h
+++ b/src/libANGLE/renderer/null/SyncNULL.h
@@ -14,19 +14,20 @@
 
 namespace rx
 {
-
 class SyncNULL : public SyncImpl
 {
   public:
     SyncNULL();
     ~SyncNULL() override;
 
-    gl::Error set(GLenum condition, GLbitfield flags) override;
-    gl::Error clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult) override;
-    gl::Error serverWait(GLbitfield flags, GLuint64 timeout) override;
-    gl::Error getStatus(GLint *outResult) override;
+    gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
+    gl::Error clientWait(const gl::Context *context,
+                         GLbitfield flags,
+                         GLuint64 timeout,
+                         GLenum *outResult) override;
+    gl::Error serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override;
+    gl::Error getStatus(const gl::Context *context, GLint *outResult) override;
 };
-
 }  // namespace rx
 
 #endif  // LIBANGLE_RENDERER_NULL_FENCESYNCNULL_H_
diff --git a/src/libANGLE/renderer/vulkan/FenceNVVk.cpp b/src/libANGLE/renderer/vulkan/FenceNVVk.cpp
index 805fc8c..8e46f2f 100644
--- a/src/libANGLE/renderer/vulkan/FenceNVVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FenceNVVk.cpp
@@ -22,19 +22,19 @@
 {
 }
 
-gl::Error FenceNVVk::set(GLenum condition)
+gl::Error FenceNVVk::set(const gl::Context *context, GLenum condition)
 {
     UNIMPLEMENTED();
     return gl::InternalError();
 }
 
-gl::Error FenceNVVk::test(GLboolean *outFinished)
+gl::Error FenceNVVk::test(const gl::Context *context, GLboolean *outFinished)
 {
     UNIMPLEMENTED();
     return gl::InternalError();
 }
 
-gl::Error FenceNVVk::finish()
+gl::Error FenceNVVk::finish(const gl::Context *context)
 {
     UNIMPLEMENTED();
     return gl::InternalError();
diff --git a/src/libANGLE/renderer/vulkan/FenceNVVk.h b/src/libANGLE/renderer/vulkan/FenceNVVk.h
index be05471..85b09f6 100644
--- a/src/libANGLE/renderer/vulkan/FenceNVVk.h
+++ b/src/libANGLE/renderer/vulkan/FenceNVVk.h
@@ -14,18 +14,16 @@
 
 namespace rx
 {
-
 class FenceNVVk : public FenceNVImpl
 {
   public:
     FenceNVVk();
     ~FenceNVVk() override;
 
-    gl::Error set(GLenum condition) override;
-    gl::Error test(GLboolean *outFinished) override;
-    gl::Error finish() override;
+    gl::Error set(const gl::Context *context, GLenum condition) override;
+    gl::Error test(const gl::Context *context, GLboolean *outFinished) override;
+    gl::Error finish(const gl::Context *context) override;
 };
-
 }  // namespace rx
 
 #endif  // LIBANGLE_RENDERER_VULKAN_FENCENVVK_H_
diff --git a/src/libANGLE/renderer/vulkan/SyncVk.cpp b/src/libANGLE/renderer/vulkan/SyncVk.cpp
index cd2be0a..f6003e5 100644
--- a/src/libANGLE/renderer/vulkan/SyncVk.cpp
+++ b/src/libANGLE/renderer/vulkan/SyncVk.cpp
@@ -22,25 +22,28 @@
 {
 }
 
-gl::Error SyncVk::set(GLenum condition, GLbitfield flags)
+gl::Error SyncVk::set(const gl::Context *context, GLenum condition, GLbitfield flags)
 {
     UNIMPLEMENTED();
     return gl::InternalError();
 }
 
-gl::Error SyncVk::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult)
+gl::Error SyncVk::clientWait(const gl::Context *context,
+                             GLbitfield flags,
+                             GLuint64 timeout,
+                             GLenum *outResult)
 {
     UNIMPLEMENTED();
     return gl::InternalError();
 }
 
-gl::Error SyncVk::serverWait(GLbitfield flags, GLuint64 timeout)
+gl::Error SyncVk::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout)
 {
     UNIMPLEMENTED();
     return gl::InternalError();
 }
 
-gl::Error SyncVk::getStatus(GLint *outResult)
+gl::Error SyncVk::getStatus(const gl::Context *context, GLint *outResult)
 {
     UNIMPLEMENTED();
     return gl::InternalError();
diff --git a/src/libANGLE/renderer/vulkan/SyncVk.h b/src/libANGLE/renderer/vulkan/SyncVk.h
index 316c3ad..519c9d8 100644
--- a/src/libANGLE/renderer/vulkan/SyncVk.h
+++ b/src/libANGLE/renderer/vulkan/SyncVk.h
@@ -14,19 +14,20 @@
 
 namespace rx
 {
-
 class SyncVk : public SyncImpl
 {
   public:
     SyncVk();
     ~SyncVk() override;
 
-    gl::Error set(GLenum condition, GLbitfield flags) override;
-    gl::Error clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult) override;
-    gl::Error serverWait(GLbitfield flags, GLuint64 timeout) override;
-    gl::Error getStatus(GLint *outResult) override;
+    gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
+    gl::Error clientWait(const gl::Context *context,
+                         GLbitfield flags,
+                         GLuint64 timeout,
+                         GLenum *outResult) override;
+    gl::Error serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override;
+    gl::Error getStatus(const gl::Context *context, GLint *outResult) override;
 };
-
 }  // namespace rx
 
 #endif  // LIBANGLE_RENDERER_VULKAN_FENCESYNCVK_H_