Commit 43a2762d by Tobin Ehlis Committed by Commit Bot

Refactoring EGL validation

Migrating much of EGL validation to use existing macros. Added new Validate* functions for eglDestroySurface(), eglDestroyContext(), eglWaitNative() functions. This continues the EGL validation refactor begun with SwapBuffers. Following similar pattern used there, but putting this out as an intermediate change to verify that code looks good and is going in the desired direction. Bug: angleproject:798 Change-Id: Id7309b9686543c20b20e273b35df1f8b9010fcd3 Reviewed-on: https://chromium-review.googlesource.com/1178750 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 3394a73d
...@@ -610,9 +610,8 @@ Error ValidateLabeledObject(Thread *thread, ...@@ -610,9 +610,8 @@ Error ValidateLabeledObject(Thread *thread,
return NoError(); return NoError();
} }
} // namespace // This is a common sub-check of Display status that's shared by multiple functions
Error ValidateDisplayPointer(const Display *display)
Error ValidateDisplay(const Display *display)
{ {
if (display == EGL_NO_DISPLAY) if (display == EGL_NO_DISPLAY)
{ {
...@@ -624,6 +623,15 @@ Error ValidateDisplay(const Display *display) ...@@ -624,6 +623,15 @@ Error ValidateDisplay(const Display *display)
return EglBadDisplay() << "display is not a valid display."; return EglBadDisplay() << "display is not a valid display.";
} }
return NoError();
}
} // namespace
Error ValidateDisplay(const Display *display)
{
ANGLE_TRY(ValidateDisplayPointer(display));
if (!display->isInitialized()) if (!display->isInitialized())
{ {
return EglNotInitialized() << "display is not initialized."; return EglNotInitialized() << "display is not initialized.";
...@@ -780,6 +788,16 @@ LabeledObject *GetLabeledObjectIfValid(Thread *thread, ...@@ -780,6 +788,16 @@ LabeledObject *GetLabeledObjectIfValid(Thread *thread,
return labeledObject; return labeledObject;
} }
Error ValidateInitialize(const Display *display)
{
return ValidateDisplayPointer(display);
}
Error ValidateTerminate(const Display *display)
{
return ValidateDisplayPointer(display);
}
Error ValidateCreateContext(Display *display, Error ValidateCreateContext(Display *display,
Config *configuration, Config *configuration,
gl::Context *shareContext, gl::Context *shareContext,
...@@ -2472,6 +2490,34 @@ Error ValidateGetSyncValuesCHROMIUM(const Display *display, ...@@ -2472,6 +2490,34 @@ Error ValidateGetSyncValuesCHROMIUM(const Display *display,
return NoError(); return NoError();
} }
Error ValidateDestroySurface(const Display *display,
const Surface *surface,
const EGLSurface eglSurface)
{
ANGLE_TRY(ValidateSurface(display, surface));
if (eglSurface == EGL_NO_SURFACE)
{
return EglBadSurface();
}
return NoError();
}
Error ValidateDestroyContext(const Display *display,
const gl::Context *glCtx,
const EGLContext eglCtx)
{
ANGLE_TRY(ValidateContext(display, glCtx));
if (eglCtx == EGL_NO_CONTEXT)
{
return EglBadContext();
}
return NoError();
}
Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface *eglSurface) Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface *eglSurface)
{ {
ANGLE_TRY(ValidateSurface(display, eglSurface)); ANGLE_TRY(ValidateSurface(display, eglSurface));
...@@ -2490,6 +2536,18 @@ Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface ...@@ -2490,6 +2536,18 @@ Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface
return NoError(); return NoError();
} }
Error ValidateWaitNative(const Display *display, const EGLint engine)
{
ANGLE_TRY(ValidateDisplay(display));
if (engine != EGL_CORE_NATIVE_ENGINE)
{
return EglBadParameter() << "the 'engine' parameter has an unrecognized value";
}
return NoError();
}
Error ValidateSwapBuffersWithDamageKHR(const Display *display, Error ValidateSwapBuffersWithDamageKHR(const Display *display,
const Surface *surface, const Surface *surface,
EGLint *rects, EGLint *rects,
......
...@@ -56,6 +56,10 @@ LabeledObject *GetLabeledObjectIfValid(Thread *thread, ...@@ -56,6 +56,10 @@ LabeledObject *GetLabeledObjectIfValid(Thread *thread,
EGLObjectKHR object); EGLObjectKHR object);
// Entry point validation // Entry point validation
Error ValidateInitialize(const Display *display);
Error ValidateTerminate(const Display *display);
Error ValidateCreateContext(Display *display, Error ValidateCreateContext(Display *display,
Config *configuration, Config *configuration,
gl::Context *shareContext, gl::Context *shareContext,
...@@ -130,8 +134,18 @@ Error ValidateGetSyncValuesCHROMIUM(const Display *display, ...@@ -130,8 +134,18 @@ Error ValidateGetSyncValuesCHROMIUM(const Display *display,
const EGLuint64KHR *msc, const EGLuint64KHR *msc,
const EGLuint64KHR *sbc); const EGLuint64KHR *sbc);
Error ValidateDestroySurface(const Display *display,
const Surface *surface,
const EGLSurface eglSurface);
Error ValidateDestroyContext(const Display *display,
const gl::Context *glCtx,
const EGLContext eglCtx);
Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface *surface); Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface *surface);
Error ValidateWaitNative(const Display *display, const EGLint engine);
Error ValidateSwapBuffersWithDamageKHR(const Display *display, Error ValidateSwapBuffersWithDamageKHR(const Display *display,
const Surface *surface, const Surface *surface,
EGLint *rects, EGLint *rects,
......
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