Commit b8eec4a4 by Jamie Madill Committed by Commit Bot

Use angle::Result in front-end (Part 7)

Refactors the gl::FenceNV and gl::Sync classes. Bug: angleproject:2491 Change-Id: I0fe73d1ccf5407f460e173a3061735b330a88511 Reviewed-on: https://chromium-review.googlesource.com/c/1289712Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent f4a789f9
...@@ -31,7 +31,7 @@ FenceNV::~FenceNV() ...@@ -31,7 +31,7 @@ FenceNV::~FenceNV()
SafeDelete(mFence); SafeDelete(mFence);
} }
Error FenceNV::set(const Context *context, GLenum condition) angle::Result FenceNV::set(const Context *context, GLenum condition)
{ {
ANGLE_TRY(mFence->set(context, condition)); ANGLE_TRY(mFence->set(context, condition));
...@@ -39,19 +39,19 @@ Error FenceNV::set(const Context *context, GLenum condition) ...@@ -39,19 +39,19 @@ Error FenceNV::set(const Context *context, GLenum condition)
mStatus = GL_FALSE; mStatus = GL_FALSE;
mIsSet = true; mIsSet = true;
return NoError(); return angle::Result::Continue();
} }
Error FenceNV::test(const Context *context, GLboolean *outResult) angle::Result FenceNV::test(const Context *context, GLboolean *outResult)
{ {
// Flush the command buffer by default // Flush the command buffer by default
ANGLE_TRY(mFence->test(context, &mStatus)); ANGLE_TRY(mFence->test(context, &mStatus));
*outResult = mStatus; *outResult = mStatus;
return NoError(); return angle::Result::Continue();
} }
Error FenceNV::finish(const Context *context) angle::Result FenceNV::finish(const Context *context)
{ {
ASSERT(mIsSet); ASSERT(mIsSet);
...@@ -59,7 +59,7 @@ Error FenceNV::finish(const Context *context) ...@@ -59,7 +59,7 @@ Error FenceNV::finish(const Context *context)
mStatus = GL_TRUE; mStatus = GL_TRUE;
return NoError(); return angle::Result::Continue();
} }
Sync::Sync(rx::SyncImpl *impl, GLuint id) Sync::Sync(rx::SyncImpl *impl, GLuint id)
...@@ -90,30 +90,30 @@ const std::string &Sync::getLabel() const ...@@ -90,30 +90,30 @@ const std::string &Sync::getLabel() const
return mLabel; return mLabel;
} }
Error Sync::set(const Context *context, GLenum condition, GLbitfield flags) angle::Result Sync::set(const Context *context, GLenum condition, GLbitfield flags)
{ {
ANGLE_TRY(mFence->set(context, condition, flags)); ANGLE_TRY(mFence->set(context, condition, flags));
mCondition = condition; mCondition = condition;
mFlags = flags; mFlags = flags;
return NoError(); return angle::Result::Continue();
} }
Error Sync::clientWait(const Context *context, angle::Result Sync::clientWait(const Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) GLenum *outResult)
{ {
ASSERT(mCondition != GL_NONE); ASSERT(mCondition != GL_NONE);
return mFence->clientWait(context, flags, timeout, outResult); return mFence->clientWait(context, flags, timeout, outResult);
} }
Error Sync::serverWait(const Context *context, GLbitfield flags, GLuint64 timeout) angle::Result Sync::serverWait(const Context *context, GLbitfield flags, GLuint64 timeout)
{ {
return mFence->serverWait(context, flags, timeout); return mFence->serverWait(context, flags, timeout);
} }
Error Sync::getStatus(const Context *context, GLint *outResult) const angle::Result Sync::getStatus(const Context *context, GLint *outResult) const
{ {
return mFence->getStatus(context, outResult); return mFence->getStatus(context, outResult);
} }
......
...@@ -31,9 +31,9 @@ class FenceNV final : angle::NonCopyable ...@@ -31,9 +31,9 @@ class FenceNV final : angle::NonCopyable
explicit FenceNV(rx::FenceNVImpl *impl); explicit FenceNV(rx::FenceNVImpl *impl);
virtual ~FenceNV(); virtual ~FenceNV();
Error set(const Context *context, GLenum condition); angle::Result set(const Context *context, GLenum condition);
Error test(const Context *context, GLboolean *outResult); angle::Result test(const Context *context, GLboolean *outResult);
Error finish(const Context *context); angle::Result finish(const Context *context);
bool isSet() const { return mIsSet; } bool isSet() const { return mIsSet; }
GLboolean getStatus() const { return mStatus; } GLboolean getStatus() const { return mStatus; }
...@@ -59,10 +59,13 @@ class Sync final : public RefCountObject, public LabeledObject ...@@ -59,10 +59,13 @@ class Sync final : public RefCountObject, public LabeledObject
void setLabel(const std::string &label) override; void setLabel(const std::string &label) override;
const std::string &getLabel() const override; const std::string &getLabel() const override;
Error set(const Context *context, GLenum condition, GLbitfield flags); angle::Result set(const Context *context, GLenum condition, GLbitfield flags);
Error clientWait(const Context *context, GLbitfield flags, GLuint64 timeout, GLenum *outResult); angle::Result clientWait(const Context *context,
Error serverWait(const Context *context, GLbitfield flags, GLuint64 timeout); GLbitfield flags,
Error getStatus(const Context *context, GLint *outResult) const; GLuint64 timeout,
GLenum *outResult);
angle::Result serverWait(const Context *context, GLbitfield flags, GLuint64 timeout);
angle::Result getStatus(const Context *context, GLint *outResult) const;
GLenum getCondition() const { return mCondition; } GLenum getCondition() const { return mCondition; }
GLbitfield getFlags() const { return mFlags; } GLbitfield getFlags() const { return mFlags; }
......
...@@ -25,9 +25,9 @@ class MockFenceNVImpl : public rx::FenceNVImpl ...@@ -25,9 +25,9 @@ class MockFenceNVImpl : public rx::FenceNVImpl
public: public:
virtual ~MockFenceNVImpl() { destroy(); } virtual ~MockFenceNVImpl() { destroy(); }
MOCK_METHOD2(set, gl::Error(const gl::Context *, GLenum)); MOCK_METHOD2(set, angle::Result(const gl::Context *, GLenum));
MOCK_METHOD2(test, gl::Error(const gl::Context *, GLboolean *)); MOCK_METHOD2(test, angle::Result(const gl::Context *, GLboolean *));
MOCK_METHOD1(finish, gl::Error(const gl::Context *)); MOCK_METHOD1(finish, angle::Result(const gl::Context *));
MOCK_METHOD0(destroy, void()); MOCK_METHOD0(destroy, void());
}; };
...@@ -67,14 +67,16 @@ TEST_F(FenceNVTest, DestructionDeletesImpl) ...@@ -67,14 +67,16 @@ TEST_F(FenceNVTest, DestructionDeletesImpl)
TEST_F(FenceNVTest, SetAndTestBehavior) TEST_F(FenceNVTest, SetAndTestBehavior)
{ {
EXPECT_CALL(*mImpl, set(_, _)).WillOnce(Return(gl::NoError())).RetiresOnSaturation(); EXPECT_CALL(*mImpl, set(_, _))
.WillOnce(Return(angle::Result::Continue()))
.RetiresOnSaturation();
EXPECT_FALSE(mFence->isSet()); EXPECT_FALSE(mFence->isSet());
EXPECT_FALSE(mFence->set(nullptr, GL_ALL_COMPLETED_NV).isError()); EXPECT_FALSE(mFence->set(nullptr, GL_ALL_COMPLETED_NV).isError());
EXPECT_TRUE(mFence->isSet()); EXPECT_TRUE(mFence->isSet());
// Fake the behavior of testing the fence before and after it's passed. // Fake the behavior of testing the fence before and after it's passed.
EXPECT_CALL(*mImpl, test(_, _)) EXPECT_CALL(*mImpl, test(_, _))
.WillOnce(DoAll(SetArgumentPointee<1>(GL_FALSE), Return(gl::NoError()))) .WillOnce(DoAll(SetArgumentPointee<1>(GL_FALSE), Return(angle::Result::Continue())))
.WillOnce(DoAll(SetArgumentPointee<1>(GL_TRUE), Return(gl::NoError()))) .WillOnce(DoAll(SetArgumentPointee<1>(GL_TRUE), Return(angle::Result::Continue())))
.RetiresOnSaturation(); .RetiresOnSaturation();
GLboolean out; GLboolean out;
EXPECT_FALSE(mFence->test(nullptr, &out).isError()); EXPECT_FALSE(mFence->test(nullptr, &out).isError());
...@@ -92,10 +94,10 @@ class MockSyncImpl : public rx::SyncImpl ...@@ -92,10 +94,10 @@ class MockSyncImpl : public rx::SyncImpl
public: public:
virtual ~MockSyncImpl() { destroy(); } virtual ~MockSyncImpl() { destroy(); }
MOCK_METHOD3(set, gl::Error(const gl::Context *, GLenum, GLbitfield)); MOCK_METHOD3(set, angle::Result(const gl::Context *, GLenum, GLbitfield));
MOCK_METHOD4(clientWait, gl::Error(const gl::Context *, GLbitfield, GLuint64, GLenum *)); MOCK_METHOD4(clientWait, angle::Result(const gl::Context *, GLbitfield, GLuint64, GLenum *));
MOCK_METHOD3(serverWait, gl::Error(const gl::Context *, GLbitfield, GLuint64)); MOCK_METHOD3(serverWait, angle::Result(const gl::Context *, GLbitfield, GLuint64));
MOCK_METHOD2(getStatus, gl::Error(const gl::Context *, GLint *)); MOCK_METHOD2(getStatus, angle::Result(const gl::Context *, GLint *));
MOCK_METHOD0(destroy, void()); MOCK_METHOD0(destroy, void());
}; };
...@@ -134,13 +136,15 @@ TEST_F(FenceSyncTest, DestructionDeletesImpl) ...@@ -134,13 +136,15 @@ TEST_F(FenceSyncTest, DestructionDeletesImpl)
TEST_F(FenceSyncTest, SetAndGetStatusBehavior) TEST_F(FenceSyncTest, SetAndGetStatusBehavior)
{ {
EXPECT_CALL(*mImpl, set(_, _, _)).WillOnce(Return(gl::NoError())).RetiresOnSaturation(); EXPECT_CALL(*mImpl, set(_, _, _))
.WillOnce(Return(angle::Result::Continue()))
.RetiresOnSaturation();
EXPECT_FALSE(mFence->set(nullptr, GL_SYNC_GPU_COMMANDS_COMPLETE, 0).isError()); EXPECT_FALSE(mFence->set(nullptr, GL_SYNC_GPU_COMMANDS_COMPLETE, 0).isError());
EXPECT_EQ(static_cast<GLenum>(GL_SYNC_GPU_COMMANDS_COMPLETE), mFence->getCondition()); 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. // Fake the behavior of testing the fence before and after it's passed.
EXPECT_CALL(*mImpl, getStatus(_, _)) EXPECT_CALL(*mImpl, getStatus(_, _))
.WillOnce(DoAll(SetArgumentPointee<1>(GL_UNSIGNALED), Return(gl::NoError()))) .WillOnce(DoAll(SetArgumentPointee<1>(GL_UNSIGNALED), Return(angle::Result::Continue())))
.WillOnce(DoAll(SetArgumentPointee<1>(GL_SIGNALED), Return(gl::NoError()))) .WillOnce(DoAll(SetArgumentPointee<1>(GL_SIGNALED), Return(angle::Result::Continue())))
.RetiresOnSaturation(); .RetiresOnSaturation();
GLint out; GLint out;
EXPECT_FALSE(mFence->getStatus(nullptr, &out).isError()); EXPECT_FALSE(mFence->getStatus(nullptr, &out).isError());
......
...@@ -28,9 +28,9 @@ class FenceNVImpl : angle::NonCopyable ...@@ -28,9 +28,9 @@ class FenceNVImpl : angle::NonCopyable
FenceNVImpl() { }; FenceNVImpl() { };
virtual ~FenceNVImpl() { }; virtual ~FenceNVImpl() { };
virtual gl::Error set(const gl::Context *context, GLenum condition) = 0; virtual angle::Result set(const gl::Context *context, GLenum condition) = 0;
virtual gl::Error test(const gl::Context *context, GLboolean *outFinished) = 0; virtual angle::Result test(const gl::Context *context, GLboolean *outFinished) = 0;
virtual gl::Error finish(const gl::Context *context) = 0; virtual angle::Result finish(const gl::Context *context) = 0;
}; };
} // namespace rx } // namespace rx
......
...@@ -28,15 +28,15 @@ class SyncImpl : angle::NonCopyable ...@@ -28,15 +28,15 @@ class SyncImpl : angle::NonCopyable
SyncImpl(){}; SyncImpl(){};
virtual ~SyncImpl(){}; virtual ~SyncImpl(){};
virtual gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) = 0; virtual angle::Result set(const gl::Context *context, GLenum condition, GLbitfield flags) = 0;
virtual gl::Error clientWait(const gl::Context *context, virtual angle::Result clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) = 0; GLenum *outResult) = 0;
virtual gl::Error serverWait(const gl::Context *context, virtual angle::Result serverWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout) = 0; GLuint64 timeout) = 0;
virtual gl::Error getStatus(const gl::Context *context, GLint *outResult) = 0; virtual angle::Result getStatus(const gl::Context *context, GLint *outResult) = 0;
}; };
} // namespace rx } // namespace rx
......
...@@ -72,17 +72,17 @@ FenceNV11::~FenceNV11() ...@@ -72,17 +72,17 @@ FenceNV11::~FenceNV11()
SafeRelease(mQuery); SafeRelease(mQuery);
} }
gl::Error FenceNV11::set(const gl::Context *context, GLenum condition) angle::Result FenceNV11::set(const gl::Context *context, GLenum condition)
{ {
return FenceSetHelper(context, this); return FenceSetHelper(context, this);
} }
gl::Error FenceNV11::test(const gl::Context *context, GLboolean *outFinished) angle::Result FenceNV11::test(const gl::Context *context, GLboolean *outFinished)
{ {
return FenceTestHelper(context, this, true, outFinished); return FenceTestHelper(context, this, true, outFinished);
} }
gl::Error FenceNV11::finish(const gl::Context *context) angle::Result FenceNV11::finish(const gl::Context *context)
{ {
GLboolean finished = GL_FALSE; GLboolean finished = GL_FALSE;
...@@ -95,13 +95,14 @@ gl::Error FenceNV11::finish(const gl::Context *context) ...@@ -95,13 +95,14 @@ gl::Error FenceNV11::finish(const gl::Context *context)
bool checkDeviceLost = (loopCount % kPollingD3DDeviceLostCheckFrequency) == 0; bool checkDeviceLost = (loopCount % kPollingD3DDeviceLostCheckFrequency) == 0;
if (checkDeviceLost && mRenderer->testDeviceLost()) if (checkDeviceLost && mRenderer->testDeviceLost())
{ {
return gl::OutOfMemory() << "Device was lost while querying result of an event query."; ANGLE_TRY_HR(GetImplAs<Context11>(context), DXGI_ERROR_DRIVER_INTERNAL_ERROR,
"Device was lost while querying result of an event query.");
} }
ScheduleYield(); ScheduleYield();
} }
return gl::NoError(); return angle::Result::Continue();
} }
// //
...@@ -133,39 +134,36 @@ Sync11::~Sync11() ...@@ -133,39 +134,36 @@ Sync11::~Sync11()
SafeRelease(mQuery); SafeRelease(mQuery);
} }
gl::Error Sync11::set(const gl::Context *context, GLenum condition, GLbitfield flags) angle::Result Sync11::set(const gl::Context *context, GLenum condition, GLbitfield flags)
{ {
ASSERT(condition == GL_SYNC_GPU_COMMANDS_COMPLETE && flags == 0); ASSERT(condition == GL_SYNC_GPU_COMMANDS_COMPLETE && flags == 0);
return FenceSetHelper(context, this); return FenceSetHelper(context, this);
} }
gl::Error Sync11::clientWait(const gl::Context *context, angle::Result Sync11::clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) GLenum *outResult)
{ {
ASSERT(outResult); ASSERT(outResult);
bool flushCommandBuffer = ((flags & GL_SYNC_FLUSH_COMMANDS_BIT) != 0); bool flushCommandBuffer = ((flags & GL_SYNC_FLUSH_COMMANDS_BIT) != 0);
*outResult = GL_WAIT_FAILED;
GLboolean result = GL_FALSE; GLboolean result = GL_FALSE;
gl::Error error = FenceTestHelper(context, this, flushCommandBuffer, &result); ANGLE_TRY(FenceTestHelper(context, this, flushCommandBuffer, &result));
if (error.isError())
{
*outResult = GL_WAIT_FAILED;
return error;
}
if (result == GL_TRUE) if (result == GL_TRUE)
{ {
*outResult = GL_ALREADY_SIGNALED; *outResult = GL_ALREADY_SIGNALED;
return gl::NoError(); return angle::Result::Continue();
} }
if (timeout == 0) if (timeout == 0)
{ {
*outResult = GL_TIMEOUT_EXPIRED; *outResult = GL_TIMEOUT_EXPIRED;
return gl::NoError(); return angle::Result::Continue();
} }
LARGE_INTEGER currentCounter = {}; LARGE_INTEGER currentCounter = {};
...@@ -189,18 +187,16 @@ gl::Error Sync11::clientWait(const gl::Context *context, ...@@ -189,18 +187,16 @@ gl::Error Sync11::clientWait(const gl::Context *context,
success = QueryPerformanceCounter(&currentCounter); success = QueryPerformanceCounter(&currentCounter);
ASSERT(success); ASSERT(success);
error = FenceTestHelper(context, this, flushCommandBuffer, &result); *outResult = GL_WAIT_FAILED;
if (error.isError())
{ ANGLE_TRY(FenceTestHelper(context, this, flushCommandBuffer, &result));
*outResult = GL_WAIT_FAILED;
return error;
}
bool checkDeviceLost = (loopCount % kPollingD3DDeviceLostCheckFrequency) == 0; bool checkDeviceLost = (loopCount % kPollingD3DDeviceLostCheckFrequency) == 0;
if (checkDeviceLost && mRenderer->testDeviceLost()) if (checkDeviceLost && mRenderer->testDeviceLost())
{ {
*outResult = GL_WAIT_FAILED; *outResult = GL_WAIT_FAILED;
return gl::OutOfMemory() << "Device was lost while querying result of an event query."; ANGLE_TRY_HR(GetImplAs<Context11>(context), DXGI_ERROR_DRIVER_INTERNAL_ERROR,
"Device was lost while querying result of an event query.");
} }
} }
...@@ -213,32 +209,28 @@ gl::Error Sync11::clientWait(const gl::Context *context, ...@@ -213,32 +209,28 @@ gl::Error Sync11::clientWait(const gl::Context *context,
*outResult = GL_CONDITION_SATISFIED; *outResult = GL_CONDITION_SATISFIED;
} }
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error Sync11::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) angle::Result 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 // 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 // extra work for a server-side fence. GPU commands issued after the fence is created will
// always be processed after the fence is signaled. // always be processed after the fence is signaled.
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error Sync11::getStatus(const gl::Context *context, GLint *outResult) angle::Result Sync11::getStatus(const gl::Context *context, GLint *outResult)
{ {
GLboolean result = GL_FALSE; GLboolean result = GL_FALSE;
angle::Result error = FenceTestHelper(context, this, false, &result);
if (error == angle::Result::Stop())
{
// The spec does not specify any way to report errors during the status test (e.g. device
// lost) so we report the fence is unblocked in case of error or signaled.
*outResult = GL_SIGNALED;
return error; // The spec does not specify any way to report errors during the status test (e.g. device
} // lost) so we report the fence is unblocked in case of error or signaled.
*outResult = GL_SIGNALED;
ANGLE_TRY(FenceTestHelper(context, this, false, &result));
*outResult = (result ? GL_SIGNALED : GL_UNSIGNALED); *outResult = (result ? GL_SIGNALED : GL_UNSIGNALED);
return gl::NoError(); return angle::Result::Continue();
} }
} // namespace rx } // namespace rx
...@@ -23,9 +23,9 @@ class FenceNV11 : public FenceNVImpl ...@@ -23,9 +23,9 @@ class FenceNV11 : public FenceNVImpl
explicit FenceNV11(Renderer11 *renderer); explicit FenceNV11(Renderer11 *renderer);
~FenceNV11() override; ~FenceNV11() override;
gl::Error set(const gl::Context *context, GLenum condition) override; angle::Result set(const gl::Context *context, GLenum condition) override;
gl::Error test(const gl::Context *context, GLboolean *outFinished) override; angle::Result test(const gl::Context *context, GLboolean *outFinished) override;
gl::Error finish(const gl::Context *context) override; angle::Result finish(const gl::Context *context) override;
private: private:
template <class T> template <class T>
...@@ -46,13 +46,15 @@ class Sync11 : public SyncImpl ...@@ -46,13 +46,15 @@ class Sync11 : public SyncImpl
explicit Sync11(Renderer11 *renderer); explicit Sync11(Renderer11 *renderer);
~Sync11() override; ~Sync11() override;
gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) override; angle::Result set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
gl::Error clientWait(const gl::Context *context, angle::Result clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) override; GLenum *outResult) override;
gl::Error serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override; angle::Result serverWait(const gl::Context *context,
gl::Error getStatus(const gl::Context *context, GLint *outResult) override; GLbitfield flags,
GLuint64 timeout) override;
angle::Result getStatus(const gl::Context *context, GLint *outResult) override;
private: private:
template <class T> template <class T>
......
...@@ -25,7 +25,7 @@ FenceNV9::~FenceNV9() ...@@ -25,7 +25,7 @@ FenceNV9::~FenceNV9()
SafeRelease(mQuery); SafeRelease(mQuery);
} }
gl::Error FenceNV9::set(const gl::Context *context, GLenum condition) angle::Result FenceNV9::set(const gl::Context *context, GLenum condition)
{ {
if (!mQuery) if (!mQuery)
{ {
...@@ -35,20 +35,18 @@ gl::Error FenceNV9::set(const gl::Context *context, GLenum condition) ...@@ -35,20 +35,18 @@ gl::Error FenceNV9::set(const gl::Context *context, GLenum condition)
HRESULT result = mQuery->Issue(D3DISSUE_END); HRESULT result = mQuery->Issue(D3DISSUE_END);
if (FAILED(result)) if (FAILED(result))
{ {
ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
SafeRelease(mQuery); SafeRelease(mQuery);
return gl::OutOfMemory() << "Failed to end event query, " << gl::FmtHR(result);
} }
ANGLE_TRY_HR(GetImplAs<Context9>(context), result, "Failed to end event query");
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error FenceNV9::test(const gl::Context *context, GLboolean *outFinished) angle::Result FenceNV9::test(const gl::Context *context, GLboolean *outFinished)
{ {
return testHelper(GetImplAs<Context9>(context), true, outFinished); return testHelper(GetImplAs<Context9>(context), true, outFinished);
} }
gl::Error FenceNV9::finish(const gl::Context *context) angle::Result FenceNV9::finish(const gl::Context *context)
{ {
GLboolean finished = GL_FALSE; GLboolean finished = GL_FALSE;
while (finished != GL_TRUE) while (finished != GL_TRUE)
...@@ -57,7 +55,7 @@ gl::Error FenceNV9::finish(const gl::Context *context) ...@@ -57,7 +55,7 @@ gl::Error FenceNV9::finish(const gl::Context *context)
Sleep(0); Sleep(0);
} }
return gl::NoError(); return angle::Result::Continue();
} }
angle::Result FenceNV9::testHelper(Context9 *context9, angle::Result FenceNV9::testHelper(Context9 *context9,
......
...@@ -23,9 +23,9 @@ class FenceNV9 : public FenceNVImpl ...@@ -23,9 +23,9 @@ class FenceNV9 : public FenceNVImpl
explicit FenceNV9(Renderer9 *renderer); explicit FenceNV9(Renderer9 *renderer);
~FenceNV9() override; ~FenceNV9() override;
gl::Error set(const gl::Context *context, GLenum condition) override; angle::Result set(const gl::Context *context, GLenum condition) override;
gl::Error test(const gl::Context *context, GLboolean *outFinished) override; angle::Result test(const gl::Context *context, GLboolean *outFinished) override;
gl::Error finish(const gl::Context *context) override; angle::Result finish(const gl::Context *context) override;
private: private:
angle::Result testHelper(Context9 *context9, bool flushCommandBuffer, GLboolean *outFinished); angle::Result testHelper(Context9 *context9, bool flushCommandBuffer, GLboolean *outFinished);
......
...@@ -28,24 +28,24 @@ FenceNVGL::~FenceNVGL() ...@@ -28,24 +28,24 @@ FenceNVGL::~FenceNVGL()
mFence = 0; mFence = 0;
} }
gl::Error FenceNVGL::set(const gl::Context *context, GLenum condition) angle::Result FenceNVGL::set(const gl::Context *context, GLenum condition)
{ {
ASSERT(condition == GL_ALL_COMPLETED_NV); ASSERT(condition == GL_ALL_COMPLETED_NV);
mFunctions->setFenceNV(mFence, condition); mFunctions->setFenceNV(mFence, condition);
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error FenceNVGL::test(const gl::Context *context, GLboolean *outFinished) angle::Result FenceNVGL::test(const gl::Context *context, GLboolean *outFinished)
{ {
ASSERT(outFinished); ASSERT(outFinished);
*outFinished = mFunctions->testFenceNV(mFence); *outFinished = mFunctions->testFenceNV(mFence);
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error FenceNVGL::finish(const gl::Context *context) angle::Result FenceNVGL::finish(const gl::Context *context)
{ {
mFunctions->finishFenceNV(mFence); mFunctions->finishFenceNV(mFence);
return gl::NoError(); return angle::Result::Continue();
} }
} }
...@@ -21,9 +21,9 @@ class FenceNVGL : public FenceNVImpl ...@@ -21,9 +21,9 @@ class FenceNVGL : public FenceNVImpl
explicit FenceNVGL(const FunctionsGL *functions); explicit FenceNVGL(const FunctionsGL *functions);
~FenceNVGL() override; ~FenceNVGL() override;
gl::Error set(const gl::Context *context, GLenum condition) override; angle::Result set(const gl::Context *context, GLenum condition) override;
gl::Error test(const gl::Context *context, GLboolean *outFinished) override; angle::Result test(const gl::Context *context, GLboolean *outFinished) override;
gl::Error finish(const gl::Context *context) override; angle::Result finish(const gl::Context *context) override;
private: private:
GLuint mFence; GLuint mFence;
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include "libANGLE/renderer/gl/SyncGL.h" #include "libANGLE/renderer/gl/SyncGL.h"
#include "common/debug.h" #include "common/debug.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/gl/ContextGL.h"
#include "libANGLE/renderer/gl/FunctionsGL.h" #include "libANGLE/renderer/gl/FunctionsGL.h"
namespace rx namespace rx
...@@ -27,40 +29,36 @@ SyncGL::~SyncGL() ...@@ -27,40 +29,36 @@ SyncGL::~SyncGL()
} }
} }
gl::Error SyncGL::set(const gl::Context *context, GLenum condition, GLbitfield flags) angle::Result SyncGL::set(const gl::Context *context, GLenum condition, GLbitfield flags)
{ {
ASSERT(condition == GL_SYNC_GPU_COMMANDS_COMPLETE && flags == 0); ASSERT(condition == GL_SYNC_GPU_COMMANDS_COMPLETE && flags == 0);
mSyncObject = mFunctions->fenceSync(condition, flags); mSyncObject = mFunctions->fenceSync(condition, flags);
if (mSyncObject == 0) ANGLE_CHECK(GetImplAs<ContextGL>(context), mSyncObject != 0,
{ "glFenceSync failed to create a GLsync object.", GL_OUT_OF_MEMORY);
// if glFenceSync fails, it returns 0. return angle::Result::Continue();
return gl::OutOfMemory() << "glFenceSync failed to create a GLsync object.";
}
return gl::NoError();
} }
gl::Error SyncGL::clientWait(const gl::Context *context, angle::Result SyncGL::clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) GLenum *outResult)
{ {
ASSERT(mSyncObject != 0); ASSERT(mSyncObject != 0);
*outResult = mFunctions->clientWaitSync(mSyncObject, flags, timeout); *outResult = mFunctions->clientWaitSync(mSyncObject, flags, timeout);
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error SyncGL::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) angle::Result SyncGL::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout)
{ {
ASSERT(mSyncObject != 0); ASSERT(mSyncObject != 0);
mFunctions->waitSync(mSyncObject, flags, timeout); mFunctions->waitSync(mSyncObject, flags, timeout);
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error SyncGL::getStatus(const gl::Context *context, GLint *outResult) angle::Result SyncGL::getStatus(const gl::Context *context, GLint *outResult)
{ {
ASSERT(mSyncObject != 0); ASSERT(mSyncObject != 0);
mFunctions->getSynciv(mSyncObject, GL_SYNC_STATUS, 1, nullptr, outResult); mFunctions->getSynciv(mSyncObject, GL_SYNC_STATUS, 1, nullptr, outResult);
return gl::NoError(); return angle::Result::Continue();
} }
} }
...@@ -21,13 +21,15 @@ class SyncGL : public SyncImpl ...@@ -21,13 +21,15 @@ class SyncGL : public SyncImpl
explicit SyncGL(const FunctionsGL *functions); explicit SyncGL(const FunctionsGL *functions);
~SyncGL() override; ~SyncGL() override;
gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) override; angle::Result set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
gl::Error clientWait(const gl::Context *context, angle::Result clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) override; GLenum *outResult) override;
gl::Error serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override; angle::Result serverWait(const gl::Context *context,
gl::Error getStatus(const gl::Context *context, GLint *outResult) override; GLbitfield flags,
GLuint64 timeout) override;
angle::Result getStatus(const gl::Context *context, GLint *outResult) override;
private: private:
const FunctionsGL *mFunctions; const FunctionsGL *mFunctions;
......
...@@ -22,20 +22,20 @@ FenceNVNULL::~FenceNVNULL() ...@@ -22,20 +22,20 @@ FenceNVNULL::~FenceNVNULL()
{ {
} }
gl::Error FenceNVNULL::set(const gl::Context *context, GLenum condition) angle::Result FenceNVNULL::set(const gl::Context *context, GLenum condition)
{ {
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error FenceNVNULL::test(const gl::Context *context, GLboolean *outFinished) angle::Result FenceNVNULL::test(const gl::Context *context, GLboolean *outFinished)
{ {
*outFinished = GL_TRUE; *outFinished = GL_TRUE;
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error FenceNVNULL::finish(const gl::Context *context) angle::Result FenceNVNULL::finish(const gl::Context *context)
{ {
return gl::NoError(); return angle::Result::Continue();
} }
} // namespace rx } // namespace rx
...@@ -20,9 +20,9 @@ class FenceNVNULL : public FenceNVImpl ...@@ -20,9 +20,9 @@ class FenceNVNULL : public FenceNVImpl
FenceNVNULL(); FenceNVNULL();
~FenceNVNULL() override; ~FenceNVNULL() override;
gl::Error set(const gl::Context *context, GLenum condition) override; angle::Result set(const gl::Context *context, GLenum condition) override;
gl::Error test(const gl::Context *context, GLboolean *outFinished) override; angle::Result test(const gl::Context *context, GLboolean *outFinished) override;
gl::Error finish(const gl::Context *context) override; angle::Result finish(const gl::Context *context) override;
}; };
} // namespace rx } // namespace rx
......
...@@ -22,29 +22,29 @@ SyncNULL::~SyncNULL() ...@@ -22,29 +22,29 @@ SyncNULL::~SyncNULL()
{ {
} }
gl::Error SyncNULL::set(const gl::Context *context, GLenum condition, GLbitfield flags) angle::Result SyncNULL::set(const gl::Context *context, GLenum condition, GLbitfield flags)
{ {
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error SyncNULL::clientWait(const gl::Context *context, angle::Result SyncNULL::clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) GLenum *outResult)
{ {
*outResult = GL_ALREADY_SIGNALED; *outResult = GL_ALREADY_SIGNALED;
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error SyncNULL::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) angle::Result SyncNULL::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout)
{ {
return gl::NoError(); return angle::Result::Continue();
} }
gl::Error SyncNULL::getStatus(const gl::Context *context, GLint *outResult) angle::Result SyncNULL::getStatus(const gl::Context *context, GLint *outResult)
{ {
*outResult = GL_SIGNALED; *outResult = GL_SIGNALED;
return gl::NoError(); return angle::Result::Continue();
} }
} // namespace rx } // namespace rx
...@@ -20,13 +20,15 @@ class SyncNULL : public SyncImpl ...@@ -20,13 +20,15 @@ class SyncNULL : public SyncImpl
SyncNULL(); SyncNULL();
~SyncNULL() override; ~SyncNULL() override;
gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) override; angle::Result set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
gl::Error clientWait(const gl::Context *context, angle::Result clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) override; GLenum *outResult) override;
gl::Error serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override; angle::Result serverWait(const gl::Context *context,
gl::Error getStatus(const gl::Context *context, GLint *outResult) override; GLbitfield flags,
GLuint64 timeout) override;
angle::Result getStatus(const gl::Context *context, GLint *outResult) override;
}; };
} // namespace rx } // namespace rx
......
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
#include "libANGLE/renderer/vulkan/FenceNVVk.h" #include "libANGLE/renderer/vulkan/FenceNVVk.h"
#include "common/debug.h" #include "common/debug.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/vulkan/ContextVk.h"
#include "libANGLE/renderer/vulkan/vk_utils.h"
namespace rx namespace rx
{ {
...@@ -22,22 +25,22 @@ FenceNVVk::~FenceNVVk() ...@@ -22,22 +25,22 @@ FenceNVVk::~FenceNVVk()
{ {
} }
gl::Error FenceNVVk::set(const gl::Context *context, GLenum condition) angle::Result FenceNVVk::set(const gl::Context *context, GLenum condition)
{ {
UNIMPLEMENTED(); ANGLE_VK_UNREACHABLE(vk::GetImpl(context));
return gl::InternalError(); return angle::Result::Stop();
} }
gl::Error FenceNVVk::test(const gl::Context *context, GLboolean *outFinished) angle::Result FenceNVVk::test(const gl::Context *context, GLboolean *outFinished)
{ {
UNIMPLEMENTED(); ANGLE_VK_UNREACHABLE(vk::GetImpl(context));
return gl::InternalError(); return angle::Result::Stop();
} }
gl::Error FenceNVVk::finish(const gl::Context *context) angle::Result FenceNVVk::finish(const gl::Context *context)
{ {
UNIMPLEMENTED(); ANGLE_VK_UNREACHABLE(vk::GetImpl(context));
return gl::InternalError(); return angle::Result::Stop();
} }
} // namespace rx } // namespace rx
...@@ -20,9 +20,9 @@ class FenceNVVk : public FenceNVImpl ...@@ -20,9 +20,9 @@ class FenceNVVk : public FenceNVImpl
FenceNVVk(); FenceNVVk();
~FenceNVVk() override; ~FenceNVVk() override;
gl::Error set(const gl::Context *context, GLenum condition) override; angle::Result set(const gl::Context *context, GLenum condition) override;
gl::Error test(const gl::Context *context, GLboolean *outFinished) override; angle::Result test(const gl::Context *context, GLboolean *outFinished) override;
gl::Error finish(const gl::Context *context) override; angle::Result finish(const gl::Context *context) override;
}; };
} // namespace rx } // namespace rx
......
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
#include "libANGLE/renderer/vulkan/SyncVk.h" #include "libANGLE/renderer/vulkan/SyncVk.h"
#include "common/debug.h" #include "common/debug.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/vulkan/ContextVk.h"
#include "libANGLE/renderer/vulkan/vk_utils.h"
namespace rx namespace rx
{ {
...@@ -22,31 +25,31 @@ SyncVk::~SyncVk() ...@@ -22,31 +25,31 @@ SyncVk::~SyncVk()
{ {
} }
gl::Error SyncVk::set(const gl::Context *context, GLenum condition, GLbitfield flags) angle::Result SyncVk::set(const gl::Context *context, GLenum condition, GLbitfield flags)
{ {
UNIMPLEMENTED(); ANGLE_VK_UNREACHABLE(vk::GetImpl(context));
return gl::InternalError(); return angle::Result::Stop();
} }
gl::Error SyncVk::clientWait(const gl::Context *context, angle::Result SyncVk::clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) GLenum *outResult)
{ {
UNIMPLEMENTED(); ANGLE_VK_UNREACHABLE(vk::GetImpl(context));
return gl::InternalError(); return angle::Result::Stop();
} }
gl::Error SyncVk::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) angle::Result SyncVk::serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout)
{ {
UNIMPLEMENTED(); ANGLE_VK_UNREACHABLE(vk::GetImpl(context));
return gl::InternalError(); return angle::Result::Stop();
} }
gl::Error SyncVk::getStatus(const gl::Context *context, GLint *outResult) angle::Result SyncVk::getStatus(const gl::Context *context, GLint *outResult)
{ {
UNIMPLEMENTED(); ANGLE_VK_UNREACHABLE(vk::GetImpl(context));
return gl::InternalError(); return angle::Result::Stop();
} }
} // namespace rx } // namespace rx
...@@ -20,13 +20,15 @@ class SyncVk : public SyncImpl ...@@ -20,13 +20,15 @@ class SyncVk : public SyncImpl
SyncVk(); SyncVk();
~SyncVk() override; ~SyncVk() override;
gl::Error set(const gl::Context *context, GLenum condition, GLbitfield flags) override; angle::Result set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
gl::Error clientWait(const gl::Context *context, angle::Result clientWait(const gl::Context *context,
GLbitfield flags, GLbitfield flags,
GLuint64 timeout, GLuint64 timeout,
GLenum *outResult) override; GLenum *outResult) override;
gl::Error serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override; angle::Result serverWait(const gl::Context *context,
gl::Error getStatus(const gl::Context *context, GLint *outResult) override; GLbitfield flags,
GLuint64 timeout) override;
angle::Result getStatus(const gl::Context *context, GLint *outResult) override;
}; };
} // namespace rx } // namespace rx
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment