Commit 62934322 by Geoff Lang Committed by Commit Bot

Make egl::Sync a LabeledObject.

This allows us to return the Sync's label when validation fails for a Sync related entry point. BUG=angleproject:3643 Change-Id: I64e8a8855a2e3b51768c2b560fdc4696bb325351 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1687120 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
parent ecaebd0f
...@@ -18,7 +18,9 @@ namespace egl ...@@ -18,7 +18,9 @@ namespace egl
{ {
Sync::Sync(rx::EGLImplFactory *factory, EGLenum type, const AttributeMap &attribs) Sync::Sync(rx::EGLImplFactory *factory, EGLenum type, const AttributeMap &attribs)
: mFence(factory->createSync(attribs)), mType(type) : mFence(factory->createSync(attribs)),
mLabel(nullptr),
mType(type)
{} {}
void Sync::onDestroy(const Display *display) void Sync::onDestroy(const Display *display)
...@@ -35,6 +37,16 @@ Error Sync::initialize(const Display *display, const gl::Context *context) ...@@ -35,6 +37,16 @@ Error Sync::initialize(const Display *display, const gl::Context *context)
return mFence->initialize(display, context, mType); return mFence->initialize(display, context, mType);
} }
void Sync::setLabel(EGLLabelKHR label)
{
mLabel = label;
}
EGLLabelKHR Sync::getLabel() const
{
return mLabel;
}
Error Sync::clientWait(const Display *display, Error Sync::clientWait(const Display *display,
const gl::Context *context, const gl::Context *context,
EGLint flags, EGLint flags,
......
...@@ -29,12 +29,15 @@ class Context; ...@@ -29,12 +29,15 @@ class Context;
namespace egl namespace egl
{ {
class Sync final : public angle::RefCountObject<Display, angle::Result> class Sync final : public angle::RefCountObject<Display, angle::Result>, public LabeledObject
{ {
public: public:
Sync(rx::EGLImplFactory *factory, EGLenum type, const AttributeMap &attribs); Sync(rx::EGLImplFactory *factory, EGLenum type, const AttributeMap &attribs);
~Sync() override; ~Sync() override;
void setLabel(EGLLabelKHR label) override;
EGLLabelKHR getLabel() const override;
void onDestroy(const Display *display) override; void onDestroy(const Display *display) override;
Error initialize(const Display *display, const gl::Context *context); Error initialize(const Display *display, const gl::Context *context);
...@@ -52,6 +55,8 @@ class Sync final : public angle::RefCountObject<Display, angle::Result> ...@@ -52,6 +55,8 @@ class Sync final : public angle::RefCountObject<Display, angle::Result>
private: private:
std::unique_ptr<rx::EGLSyncImpl> mFence; std::unique_ptr<rx::EGLSyncImpl> mFence;
EGLLabelKHR mLabel;
EGLenum mType; EGLenum mType;
static constexpr EGLint mCondition = EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR; static constexpr EGLint mCondition = EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR;
}; };
......
...@@ -700,11 +700,9 @@ Error ValidateLabeledObject(Thread *thread, ...@@ -700,11 +700,9 @@ Error ValidateLabeledObject(Thread *thread,
case ObjectType::Sync: case ObjectType::Sync:
{ {
ANGLE_TRY(ValidateDisplay(display)); Sync *sync = static_cast<Sync *>(object);
// TODO(geofflang): Implement sync objects. http://anglebug.com/2466 ANGLE_TRY(ValidateSync(display, sync));
UNIMPLEMENTED(); *outLabeledObject = sync;
return EglBadDisplay() << "Sync objects are unimplemented.";
break; break;
} }
......
...@@ -43,7 +43,7 @@ Error ValidateConfig(const Display *display, const Config *config); ...@@ -43,7 +43,7 @@ Error ValidateConfig(const Display *display, const Config *config);
Error ValidateContext(const Display *display, const gl::Context *context); Error ValidateContext(const Display *display, const gl::Context *context);
Error ValidateImage(const Display *display, const Image *image); Error ValidateImage(const Display *display, const Image *image);
Error ValidateDevice(const Device *device); Error ValidateDevice(const Device *device);
Error ValidateSync(const Device *device, const Sync *sync); Error ValidateSync(const Display *display, const Sync *sync);
// Return the requested object only if it is valid (otherwise nullptr) // Return the requested object only if it is valid (otherwise nullptr)
const Thread *GetThreadIfValid(const Thread *thread); const Thread *GetThreadIfValid(const Thread *thread);
......
...@@ -881,13 +881,13 @@ EGLint EGLAPIENTRY EGL_ClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags ...@@ -881,13 +881,13 @@ EGLint EGLAPIENTRY EGL_ClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateClientWaitSync(display, syncObject, flags, timeout), ANGLE_EGL_TRY_RETURN(thread, ValidateClientWaitSync(display, syncObject, flags, timeout),
"eglClientWaitSync", GetDisplayIfValid(display), EGL_FALSE); "eglClientWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
EGLint syncStatus = EGL_FALSE; EGLint syncStatus = EGL_FALSE;
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_TRY_RETURN(
thread, syncObject->clientWait(display, currentContext, flags, timeout, &syncStatus), thread, syncObject->clientWait(display, currentContext, flags, timeout, &syncStatus),
"eglClientWaitSync", GetDisplayIfValid(display), EGL_FALSE); "eglClientWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE);
thread->setSuccess(); thread->setSuccess();
return syncStatus; return syncStatus;
...@@ -909,11 +909,11 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncAttrib(EGLDisplay dpy, ...@@ -909,11 +909,11 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncAttrib(EGLDisplay dpy,
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateGetSyncAttrib(display, syncObject, attribute, value), ANGLE_EGL_TRY_RETURN(thread, ValidateGetSyncAttrib(display, syncObject, attribute, value),
"eglGetSyncAttrib", GetDisplayIfValid(display), EGL_FALSE); "eglGetSyncAttrib", GetSyncIfValid(display, syncObject), EGL_FALSE);
EGLint valueExt; EGLint valueExt;
ANGLE_EGL_TRY_RETURN(thread, GetSyncAttrib(display, syncObject, attribute, &valueExt), ANGLE_EGL_TRY_RETURN(thread, GetSyncAttrib(display, syncObject, attribute, &valueExt),
"eglGetSyncAttrib", GetDisplayIfValid(display), EGL_FALSE); "eglGetSyncAttrib", GetSyncIfValid(display, syncObject), EGL_FALSE);
*value = valueExt; *value = valueExt;
thread->setSuccess(); thread->setSuccess();
...@@ -1064,11 +1064,11 @@ EGLBoolean EGLAPIENTRY EGL_WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags) ...@@ -1064,11 +1064,11 @@ EGLBoolean EGLAPIENTRY EGL_WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateWaitSync(display, context, syncObject, flags), ANGLE_EGL_TRY_RETURN(thread, ValidateWaitSync(display, context, syncObject, flags),
"eglWaitSync", GetDisplayIfValid(display), EGL_FALSE); "eglWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
ANGLE_EGL_TRY_RETURN(thread, syncObject->serverWait(display, currentContext, flags), ANGLE_EGL_TRY_RETURN(thread, syncObject->serverWait(display, currentContext, flags),
"eglWaitSync", GetDisplayIfValid(display), EGL_FALSE); "eglWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE);
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
......
...@@ -938,13 +938,13 @@ ANGLE_EXPORT EGLint EGLAPIENTRY EGL_ClientWaitSyncKHR(EGLDisplay dpy, ...@@ -938,13 +938,13 @@ ANGLE_EXPORT EGLint EGLAPIENTRY EGL_ClientWaitSyncKHR(EGLDisplay dpy,
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateClientWaitSync(display, syncObject, flags, timeout), ANGLE_EGL_TRY_RETURN(thread, ValidateClientWaitSync(display, syncObject, flags, timeout),
"eglClientWaitSync", GetDisplayIfValid(display), EGL_FALSE); "eglClientWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
EGLint syncStatus = EGL_FALSE; EGLint syncStatus = EGL_FALSE;
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_TRY_RETURN(
thread, syncObject->clientWait(display, currentContext, flags, timeout, &syncStatus), thread, syncObject->clientWait(display, currentContext, flags, timeout, &syncStatus),
"eglClientWaitSync", GetDisplayIfValid(display), EGL_FALSE); "eglClientWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE);
thread->setSuccess(); thread->setSuccess();
return syncStatus; return syncStatus;
...@@ -966,10 +966,10 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetSyncAttribKHR(EGLDisplay dpy, ...@@ -966,10 +966,10 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetSyncAttribKHR(EGLDisplay dpy,
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateGetSyncAttribKHR(display, syncObject, attribute, value), ANGLE_EGL_TRY_RETURN(thread, ValidateGetSyncAttribKHR(display, syncObject, attribute, value),
"eglGetSyncAttrib", GetDisplayIfValid(display), EGL_FALSE); "eglGetSyncAttrib", GetSyncIfValid(display, syncObject), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, GetSyncAttrib(display, syncObject, attribute, value), ANGLE_EGL_TRY_RETURN(thread, GetSyncAttrib(display, syncObject, attribute, value),
"eglGetSyncAttrib", GetDisplayIfValid(display), EGL_FALSE); "eglGetSyncAttrib", GetSyncIfValid(display, syncObject), EGL_FALSE);
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
...@@ -989,11 +989,11 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSync sync ...@@ -989,11 +989,11 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSync sync
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateWaitSync(display, context, syncObject, flags), ANGLE_EGL_TRY_RETURN(thread, ValidateWaitSync(display, context, syncObject, flags),
"eglWaitSync", GetDisplayIfValid(display), EGL_FALSE); "eglWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
ANGLE_EGL_TRY_RETURN(thread, syncObject->serverWait(display, currentContext, flags), ANGLE_EGL_TRY_RETURN(thread, syncObject->serverWait(display, currentContext, flags),
"eglWaitSync", GetDisplayIfValid(display), EGL_FALSE); "eglWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE);
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
......
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