Commit cfe14e28 by Jamie Madill Committed by Commit Bot

EGL: Remove egl::Error from validation code.

Instead of using an egl::Error return value, errors are recorded on the egl::Thread immediately at the call site. This makes the code work the same way as in the GL entry points. Updates the EGL "try" macros to include a special handler for the EGL validation entry points. Uses a special ValidationContext helper class to preserve the existing info. Bug: angleproject:5378 Change-Id: I897f221a41fe406676950600e4ac559081b9f541 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2551790 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
parent 56663dbf
...@@ -186,6 +186,22 @@ inline bool IsError(const egl::Error &err) ...@@ -186,6 +186,22 @@ inline bool IsError(const egl::Error &err)
return err.isError(); return err.isError();
} }
// TODO(jmadill): Remove this when refactor is complete. http://anglebug.com/3041
inline bool IsError(bool value)
{
return !value;
}
// Utility macro for handling implementation methods inside Validation.
#define ANGLE_HANDLE_VALIDATION_ERR(X) \
do \
{ \
(void)(X); \
return false; \
} while (0)
#define ANGLE_VALIDATION_TRY(EXPR) ANGLE_TRY_TEMPLATE(EXPR, ANGLE_HANDLE_VALIDATION_ERR)
#include "Error.inc" #include "Error.inc"
#endif // LIBANGLE_ERROR_H_ #endif // LIBANGLE_ERROR_H_
...@@ -19,6 +19,10 @@ bool gUseAndroidOpenGLTlsSlot; ...@@ -19,6 +19,10 @@ bool gUseAndroidOpenGLTlsSlot;
namespace egl namespace egl
{ {
namespace
{
Debug *sDebug = nullptr;
} // namespace
Thread::Thread() Thread::Thread()
: mLabel(nullptr), : mLabel(nullptr),
...@@ -42,18 +46,29 @@ void Thread::setSuccess() ...@@ -42,18 +46,29 @@ void Thread::setSuccess()
mError = EGL_SUCCESS; mError = EGL_SUCCESS;
} }
void Thread::setError(const Error &error, void Thread::setError(EGLint error,
const Debug *debug,
const char *command, const char *command,
const LabeledObject *object) const LabeledObject *object,
const char *message)
{ {
ASSERT(debug != nullptr); mError = error;
if (error != EGL_SUCCESS && message)
{
EnsureDebugAllocated();
sDebug->insertMessage(error, command, ErrorCodeToMessageType(error), getLabel(),
object ? object->getLabel() : nullptr, message);
}
}
void Thread::setError(const Error &error, const char *command, const LabeledObject *object)
{
mError = error.getCode(); mError = error.getCode();
if (error.isError() && !error.getMessage().empty()) if (error.isError() && !error.getMessage().empty())
{ {
debug->insertMessage(error.getCode(), command, ErrorCodeToMessageType(error.getCode()), EnsureDebugAllocated();
getLabel(), object ? object->getLabel() : nullptr, error.getMessage()); sDebug->insertMessage(error.getCode(), command, ErrorCodeToMessageType(error.getCode()),
getLabel(), object ? object->getLabel() : nullptr,
error.getMessage());
} }
} }
...@@ -108,4 +123,24 @@ Display *Thread::getDisplay() const ...@@ -108,4 +123,24 @@ Display *Thread::getDisplay() const
} }
return nullptr; return nullptr;
} }
void EnsureDebugAllocated()
{
// All EGL calls use a global lock, this is thread safe
if (sDebug == nullptr)
{
sDebug = new Debug();
}
}
void DeallocateDebug()
{
SafeDelete(sDebug);
}
Debug *GetDebug()
{
EnsureDebugAllocated();
return sDebug;
}
} // namespace egl } // namespace egl
...@@ -39,10 +39,14 @@ class Thread : public LabeledObject ...@@ -39,10 +39,14 @@ class Thread : public LabeledObject
EGLLabelKHR getLabel() const override; EGLLabelKHR getLabel() const override;
void setSuccess(); void setSuccess();
void setError(const Error &error,
const Debug *debug, void setError(EGLint error,
const char *command, const char *command,
const LabeledObject *object); const LabeledObject *object,
const char *message);
// TODO: Remove egl::Error. http://anglebug.com/3041
void setError(const Error &error, const char *command, const LabeledObject *object);
EGLint getError() const; EGLint getError() const;
void setAPI(EGLenum api); void setAPI(EGLenum api);
...@@ -61,6 +65,10 @@ class Thread : public LabeledObject ...@@ -61,6 +65,10 @@ class Thread : public LabeledObject
gl::Context *mContext; gl::Context *mContext;
}; };
void EnsureDebugAllocated();
void DeallocateDebug();
Debug *GetDebug();
} // namespace egl } // namespace egl
#endif // LIBANGLE_THREAD_H_ #endif // LIBANGLE_THREAD_H_
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -36,14 +36,31 @@ class Sync; ...@@ -36,14 +36,31 @@ class Sync;
class Thread; class Thread;
class LabeledObject; class LabeledObject;
struct ValidationContext
{
ValidationContext(Thread *threadIn, const char *entryPointIn, const LabeledObject *objectIn)
: eglThread(threadIn), entryPoint(entryPointIn), labeledObject(objectIn)
{}
// We should remove the message-less overload once we have messages for all EGL errors.
void setError(EGLint error) const;
void setError(EGLint error, const char *message...) const;
Thread *eglThread;
const char *entryPoint;
const LabeledObject *labeledObject;
};
// Object validation // Object validation
Error ValidateDisplay(const Display *display); bool ValidateDisplay(const ValidationContext *val, const Display *display);
Error ValidateSurface(const Display *display, const Surface *surface); bool ValidateSurface(const ValidationContext *val, const Display *display, const Surface *surface);
Error ValidateConfig(const Display *display, const Config *config); bool ValidateConfig(const ValidationContext *val, const Display *display, const Config *config);
Error ValidateContext(const Display *display, const gl::Context *context); bool ValidateContext(const ValidationContext *val,
Error ValidateImage(const Display *display, const Image *image); const Display *display,
Error ValidateDevice(const Device *device); const gl::Context *context);
Error ValidateSync(const Display *display, const Sync *sync); bool ValidateImage(const ValidationContext *val, const Display *display, const Image *image);
bool ValidateDevice(const ValidationContext *val, const Device *device);
bool ValidateSync(const ValidationContext *val, 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);
...@@ -60,304 +77,454 @@ LabeledObject *GetLabeledObjectIfValid(Thread *thread, ...@@ -60,304 +77,454 @@ LabeledObject *GetLabeledObjectIfValid(Thread *thread,
EGLObjectKHR object); EGLObjectKHR object);
// Entry point validation // Entry point validation
Error ValidateInitialize(const Display *display); bool ValidateInitialize(const ValidationContext *val, const Display *display);
Error ValidateTerminate(const Display *display); bool ValidateTerminate(const ValidationContext *val, const Display *display);
Error ValidateCreateContext(Display *display, bool ValidateCreateContext(const ValidationContext *val,
Display *display,
Config *configuration, Config *configuration,
gl::Context *shareContext, gl::Context *shareContext,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateCreateWindowSurface(Display *display, bool ValidateCreateWindowSurface(const ValidationContext *val,
Display *display,
Config *config, Config *config,
EGLNativeWindowType window, EGLNativeWindowType window,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateCreatePbufferSurface(Display *display, bool ValidateCreatePbufferSurface(const ValidationContext *val,
Display *display,
Config *config, Config *config,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateCreatePbufferFromClientBuffer(Display *display, bool ValidateCreatePbufferFromClientBuffer(const ValidationContext *val,
Display *display,
EGLenum buftype, EGLenum buftype,
EGLClientBuffer buffer, EGLClientBuffer buffer,
Config *config, Config *config,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateCreatePixmapSurface(Display *display, bool ValidateCreatePixmapSurface(const ValidationContext *val,
Display *display,
Config *config, Config *config,
EGLNativePixmapType pixmap, EGLNativePixmapType pixmap,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateMakeCurrent(Display *display, Surface *draw, Surface *read, gl::Context *context); bool ValidateMakeCurrent(const ValidationContext *val,
Display *display,
Surface *draw,
Surface *read,
gl::Context *context);
Error ValidateCreateImage(const Display *display, bool ValidateCreateImage(const ValidationContext *val,
const Display *display,
gl::Context *context, gl::Context *context,
EGLenum target, EGLenum target,
EGLClientBuffer buffer, EGLClientBuffer buffer,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateDestroyImage(const Display *display, const Image *image); bool ValidateDestroyImage(const ValidationContext *val, const Display *display, const Image *image);
Error ValidateCreateImageKHR(const Display *display, bool ValidateCreateImageKHR(const ValidationContext *val,
const Display *display,
gl::Context *context, gl::Context *context,
EGLenum target, EGLenum target,
EGLClientBuffer buffer, EGLClientBuffer buffer,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateDestroyImageKHR(const Display *display, const Image *image); bool ValidateDestroyImageKHR(const ValidationContext *val,
const Display *display,
const Image *image);
Error ValidateCreateDeviceANGLE(EGLint device_type, bool ValidateCreateDeviceANGLE(const ValidationContext *val,
EGLint device_type,
void *native_device, void *native_device,
const EGLAttrib *attrib_list); const EGLAttrib *attrib_list);
Error ValidateReleaseDeviceANGLE(Device *device); bool ValidateReleaseDeviceANGLE(const ValidationContext *val, Device *device);
Error ValidateCreateSyncBase(const Display *display, bool ValidateCreateSyncBase(const ValidationContext *val,
const Display *display,
EGLenum type, EGLenum type,
const AttributeMap &attribs, const AttributeMap &attribs,
const Display *currentDisplay, const Display *currentDisplay,
const gl::Context *currentContext, const gl::Context *currentContext,
bool isExt); bool isExt);
Error ValidateGetSyncAttribBase(const Display *display, const Sync *sync, EGLint attribute); bool ValidateGetSyncAttribBase(const ValidationContext *val,
const Display *display,
const Sync *sync,
EGLint attribute);
Error ValidateCreateSyncKHR(const Display *display, bool ValidateCreateSyncKHR(const ValidationContext *val,
const Display *display,
EGLenum type, EGLenum type,
const AttributeMap &attribs, const AttributeMap &attribs,
const Display *currentDisplay, const Display *currentDisplay,
const gl::Context *currentContext); const gl::Context *currentContext);
Error ValidateCreateSync(const Display *display, bool ValidateCreateSync(const ValidationContext *val,
const Display *display,
EGLenum type, EGLenum type,
const AttributeMap &attribs, const AttributeMap &attribs,
const Display *currentDisplay, const Display *currentDisplay,
const gl::Context *currentContext); const gl::Context *currentContext);
Error ValidateDestroySync(const Display *display, const Sync *sync); bool ValidateDestroySync(const ValidationContext *val, const Display *display, const Sync *sync);
Error ValidateClientWaitSync(const Display *display, bool ValidateClientWaitSync(const ValidationContext *val,
const Display *display,
const Sync *sync, const Sync *sync,
EGLint flags, EGLint flags,
EGLTime timeout); EGLTime timeout);
Error ValidateWaitSync(const Display *display, bool ValidateWaitSync(const ValidationContext *val,
const Display *display,
const gl::Context *context, const gl::Context *context,
const Sync *sync, const Sync *sync,
EGLint flags); EGLint flags);
Error ValidateGetSyncAttribKHR(const Display *display, bool ValidateGetSyncAttribKHR(const ValidationContext *val,
const Display *display,
const Sync *sync, const Sync *sync,
EGLint attribute, EGLint attribute,
EGLint *value); EGLint *value);
Error ValidateGetSyncAttrib(const Display *display, bool ValidateGetSyncAttrib(const ValidationContext *val,
const Display *display,
const Sync *sync, const Sync *sync,
EGLint attribute, EGLint attribute,
EGLAttrib *value); EGLAttrib *value);
Error ValidateCreateStreamKHR(const Display *display, const AttributeMap &attributes); bool ValidateCreateStreamKHR(const ValidationContext *val,
Error ValidateDestroyStreamKHR(const Display *display, const Stream *stream); const Display *display,
Error ValidateStreamAttribKHR(const Display *display, const AttributeMap &attributes);
bool ValidateDestroyStreamKHR(const ValidationContext *val,
const Display *display,
const Stream *stream);
bool ValidateStreamAttribKHR(const ValidationContext *val,
const Display *display,
const Stream *stream, const Stream *stream,
EGLint attribute, EGLint attribute,
EGLint value); EGLint value);
Error ValidateQueryStreamKHR(const Display *display, bool ValidateQueryStreamKHR(const ValidationContext *val,
const Display *display,
const Stream *stream, const Stream *stream,
EGLenum attribute, EGLenum attribute,
EGLint *value); EGLint *value);
Error ValidateQueryStreamu64KHR(const Display *display, bool ValidateQueryStreamu64KHR(const ValidationContext *val,
const Display *display,
const Stream *stream, const Stream *stream,
EGLenum attribute, EGLenum attribute,
EGLuint64KHR *value); EGLuint64KHR *value);
Error ValidateStreamConsumerGLTextureExternalKHR(const Display *display, bool ValidateStreamConsumerGLTextureExternalKHR(const ValidationContext *val,
const Display *display,
gl::Context *context, gl::Context *context,
const Stream *stream); const Stream *stream);
Error ValidateStreamConsumerAcquireKHR(const Display *display, bool ValidateStreamConsumerAcquireKHR(const ValidationContext *val,
const Display *display,
gl::Context *context, gl::Context *context,
const Stream *stream); const Stream *stream);
Error ValidateStreamConsumerReleaseKHR(const Display *display, bool ValidateStreamConsumerReleaseKHR(const ValidationContext *val,
const Display *display,
gl::Context *context, gl::Context *context,
const Stream *stream); const Stream *stream);
Error ValidateStreamConsumerGLTextureExternalAttribsNV(const Display *display, bool ValidateStreamConsumerGLTextureExternalAttribsNV(const ValidationContext *val,
const Display *display,
gl::Context *context, gl::Context *context,
const Stream *stream, const Stream *stream,
const AttributeMap &attribs); const AttributeMap &attribs);
Error ValidateCreateStreamProducerD3DTextureANGLE(const Display *display, bool ValidateCreateStreamProducerD3DTextureANGLE(const ValidationContext *val,
const Display *display,
const Stream *stream, const Stream *stream,
const AttributeMap &attribs); const AttributeMap &attribs);
Error ValidateStreamPostD3DTextureANGLE(const Display *display, bool ValidateStreamPostD3DTextureANGLE(const ValidationContext *val,
const Display *display,
const Stream *stream, const Stream *stream,
void *texture, void *texture,
const AttributeMap &attribs); const AttributeMap &attribs);
Error ValidateGetMscRateANGLE(const Display *display, bool ValidateGetMscRateANGLE(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
const EGLint *numerator, const EGLint *numerator,
const EGLint *denominator); const EGLint *denominator);
Error ValidateGetSyncValuesCHROMIUM(const Display *display, bool ValidateGetSyncValuesCHROMIUM(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
const EGLuint64KHR *ust, const EGLuint64KHR *ust,
const EGLuint64KHR *msc, const EGLuint64KHR *msc,
const EGLuint64KHR *sbc); const EGLuint64KHR *sbc);
Error ValidateDestroySurface(const Display *display, bool ValidateDestroySurface(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
const EGLSurface eglSurface); const EGLSurface eglSurface);
Error ValidateDestroyContext(const Display *display, bool ValidateDestroyContext(const ValidationContext *val,
const Display *display,
const gl::Context *glCtx, const gl::Context *glCtx,
const EGLContext eglCtx); const EGLContext eglCtx);
Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface *surface); bool ValidateSwapBuffers(const ValidationContext *val,
Thread *thread,
const Display *display,
const Surface *surface);
Error ValidateWaitNative(const Display *display, const EGLint engine); bool ValidateWaitNative(const ValidationContext *val, const Display *display, const EGLint engine);
Error ValidateCopyBuffers(Display *display, const Surface *surface); bool ValidateCopyBuffers(const ValidationContext *val, Display *display, const Surface *surface);
Error ValidateSwapBuffersWithDamageKHR(const Display *display, bool ValidateSwapBuffersWithDamageKHR(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
EGLint *rects, EGLint *rects,
EGLint n_rects); EGLint n_rects);
Error ValidateBindTexImage(const Display *display, bool ValidateBindTexImage(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
const EGLSurface eglSurface, const EGLSurface eglSurface,
const EGLint buffer, const EGLint buffer,
const gl::Context *context, const gl::Context *context,
gl::Texture **textureObject); gl::Texture **textureObject);
Error ValidateReleaseTexImage(const Display *display, bool ValidateReleaseTexImage(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
const EGLSurface eglSurface, const EGLSurface eglSurface,
const EGLint buffer); const EGLint buffer);
Error ValidateSwapInterval(const Display *display, bool ValidateSwapInterval(const ValidationContext *val,
const Display *display,
const Surface *draw_surface, const Surface *draw_surface,
const gl::Context *context); const gl::Context *context);
Error ValidateBindAPI(const EGLenum api); bool ValidateBindAPI(const ValidationContext *val, const EGLenum api);
Error ValidatePresentationTimeANDROID(const Display *display, bool ValidatePresentationTimeANDROID(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
EGLnsecsANDROID time); EGLnsecsANDROID time);
Error ValidateSetBlobCacheANDROID(const Display *display, bool ValidateSetBlobCacheANDROID(const ValidationContext *val,
const Display *display,
EGLSetBlobFuncANDROID set, EGLSetBlobFuncANDROID set,
EGLGetBlobFuncANDROID get); EGLGetBlobFuncANDROID get);
Error ValidateGetConfigAttrib(const Display *display, const Config *config, EGLint attribute); bool ValidateGetConfigAttrib(const ValidationContext *val,
Error ValidateChooseConfig(const Display *display, const Display *display,
const Config *config,
EGLint attribute);
bool ValidateChooseConfig(const ValidationContext *val,
const Display *display,
const AttributeMap &attribs, const AttributeMap &attribs,
EGLint configSize, EGLint configSize,
EGLint *numConfig); EGLint *numConfig);
Error ValidateGetConfigs(const Display *display, EGLint configSize, EGLint *numConfig); bool ValidateGetConfigs(const ValidationContext *val,
const Display *display,
EGLint configSize,
EGLint *numConfig);
// Other validation // Other validation
Error ValidateCompatibleSurface(const Display *display, bool ValidateCompatibleSurface(const ValidationContext *val,
const Display *display,
gl::Context *context, gl::Context *context,
const Surface *surface); const Surface *surface);
Error ValidateGetPlatformDisplay(EGLenum platform, bool ValidateGetPlatformDisplay(const ValidationContext *val,
EGLenum platform,
void *native_display, void *native_display,
const EGLAttrib *attrib_list); const EGLAttrib *attrib_list);
Error ValidateGetPlatformDisplayEXT(EGLenum platform, bool ValidateGetPlatformDisplayEXT(const ValidationContext *val,
EGLenum platform,
void *native_display, void *native_display,
const EGLint *attrib_list); const EGLint *attrib_list);
Error ValidateCreatePlatformWindowSurfaceEXT(const Display *display, bool ValidateCreatePlatformWindowSurfaceEXT(const ValidationContext *val,
const Display *display,
const Config *configuration, const Config *configuration,
void *nativeWindow, void *nativeWindow,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateCreatePlatformPixmapSurfaceEXT(const Display *display, bool ValidateCreatePlatformPixmapSurfaceEXT(const ValidationContext *val,
const Display *display,
const Config *configuration, const Config *configuration,
void *nativePixmap, void *nativePixmap,
const AttributeMap &attributes); const AttributeMap &attributes);
Error ValidateProgramCacheGetAttribANGLE(const Display *display, EGLenum attrib); bool ValidateProgramCacheGetAttribANGLE(const ValidationContext *val,
const Display *display,
EGLenum attrib);
Error ValidateProgramCacheQueryANGLE(const Display *display, bool ValidateProgramCacheQueryANGLE(const ValidationContext *val,
const Display *display,
EGLint index, EGLint index,
void *key, void *key,
EGLint *keysize, EGLint *keysize,
void *binary, void *binary,
EGLint *binarysize); EGLint *binarysize);
Error ValidateProgramCachePopulateANGLE(const Display *display, bool ValidateProgramCachePopulateANGLE(const ValidationContext *val,
const Display *display,
const void *key, const void *key,
EGLint keysize, EGLint keysize,
const void *binary, const void *binary,
EGLint binarysize); EGLint binarysize);
Error ValidateProgramCacheResizeANGLE(const Display *display, EGLint limit, EGLenum mode); bool ValidateProgramCacheResizeANGLE(const ValidationContext *val,
const Display *display,
EGLint limit,
EGLenum mode);
Error ValidateSurfaceAttrib(const Display *display, bool ValidateSurfaceAttrib(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
EGLint attribute, EGLint attribute,
EGLint value); EGLint value);
Error ValidateQuerySurface(const Display *display, bool ValidateQuerySurface(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
EGLint attribute, EGLint attribute,
EGLint *value); EGLint *value);
Error ValidateQueryContext(const Display *display, bool ValidateQueryContext(const ValidationContext *val,
const Display *display,
const gl::Context *context, const gl::Context *context,
EGLint attribute, EGLint attribute,
EGLint *value); EGLint *value);
// EGL_KHR_debug // EGL_KHR_debug
Error ValidateDebugMessageControlKHR(EGLDEBUGPROCKHR callback, const AttributeMap &attribs); bool ValidateDebugMessageControlKHR(const ValidationContext *val,
EGLDEBUGPROCKHR callback,
const AttributeMap &attribs);
Error ValidateQueryDebugKHR(EGLint attribute, EGLAttrib *value); bool ValidateQueryDebugKHR(const ValidationContext *val, EGLint attribute, EGLAttrib *value);
Error ValidateLabelObjectKHR(Thread *thread, bool ValidateLabelObjectKHR(const ValidationContext *val,
Thread *thread,
const Display *display, const Display *display,
ObjectType objectType, ObjectType objectType,
EGLObjectKHR object, EGLObjectKHR object,
EGLLabelKHR label); EGLLabelKHR label);
// ANDROID_get_frame_timestamps // ANDROID_get_frame_timestamps
Error ValidateGetCompositorTimingSupportedANDROID(const Display *display, bool ValidateGetCompositorTimingSupportedANDROID(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
CompositorTiming name); CompositorTiming name);
Error ValidateGetCompositorTimingANDROID(const Display *display, bool ValidateGetCompositorTimingANDROID(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
EGLint numTimestamps, EGLint numTimestamps,
const EGLint *names, const EGLint *names,
EGLnsecsANDROID *values); EGLnsecsANDROID *values);
Error ValidateGetNextFrameIdANDROID(const Display *display, bool ValidateGetNextFrameIdANDROID(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
EGLuint64KHR *frameId); EGLuint64KHR *frameId);
Error ValidateGetFrameTimestampSupportedANDROID(const Display *display, bool ValidateGetFrameTimestampSupportedANDROID(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
Timestamp timestamp); Timestamp timestamp);
Error ValidateGetFrameTimestampsANDROID(const Display *display, bool ValidateGetFrameTimestampsANDROID(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
EGLuint64KHR frameId, EGLuint64KHR frameId,
EGLint numTimestamps, EGLint numTimestamps,
const EGLint *timestamps, const EGLint *timestamps,
EGLnsecsANDROID *values); EGLnsecsANDROID *values);
Error ValidateQueryStringiANGLE(const Display *display, EGLint name, EGLint index); bool ValidateQueryStringiANGLE(const ValidationContext *val,
const Display *display,
EGLint name,
EGLint index);
Error ValidateQueryDisplayAttribEXT(const Display *display, const EGLint attribute); bool ValidateQueryDisplayAttribEXT(const ValidationContext *val,
Error ValidateQueryDisplayAttribANGLE(const Display *display, const EGLint attribute); const Display *display,
const EGLint attribute);
bool ValidateQueryDisplayAttribANGLE(const ValidationContext *val,
const Display *display,
const EGLint attribute);
// EGL_ANDROID_get_native_client_buffer // EGL_ANDROID_get_native_client_buffer
Error ValidateGetNativeClientBufferANDROID(const struct AHardwareBuffer *buffer); bool ValidateGetNativeClientBufferANDROID(const ValidationContext *val,
const struct AHardwareBuffer *buffer);
// EGL_ANDROID_create_native_client_buffer // EGL_ANDROID_create_native_client_buffer
Error ValidateCreateNativeClientBufferANDROID(const egl::AttributeMap &attribMap); bool ValidateCreateNativeClientBufferANDROID(const ValidationContext *val,
const egl::AttributeMap &attribMap);
// EGL_ANDROID_native_fence_sync // EGL_ANDROID_native_fence_sync
Error ValidateDupNativeFenceFDANDROID(const Display *display, const Sync *sync); bool ValidateDupNativeFenceFDANDROID(const ValidationContext *val,
const Display *display,
const Sync *sync);
// EGL_ANGLE_swap_with_frame_token // EGL_ANGLE_swap_with_frame_token
Error ValidateSwapBuffersWithFrameTokenANGLE(const Display *display, bool ValidateSwapBuffersWithFrameTokenANGLE(const ValidationContext *val,
const Display *display,
const Surface *surface, const Surface *surface,
EGLFrameTokenANGLE frametoken); EGLFrameTokenANGLE frametoken);
// EGL_KHR_reusable_sync // EGL_KHR_reusable_sync
Error ValidateSignalSyncKHR(const Display *display, const Sync *sync, EGLint mode); bool ValidateSignalSyncKHR(const ValidationContext *val,
const Display *display,
const Sync *sync,
EGLint mode);
// EGL_ANGLE_query_surface_pointer
bool ValidateQuerySurfacePointerANGLE(const ValidationContext *val,
const Display *display,
Surface *eglSurface,
EGLint attribute,
void **value);
// EGL_NV_post_sub_buffer
bool ValidatePostSubBufferNV(const ValidationContext *val,
Display *display,
Surface *eglSurface,
EGLint x,
EGLint y,
EGLint width,
EGLint height);
// EGL_EXT_device_query
bool ValidateQueryDeviceAttribEXT(const ValidationContext *val,
Device *device,
EGLint attribute,
EGLAttrib *value);
bool ValidateQueryDeviceStringEXT(const ValidationContext *val, Device *device, EGLint name);
bool ValidateReleaseHighPowerGPUANGLE(const ValidationContext *val,
Display *display,
gl::Context *context);
bool ValidateReacquireHighPowerGPUANGLE(const ValidationContext *val,
Display *display,
gl::Context *context);
bool ValidateHandleGPUSwitchANGLE(const ValidationContext *val, Display *display);
} // namespace egl } // namespace egl
#define ANGLE_EGL_VALIDATE(THREAD, EP, OBJ, RETVAL, ...) \
do \
{ \
const char *epname = "egl" #EP; \
ValidationContext vctx(THREAD, epname, OBJ); \
auto ANGLE_LOCAL_VAR = (Validate##EP(&vctx, __VA_ARGS__)); \
if (!ANGLE_LOCAL_VAR) \
{ \
return RETVAL; \
} \
} while (0)
#define ANGLE_EGL_VALIDATE_VOID(THREAD, EP, OBJ, ...) \
do \
{ \
const char *epname = "egl" #EP; \
ValidationContext vctx(THREAD, epname, OBJ); \
auto ANGLE_LOCAL_VAR = (Validate##EP(&vctx, __VA_ARGS__)); \
if (!ANGLE_LOCAL_VAR) \
{ \
return; \
} \
} while (0)
#define ANGLE_EGL_TRY(THREAD, EXPR, FUNCNAME, LABELOBJECT) \ #define ANGLE_EGL_TRY(THREAD, EXPR, FUNCNAME, LABELOBJECT) \
do \ do \
{ \ { \
auto ANGLE_LOCAL_VAR = (EXPR); \ auto ANGLE_LOCAL_VAR = (EXPR); \
if (ANGLE_LOCAL_VAR.isError()) \ if (ANGLE_LOCAL_VAR.isError()) \
return THREAD->setError(ANGLE_LOCAL_VAR, GetDebug(), FUNCNAME, LABELOBJECT); \ return THREAD->setError(ANGLE_LOCAL_VAR, FUNCNAME, LABELOBJECT); \
} while (0) } while (0)
#define ANGLE_EGL_TRY_RETURN(THREAD, EXPR, FUNCNAME, LABELOBJECT, RETVAL) \ #define ANGLE_EGL_TRY_RETURN(THREAD, EXPR, FUNCNAME, LABELOBJECT, RETVAL) \
...@@ -366,7 +533,7 @@ Error ValidateSignalSyncKHR(const Display *display, const Sync *sync, EGLint mod ...@@ -366,7 +533,7 @@ Error ValidateSignalSyncKHR(const Display *display, const Sync *sync, EGLint mod
auto ANGLE_LOCAL_VAR = (EXPR); \ auto ANGLE_LOCAL_VAR = (EXPR); \
if (ANGLE_LOCAL_VAR.isError()) \ if (ANGLE_LOCAL_VAR.isError()) \
{ \ { \
THREAD->setError(ANGLE_LOCAL_VAR, GetDebug(), FUNCNAME, LABELOBJECT); \ THREAD->setError(ANGLE_LOCAL_VAR, FUNCNAME, LABELOBJECT); \
return RETVAL; \ return RETVAL; \
} \ } \
} while (0) } while (0)
......
...@@ -749,12 +749,6 @@ bool ValidateGetMultisamplefvBase(const Context *context, ...@@ -749,12 +749,6 @@ bool ValidateGetMultisamplefvBase(const Context *context,
const GLfloat *val); const GLfloat *val);
bool ValidateSampleMaskiBase(const Context *context, GLuint maskNumber, GLbitfield mask); bool ValidateSampleMaskiBase(const Context *context, GLuint maskNumber, GLbitfield mask);
// Utility macro for handling implementation methods inside Validation.
#define ANGLE_HANDLE_VALIDATION_ERR(X) \
(void)(X); \
return false
#define ANGLE_VALIDATION_TRY(EXPR) ANGLE_TRY_TEMPLATE(EXPR, ANGLE_HANDLE_VALIDATION_ERR)
// We should check with Khronos if returning INVALID_FRAMEBUFFER_OPERATION is OK when querying // We should check with Khronos if returning INVALID_FRAMEBUFFER_OPERATION is OK when querying
// implementation format info for incomplete framebuffers. It seems like these queries are // implementation format info for incomplete framebuffers. It seems like these queries are
// incongruent with the other errors. // incongruent with the other errors.
......
...@@ -81,8 +81,7 @@ EGLBoolean EGLAPIENTRY EGL_Initialize(EGLDisplay dpy, EGLint *major, EGLint *min ...@@ -81,8 +81,7 @@ EGLBoolean EGLAPIENTRY EGL_Initialize(EGLDisplay dpy, EGLint *major, EGLint *min
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
ANGLE_EGL_TRY_RETURN(thread, ValidateInitialize(display), "eglInitialize", ANGLE_EGL_VALIDATE(thread, Initialize, GetDisplayIfValid(display), EGL_FALSE, display);
GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->initialize(), "eglInitialize", GetDisplayIfValid(display), ANGLE_EGL_TRY_RETURN(thread, display->initialize(), "eglInitialize", GetDisplayIfValid(display),
EGL_FALSE); EGL_FALSE);
...@@ -103,8 +102,7 @@ EGLBoolean EGLAPIENTRY EGL_Terminate(EGLDisplay dpy) ...@@ -103,8 +102,7 @@ EGLBoolean EGLAPIENTRY EGL_Terminate(EGLDisplay dpy)
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
ANGLE_EGL_TRY_RETURN(thread, ValidateTerminate(display), "eglTerminate", ANGLE_EGL_VALIDATE(thread, Terminate, GetDisplayIfValid(display), EGL_FALSE, display);
GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglTerminate", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglTerminate",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, ANGLE_EGL_TRY_RETURN(thread,
...@@ -127,8 +125,7 @@ const char *EGLAPIENTRY EGL_QueryString(EGLDisplay dpy, EGLint name) ...@@ -127,8 +125,7 @@ const char *EGLAPIENTRY EGL_QueryString(EGLDisplay dpy, EGLint name)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
if (!(display == EGL_NO_DISPLAY && name == EGL_EXTENSIONS)) if (!(display == EGL_NO_DISPLAY && name == EGL_EXTENSIONS))
{ {
ANGLE_EGL_TRY_RETURN(thread, ValidateDisplay(display), "eglQueryString", ANGLE_EGL_VALIDATE(thread, Display, GetDisplayIfValid(display), nullptr, display);
GetDisplayIfValid(display), nullptr);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryString", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryString",
GetDisplayIfValid(display), nullptr); GetDisplayIfValid(display), nullptr);
} }
...@@ -156,8 +153,7 @@ const char *EGLAPIENTRY EGL_QueryString(EGLDisplay dpy, EGLint name) ...@@ -156,8 +153,7 @@ const char *EGLAPIENTRY EGL_QueryString(EGLDisplay dpy, EGLint name)
result = "1.5 (ANGLE " ANGLE_VERSION_STRING ")"; result = "1.5 (ANGLE " ANGLE_VERSION_STRING ")";
break; break;
default: default:
thread->setError(EglBadParameter(), GetDebug(), "eglQueryString", thread->setError(EglBadParameter(), "eglQueryString", GetDisplayIfValid(display));
GetDisplayIfValid(display));
return nullptr; return nullptr;
} }
...@@ -179,8 +175,8 @@ EGLBoolean EGLAPIENTRY EGL_GetConfigs(EGLDisplay dpy, ...@@ -179,8 +175,8 @@ EGLBoolean EGLAPIENTRY EGL_GetConfigs(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
ANGLE_EGL_TRY_RETURN(thread, ValidateGetConfigs(display, config_size, num_config), ANGLE_EGL_VALIDATE(thread, GetConfigs, GetDisplayIfValid(display), EGL_FALSE, display,
"eglGetConfigs", GetDisplayIfValid(display), EGL_FALSE); config_size, num_config);
ClipConfigs(display->getConfigs(AttributeMap()), configs, config_size, num_config); ClipConfigs(display->getConfigs(AttributeMap()), configs, config_size, num_config);
...@@ -206,8 +202,8 @@ EGLBoolean EGLAPIENTRY EGL_ChooseConfig(EGLDisplay dpy, ...@@ -206,8 +202,8 @@ EGLBoolean EGLAPIENTRY EGL_ChooseConfig(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
AttributeMap attribMap = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attribMap = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN(thread, ValidateChooseConfig(display, attribMap, config_size, num_config), ANGLE_EGL_VALIDATE(thread, ChooseConfig, GetDisplayIfValid(display), EGL_FALSE, display,
"eglChooseConfig", GetDisplayIfValid(display), EGL_FALSE); attribMap, config_size, num_config);
ClipConfigs(display->chooseConfig(attribMap), configs, config_size, num_config); ClipConfigs(display->chooseConfig(attribMap), configs, config_size, num_config);
...@@ -230,8 +226,8 @@ EGLBoolean EGLAPIENTRY EGL_GetConfigAttrib(EGLDisplay dpy, ...@@ -230,8 +226,8 @@ EGLBoolean EGLAPIENTRY EGL_GetConfigAttrib(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Config *configuration = static_cast<Config *>(config); Config *configuration = static_cast<Config *>(config);
ANGLE_EGL_TRY_RETURN(thread, ValidateGetConfigAttrib(display, configuration, attribute), ANGLE_EGL_VALIDATE(thread, GetConfigAttrib, GetDisplayIfValid(display), EGL_FALSE, display,
"eglGetConfigAttrib", GetDisplayIfValid(display), EGL_FALSE); configuration, attribute);
QueryConfigAttrib(configuration, attribute, value); QueryConfigAttrib(configuration, attribute, value);
...@@ -256,9 +252,8 @@ EGLSurface EGLAPIENTRY EGL_CreateWindowSurface(EGLDisplay dpy, ...@@ -256,9 +252,8 @@ EGLSurface EGLAPIENTRY EGL_CreateWindowSurface(EGLDisplay dpy,
Config *configuration = static_cast<Config *>(config); Config *configuration = static_cast<Config *>(config);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN(thread, ANGLE_EGL_VALIDATE(thread, CreateWindowSurface, GetDisplayIfValid(display), EGL_NO_SURFACE,
ValidateCreateWindowSurface(display, configuration, win, attributes), display, configuration, win, attributes);
"eglCreateWindowSurface", GetDisplayIfValid(display), EGL_NO_SURFACE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateWindowSurface", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateWindowSurface",
GetDisplayIfValid(display), EGL_NO_SURFACE); GetDisplayIfValid(display), EGL_NO_SURFACE);
...@@ -285,8 +280,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePbufferSurface(EGLDisplay dpy, ...@@ -285,8 +280,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePbufferSurface(EGLDisplay dpy,
Config *configuration = static_cast<Config *>(config); Config *configuration = static_cast<Config *>(config);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN(thread, ValidateCreatePbufferSurface(display, configuration, attributes), ANGLE_EGL_VALIDATE(thread, CreatePbufferSurface, GetDisplayIfValid(display), EGL_NO_SURFACE,
"eglCreatePbufferSurface", GetDisplayIfValid(display), EGL_NO_SURFACE); display, configuration, attributes);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePbufferSurface", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePbufferSurface",
GetDisplayIfValid(display), EGL_NO_SURFACE); GetDisplayIfValid(display), EGL_NO_SURFACE);
egl::Surface *surface = nullptr; egl::Surface *surface = nullptr;
...@@ -314,9 +309,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePixmapSurface(EGLDisplay dpy, ...@@ -314,9 +309,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePixmapSurface(EGLDisplay dpy,
Config *configuration = static_cast<Config *>(config); Config *configuration = static_cast<Config *>(config);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN(thread, ANGLE_EGL_VALIDATE(thread, CreatePixmapSurface, GetDisplayIfValid(display), EGL_NO_SURFACE,
ValidateCreatePixmapSurface(display, configuration, pixmap, attributes), display, configuration, pixmap, attributes);
"eglCreatePixmapSurface", GetDisplayIfValid(display), EGL_NO_SURFACE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePixmapSurface", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePixmapSurface",
GetDisplayIfValid(display), EGL_NO_SURFACE); GetDisplayIfValid(display), EGL_NO_SURFACE);
egl::Surface *surface = nullptr; egl::Surface *surface = nullptr;
...@@ -338,8 +332,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroySurface(EGLDisplay dpy, EGLSurface surface) ...@@ -338,8 +332,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroySurface(EGLDisplay dpy, EGLSurface surface)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
ANGLE_EGL_TRY_RETURN(thread, ValidateDestroySurface(display, eglSurface, surface), ANGLE_EGL_VALIDATE(thread, DestroySurface, GetSurfaceIfValid(display, eglSurface), EGL_FALSE,
"eglDestroySurface", GetSurfaceIfValid(display, eglSurface), EGL_FALSE); display, eglSurface, surface);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroySurface", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroySurface",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->destroySurface(eglSurface), "eglDestroySurface", ANGLE_EGL_TRY_RETURN(thread, display->destroySurface(eglSurface), "eglDestroySurface",
...@@ -364,8 +358,8 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurface(EGLDisplay dpy, ...@@ -364,8 +358,8 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurface(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
const Surface *eglSurface = static_cast<const Surface *>(surface); const Surface *eglSurface = static_cast<const Surface *>(surface);
ANGLE_EGL_TRY_RETURN(thread, ValidateQuerySurface(display, eglSurface, attribute, value), ANGLE_EGL_VALIDATE(thread, QuerySurface, GetSurfaceIfValid(display, eglSurface), EGL_FALSE,
"eglQuerySurface", GetSurfaceIfValid(display, eglSurface), EGL_FALSE); display, eglSurface, attribute, value);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQuerySurface", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQuerySurface",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, QuerySurfaceAttrib(display, eglSurface, attribute, value), ANGLE_EGL_TRY_RETURN(thread, QuerySurfaceAttrib(display, eglSurface, attribute, value),
...@@ -392,9 +386,8 @@ EGLContext EGLAPIENTRY EGL_CreateContext(EGLDisplay dpy, ...@@ -392,9 +386,8 @@ EGLContext EGLAPIENTRY EGL_CreateContext(EGLDisplay dpy,
gl::Context *sharedGLContext = static_cast<gl::Context *>(share_context); gl::Context *sharedGLContext = static_cast<gl::Context *>(share_context);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN(thread, ANGLE_EGL_VALIDATE(thread, CreateContext, GetDisplayIfValid(display), EGL_NO_CONTEXT, display,
ValidateCreateContext(display, configuration, sharedGLContext, attributes), configuration, sharedGLContext, attributes);
"eglCreateContext", GetDisplayIfValid(display), EGL_NO_CONTEXT);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateContext", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateContext",
GetDisplayIfValid(display), EGL_NO_CONTEXT); GetDisplayIfValid(display), EGL_NO_CONTEXT);
gl::Context *context = nullptr; gl::Context *context = nullptr;
...@@ -417,8 +410,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyContext(EGLDisplay dpy, EGLContext ctx) ...@@ -417,8 +410,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyContext(EGLDisplay dpy, EGLContext ctx)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
gl::Context *context = static_cast<gl::Context *>(ctx); gl::Context *context = static_cast<gl::Context *>(ctx);
ANGLE_EGL_TRY_RETURN(thread, ValidateDestroyContext(display, context, ctx), "eglDestroyContext", ANGLE_EGL_VALIDATE(thread, DestroyContext, GetContextIfValid(display, context), EGL_FALSE,
GetContextIfValid(display, context), EGL_FALSE); display, context, ctx);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroyContext", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroyContext",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
bool contextWasCurrent = context == thread->getContext(); bool contextWasCurrent = context == thread->getContext();
...@@ -455,8 +448,8 @@ EGLBoolean EGLAPIENTRY EGL_MakeCurrent(EGLDisplay dpy, ...@@ -455,8 +448,8 @@ EGLBoolean EGLAPIENTRY EGL_MakeCurrent(EGLDisplay dpy,
Surface *readSurface = static_cast<Surface *>(read); Surface *readSurface = static_cast<Surface *>(read);
gl::Context *context = static_cast<gl::Context *>(ctx); gl::Context *context = static_cast<gl::Context *>(ctx);
ANGLE_EGL_TRY_RETURN(thread, ValidateMakeCurrent(display, drawSurface, readSurface, context), ANGLE_EGL_VALIDATE(thread, MakeCurrent, GetContextIfValid(display, context), EGL_FALSE, display,
"eglMakeCurrent", GetContextIfValid(display, context), EGL_FALSE); drawSurface, readSurface, context);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglMakeCurrent", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglMakeCurrent",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
Surface *previousDraw = thread->getCurrentDrawSurface(); Surface *previousDraw = thread->getCurrentDrawSurface();
...@@ -495,7 +488,7 @@ EGLSurface EGLAPIENTRY EGL_GetCurrentSurface(EGLint readdraw) ...@@ -495,7 +488,7 @@ EGLSurface EGLAPIENTRY EGL_GetCurrentSurface(EGLint readdraw)
} }
else else
{ {
thread->setError(EglBadParameter(), GetDebug(), "eglGetCurrentSurface", nullptr); thread->setError(EglBadParameter(), "eglGetCurrentSurface", nullptr);
return EGL_NO_SURFACE; return EGL_NO_SURFACE;
} }
} }
...@@ -530,8 +523,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryContext(EGLDisplay dpy, ...@@ -530,8 +523,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryContext(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
gl::Context *context = static_cast<gl::Context *>(ctx); gl::Context *context = static_cast<gl::Context *>(ctx);
ANGLE_EGL_TRY_RETURN(thread, ValidateQueryContext(display, context, attribute, value), ANGLE_EGL_VALIDATE(thread, QueryContext, GetContextIfValid(display, context), EGL_FALSE,
"eglQueryContext", GetContextIfValid(display, context), EGL_FALSE); display, context, attribute, value);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryContext", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryContext",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
QueryContextAttrib(context, attribute, value); QueryContextAttrib(context, attribute, value);
...@@ -548,8 +541,7 @@ EGLBoolean EGLAPIENTRY EGL_WaitGL(void) ...@@ -548,8 +541,7 @@ EGLBoolean EGLAPIENTRY EGL_WaitGL(void)
egl::Display *display = thread->getDisplay(); egl::Display *display = thread->getDisplay();
ANGLE_EGL_TRY_RETURN(thread, ValidateDisplay(display), "eglWaitGL", GetDisplayIfValid(display), ANGLE_EGL_VALIDATE(thread, Display, GetDisplayIfValid(display), EGL_FALSE, display);
EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitGL", GetDisplayIfValid(display), ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitGL", GetDisplayIfValid(display),
EGL_FALSE); EGL_FALSE);
...@@ -570,8 +562,7 @@ EGLBoolean EGLAPIENTRY EGL_WaitNative(EGLint engine) ...@@ -570,8 +562,7 @@ EGLBoolean EGLAPIENTRY EGL_WaitNative(EGLint engine)
egl::Display *display = thread->getDisplay(); egl::Display *display = thread->getDisplay();
ANGLE_EGL_TRY_RETURN(thread, ValidateWaitNative(display, engine), "eglWaitNative", ANGLE_EGL_VALIDATE(thread, WaitNative, GetThreadIfValid(thread), EGL_FALSE, display, engine);
GetThreadIfValid(thread), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitNative", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitNative",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
...@@ -592,8 +583,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffers(EGLDisplay dpy, EGLSurface surface) ...@@ -592,8 +583,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffers(EGLDisplay dpy, EGLSurface surface)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = (Surface *)surface; Surface *eglSurface = (Surface *)surface;
ANGLE_EGL_TRY_RETURN(thread, ValidateSwapBuffers(thread, display, eglSurface), "eglSwapBuffers", ANGLE_EGL_VALIDATE(thread, SwapBuffers, GetSurfaceIfValid(display, eglSurface), EGL_FALSE,
GetSurfaceIfValid(display, eglSurface), EGL_FALSE); thread, display, eglSurface);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSwapBuffers", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSwapBuffers",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
...@@ -618,8 +609,8 @@ EGLBoolean EGLAPIENTRY EGL_CopyBuffers(EGLDisplay dpy, ...@@ -618,8 +609,8 @@ EGLBoolean EGLAPIENTRY EGL_CopyBuffers(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
ANGLE_EGL_TRY_RETURN(thread, ValidateCopyBuffers(display, eglSurface), "eglCopyBuffers", ANGLE_EGL_VALIDATE(thread, CopyBuffers, GetSurfaceIfValid(display, eglSurface), EGL_FALSE,
GetSurfaceIfValid(display, eglSurface), EGL_FALSE); display, eglSurface);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCopyBuffers", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCopyBuffers",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
UNIMPLEMENTED(); // FIXME UNIMPLEMENTED(); // FIXME
...@@ -642,9 +633,8 @@ EGLBoolean EGLAPIENTRY EGL_BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLi ...@@ -642,9 +633,8 @@ EGLBoolean EGLAPIENTRY EGL_BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLi
gl::Context *context = thread->getContext(); gl::Context *context = thread->getContext();
gl::Texture *textureObject = nullptr; gl::Texture *textureObject = nullptr;
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, BindTexImage, GetSurfaceIfValid(display, eglSurface), EGL_FALSE,
thread, ValidateBindTexImage(display, eglSurface, surface, buffer, context, &textureObject), display, eglSurface, surface, buffer, context, &textureObject);
"eglBindTexImage", GetSurfaceIfValid(display, eglSurface), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglBindTexImage", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglBindTexImage",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
if (context) if (context)
...@@ -672,8 +662,8 @@ EGLBoolean EGLAPIENTRY EGL_SurfaceAttrib(EGLDisplay dpy, ...@@ -672,8 +662,8 @@ EGLBoolean EGLAPIENTRY EGL_SurfaceAttrib(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
ANGLE_EGL_TRY_RETURN(thread, ValidateSurfaceAttrib(display, eglSurface, attribute, value), ANGLE_EGL_VALIDATE(thread, SurfaceAttrib, GetSurfaceIfValid(display, eglSurface), EGL_FALSE,
"eglSurfaceAttrib", GetSurfaceIfValid(display, eglSurface), EGL_FALSE); display, eglSurface, attribute, value);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSurfaceAttrib", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSurfaceAttrib",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
SetSurfaceAttrib(eglSurface, attribute, value); SetSurfaceAttrib(eglSurface, attribute, value);
...@@ -693,8 +683,8 @@ EGLBoolean EGLAPIENTRY EGL_ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, E ...@@ -693,8 +683,8 @@ EGLBoolean EGLAPIENTRY EGL_ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, E
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
ANGLE_EGL_TRY_RETURN(thread, ValidateReleaseTexImage(display, eglSurface, surface, buffer), ANGLE_EGL_VALIDATE(thread, ReleaseTexImage, GetSurfaceIfValid(display, eglSurface), EGL_FALSE,
"eglReleaseTexImage", GetSurfaceIfValid(display, eglSurface), EGL_FALSE); display, eglSurface, surface, buffer);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglReleaseTexImage", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglReleaseTexImage",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
...@@ -722,8 +712,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapInterval(EGLDisplay dpy, EGLint interval) ...@@ -722,8 +712,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapInterval(EGLDisplay dpy, EGLint interval)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *draw_surface = static_cast<Surface *>(thread->getCurrentDrawSurface()); Surface *draw_surface = static_cast<Surface *>(thread->getCurrentDrawSurface());
ANGLE_EGL_TRY_RETURN(thread, ValidateSwapInterval(display, draw_surface, context), ANGLE_EGL_VALIDATE(thread, SwapInterval, GetDisplayIfValid(display), EGL_FALSE, display,
"eglSwapInterval", GetDisplayIfValid(display), EGL_FALSE); draw_surface, context);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSwapInterval", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSwapInterval",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
const egl::Config *surfaceConfig = draw_surface->getConfig(); const egl::Config *surfaceConfig = draw_surface->getConfig();
...@@ -743,8 +733,7 @@ EGLBoolean EGLAPIENTRY EGL_BindAPI(EGLenum api) ...@@ -743,8 +733,7 @@ EGLBoolean EGLAPIENTRY EGL_BindAPI(EGLenum api)
FUNC_EVENT("EGLenum api = 0x%X", api); FUNC_EVENT("EGLenum api = 0x%X", api);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateBindAPI(api), "eglBindAPI", GetThreadIfValid(thread), ANGLE_EGL_VALIDATE(thread, BindAPI, GetThreadIfValid(thread), EGL_FALSE, api);
EGL_FALSE);
thread->setAPI(api); thread->setAPI(api);
...@@ -783,10 +772,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePbufferFromClientBuffer(EGLDisplay dpy, ...@@ -783,10 +772,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePbufferFromClientBuffer(EGLDisplay dpy,
Config *configuration = static_cast<Config *>(config); Config *configuration = static_cast<Config *>(config);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, CreatePbufferFromClientBuffer, GetDisplayIfValid(display),
thread, EGL_NO_SURFACE, display, buftype, buffer, configuration, attributes);
ValidateCreatePbufferFromClientBuffer(display, buftype, buffer, configuration, attributes),
"eglCreatePbufferFromClientBuffer", GetDisplayIfValid(display), EGL_NO_SURFACE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePbufferFromClientBuffer", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePbufferFromClientBuffer",
GetDisplayIfValid(display), EGL_NO_SURFACE); GetDisplayIfValid(display), EGL_NO_SURFACE);
egl::Surface *surface = nullptr; egl::Surface *surface = nullptr;
...@@ -840,8 +827,7 @@ EGLBoolean EGLAPIENTRY EGL_WaitClient(void) ...@@ -840,8 +827,7 @@ EGLBoolean EGLAPIENTRY EGL_WaitClient(void)
egl::Display *display = thread->getDisplay(); egl::Display *display = thread->getDisplay();
gl::Context *context = thread->getContext(); gl::Context *context = thread->getContext();
ANGLE_EGL_TRY_RETURN(thread, ValidateDisplay(display), "eglWaitClient", ANGLE_EGL_VALIDATE(thread, Display, GetContextIfValid(display, context), EGL_FALSE, display);
GetContextIfValid(display, context), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitClient", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitClient",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->waitClient(context), "eglWaitClient", ANGLE_EGL_TRY_RETURN(thread, display->waitClient(context), "eglWaitClient",
...@@ -879,9 +865,8 @@ EGLSync EGLAPIENTRY EGL_CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib ...@@ -879,9 +865,8 @@ EGLSync EGLAPIENTRY EGL_CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
egl::Display *currentDisplay = currentContext ? currentContext->getDisplay() : nullptr; egl::Display *currentDisplay = currentContext ? currentContext->getDisplay() : nullptr;
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, CreateSync, GetDisplayIfValid(display), EGL_NO_SYNC, display, type,
thread, ValidateCreateSync(display, type, attributes, currentDisplay, currentContext), attributes, currentDisplay, currentContext);
"eglCreateSync", GetDisplayIfValid(display), EGL_NO_SYNC);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateSync", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateSync",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
egl::Sync *syncObject = nullptr; egl::Sync *syncObject = nullptr;
...@@ -902,8 +887,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroySync(EGLDisplay dpy, EGLSync sync) ...@@ -902,8 +887,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroySync(EGLDisplay dpy, EGLSync sync)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateDestroySync(display, syncObject), "eglDestroySync", ANGLE_EGL_VALIDATE(thread, DestroySync, GetDisplayIfValid(display), EGL_FALSE, display,
GetDisplayIfValid(display), EGL_FALSE); syncObject);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroySync", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroySync",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
display->destroySync(syncObject); display->destroySync(syncObject);
...@@ -924,8 +909,8 @@ EGLint EGLAPIENTRY EGL_ClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags ...@@ -924,8 +909,8 @@ EGLint EGLAPIENTRY EGL_ClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(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_VALIDATE(thread, ClientWaitSync, GetSyncIfValid(display, syncObject), EGL_FALSE,
"eglClientWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE); display, syncObject, flags, timeout);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglClientWaitSync", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglClientWaitSync",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
...@@ -953,8 +938,8 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncAttrib(EGLDisplay dpy, ...@@ -953,8 +938,8 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncAttrib(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(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_VALIDATE(thread, GetSyncAttrib, GetSyncIfValid(display, syncObject), EGL_FALSE,
"eglGetSyncAttrib", GetSyncIfValid(display, syncObject), EGL_FALSE); display, syncObject, attribute, value);
EGLint valueExt; EGLint valueExt;
ANGLE_EGL_TRY_RETURN(thread, GetSyncAttrib(display, syncObject, attribute, &valueExt), ANGLE_EGL_TRY_RETURN(thread, GetSyncAttrib(display, syncObject, attribute, &valueExt),
...@@ -984,20 +969,16 @@ EGLImage EGLAPIENTRY EGL_CreateImage(EGLDisplay dpy, ...@@ -984,20 +969,16 @@ EGLImage EGLAPIENTRY EGL_CreateImage(EGLDisplay dpy,
gl::Context *context = static_cast<gl::Context *>(ctx); gl::Context *context = static_cast<gl::Context *>(ctx);
AttributeMap attributes = AttributeMap::CreateFromIntArray((const EGLint *)attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray((const EGLint *)attrib_list);
Error error = ValidateCreateImage(display, context, target, buffer, attributes); ANGLE_EGL_VALIDATE(thread, CreateImage, GetDisplayIfValid(display), EGL_FALSE, display, context,
if (error.isError()) target, buffer, attributes);
{
thread->setError(error, GetDebug(), "eglCreateImage", GetDisplayIfValid(display));
return EGL_NO_IMAGE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateImage", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateImage",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
Image *image = nullptr; Image *image = nullptr;
error = display->createImage(context, target, buffer, attributes, &image); Error error = display->createImage(context, target, buffer, attributes, &image);
if (error.isError()) if (error.isError())
{ {
thread->setError(error, GetDebug(), "eglCreateImage", GetDisplayIfValid(display)); thread->setError(error, "eglCreateImage", GetDisplayIfValid(display));
return EGL_NO_IMAGE; return EGL_NO_IMAGE;
} }
...@@ -1014,12 +995,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyImage(EGLDisplay dpy, EGLImage image) ...@@ -1014,12 +995,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyImage(EGLDisplay dpy, EGLImage image)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Image *img = static_cast<Image *>(image); Image *img = static_cast<Image *>(image);
Error error = ValidateDestroyImage(display, img); ANGLE_EGL_VALIDATE(thread, DestroyImage, GetImageIfValid(display, img), EGL_FALSE, display,
if (error.isError()) img);
{
thread->setError(error, GetDebug(), "eglDestroyImage", GetImageIfValid(display, img));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroyImage", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroyImage",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
display->destroyImage(img); display->destroyImage(img);
...@@ -1039,8 +1016,8 @@ EGLDisplay EGLAPIENTRY EGL_GetPlatformDisplay(EGLenum platform, ...@@ -1039,8 +1016,8 @@ EGLDisplay EGLAPIENTRY EGL_GetPlatformDisplay(EGLenum platform,
platform, (uintptr_t)native_display, (uintptr_t)attrib_list); platform, (uintptr_t)native_display, (uintptr_t)attrib_list);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateGetPlatformDisplay(platform, native_display, attrib_list), ANGLE_EGL_VALIDATE(thread, GetPlatformDisplay, GetThreadIfValid(thread), EGL_NO_DISPLAY,
"eglGetPlatformDisplay", GetThreadIfValid(thread), EGL_NO_DISPLAY); platform, native_display, attrib_list);
const auto &attribMap = AttributeMap::CreateFromAttribArray(attrib_list); const auto &attribMap = AttributeMap::CreateFromAttribArray(attrib_list);
if (platform == EGL_PLATFORM_ANGLE_ANGLE) if (platform == EGL_PLATFORM_ANGLE_ANGLE)
...@@ -1080,9 +1057,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurface(EGLDisplay dpy, ...@@ -1080,9 +1057,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurface(EGLDisplay dpy,
EGLNativeWindowType win = reinterpret_cast<EGLNativeWindowType>(native_window); EGLNativeWindowType win = reinterpret_cast<EGLNativeWindowType>(native_window);
AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, CreateWindowSurface, GetDisplayIfValid(display), EGL_NO_SURFACE,
thread, ValidateCreateWindowSurface(display, configuration, win, attributes), display, configuration, win, attributes);
"eglPlatformCreateWindowSurface", GetDisplayIfValid(display), EGL_NO_SURFACE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateWindowSurface", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateWindowSurface",
GetDisplayIfValid(display), EGL_NO_SURFACE); GetDisplayIfValid(display), EGL_NO_SURFACE);
egl::Surface *surface = nullptr; egl::Surface *surface = nullptr;
...@@ -1112,9 +1088,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurface(EGLDisplay dpy, ...@@ -1112,9 +1088,8 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurface(EGLDisplay dpy,
EGLNativePixmapType pixmap = reinterpret_cast<EGLNativePixmapType>(native_pixmap); EGLNativePixmapType pixmap = reinterpret_cast<EGLNativePixmapType>(native_pixmap);
AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, CreatePixmapSurface, GetDisplayIfValid(display), EGL_NO_SURFACE,
thread, ValidateCreatePixmapSurface(display, configuration, pixmap, attributes), display, configuration, pixmap, attributes);
"eglCreatePlatformPixmapSurface", GetDisplayIfValid(display), EGL_NO_SURFACE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePlatformPixmapSurface", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePlatformPixmapSurface",
GetDisplayIfValid(display), EGL_NO_SURFACE); GetDisplayIfValid(display), EGL_NO_SURFACE);
egl::Surface *surface = nullptr; egl::Surface *surface = nullptr;
...@@ -1138,8 +1113,8 @@ EGLBoolean EGLAPIENTRY EGL_WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags) ...@@ -1138,8 +1113,8 @@ EGLBoolean EGLAPIENTRY EGL_WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
gl::Context *context = thread->getContext(); gl::Context *context = thread->getContext();
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_VALIDATE(thread, WaitSync, GetSyncIfValid(display, syncObject), EGL_FALSE, display,
"eglWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE); context, syncObject, flags);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitSync", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitSync",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
......
...@@ -41,57 +41,14 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurfacePointerANGLE(EGLDisplay dpy, ...@@ -41,57 +41,14 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurfacePointerANGLE(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateSurface(display, eglSurface); ANGLE_EGL_VALIDATE(thread, QuerySurfacePointerANGLE, GetDisplayIfValid(display), EGL_FALSE,
if (error.isError()) display, eglSurface, attribute, value);
{
thread->setError(error, GetDebug(), "eglQuerySurfacePointerANGLE",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
if (!display->getExtensions().querySurfacePointer)
{
thread->setSuccess();
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
thread->setError(EglBadSurface(), GetDebug(), "eglQuerySurfacePointerANGLE",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
// validate the attribute parameter
switch (attribute)
{
case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE:
if (!display->getExtensions().surfaceD3DTexture2DShareHandle)
{
thread->setError(EglBadAttribute(), GetDebug(), "eglQuerySurfacePointerANGLE",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
break;
case EGL_DXGI_KEYED_MUTEX_ANGLE:
if (!display->getExtensions().keyedMutex)
{
thread->setError(EglBadAttribute(), GetDebug(), "eglQuerySurfacePointerANGLE",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
break;
default:
thread->setError(EglBadAttribute(), GetDebug(), "eglQuerySurfacePointerANGLE",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQuerySurfacePointerANGLE", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQuerySurfacePointerANGLE",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
error = eglSurface->querySurfacePointerANGLE(attribute, value); Error error = eglSurface->querySurfacePointerANGLE(attribute, value);
if (error.isError()) if (error.isError())
{ {
thread->setError(error, GetDebug(), "eglQuerySurfacePointerANGLE", thread->setError(error, "eglQuerySurfacePointerANGLE",
GetSurfaceIfValid(display, eglSurface)); GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE; return EGL_FALSE;
} }
...@@ -117,49 +74,14 @@ EGLBoolean EGLAPIENTRY EGL_PostSubBufferNV(EGLDisplay dpy, ...@@ -117,49 +74,14 @@ EGLBoolean EGLAPIENTRY EGL_PostSubBufferNV(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
if (x < 0 || y < 0 || width < 0 || height < 0) ANGLE_EGL_VALIDATE(thread, PostSubBufferNV, GetDisplayIfValid(display), EGL_FALSE, display,
{ eglSurface, x, y, width, height);
thread->setError(EglBadParameter(), GetDebug(), "eglPostSubBufferNV",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
thread->setError(error, GetDebug(), "eglPostSubBufferNV",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
if (display->testDeviceLost())
{
thread->setError(EglContextLost(), GetDebug(), "eglPostSubBufferNV",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
thread->setError(EglBadSurface(), GetDebug(), "eglPostSubBufferNV",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
if (!display->getExtensions().postSubBuffer)
{
// Spec is not clear about how this should be handled.
thread->setSuccess();
return EGL_TRUE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglPostSubBufferNV", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglPostSubBufferNV",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
// TODO(jmadill): Validate Surface is bound to the thread. Error error = eglSurface->postSubBuffer(thread->getContext(), x, y, width, height);
error = eglSurface->postSubBuffer(thread->getContext(), x, y, width, height);
if (error.isError()) if (error.isError())
{ {
thread->setError(error, GetDebug(), "eglPostSubBufferNV", thread->setError(error, "eglPostSubBufferNV", GetSurfaceIfValid(display, eglSurface));
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE; return EGL_FALSE;
} }
...@@ -179,12 +101,8 @@ EGLDisplay EGLAPIENTRY EGL_GetPlatformDisplayEXT(EGLenum platform, ...@@ -179,12 +101,8 @@ EGLDisplay EGLAPIENTRY EGL_GetPlatformDisplayEXT(EGLenum platform,
platform, (uintptr_t)native_display, (uintptr_t)attrib_list); platform, (uintptr_t)native_display, (uintptr_t)attrib_list);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
Error err = ValidateGetPlatformDisplayEXT(platform, native_display, attrib_list); ANGLE_EGL_VALIDATE(thread, GetPlatformDisplayEXT, GetThreadIfValid(thread), EGL_NO_DISPLAY,
thread->setError(err, GetDebug(), "eglGetPlatformDisplayEXT", GetThreadIfValid(thread)); platform, native_display, attrib_list);
if (err.isError())
{
return EGL_NO_DISPLAY;
}
const auto &attribMap = AttributeMap::CreateFromIntArray(attrib_list); const auto &attribMap = AttributeMap::CreateFromIntArray(attrib_list);
if (platform == EGL_PLATFORM_ANGLE_ANGLE) if (platform == EGL_PLATFORM_ANGLE_ANGLE)
...@@ -221,13 +139,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, ...@@ -221,13 +139,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurfaceEXT(EGLDisplay dpy,
Config *configuration = static_cast<Config *>(config); Config *configuration = static_cast<Config *>(config);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, CreatePlatformWindowSurfaceEXT, GetDisplayIfValid(display),
thread, EGL_NO_SURFACE, display, configuration, native_window, attributes);
ValidateCreatePlatformWindowSurfaceEXT(display, configuration, native_window, attributes),
"eglCreatePlatformWindowSurfaceEXT", GetDisplayIfValid(display), EGL_NO_SURFACE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePlatformWindowSurfaceEXT", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePlatformWindowSurfaceEXT",
GetDisplayIfValid(display), EGL_NO_SURFACE); GetDisplayIfValid(display), EGL_NO_SURFACE);
thread->setError(EglBadDisplay() << "CreatePlatformWindowSurfaceEXT unimplemented.", GetDebug(), thread->setError(EglBadDisplay() << "CreatePlatformWindowSurfaceEXT unimplemented.",
"eglCreatePlatformWindowSurfaceEXT", GetDisplayIfValid(display)); "eglCreatePlatformWindowSurfaceEXT", GetDisplayIfValid(display));
return EGL_NO_SURFACE; return EGL_NO_SURFACE;
} }
...@@ -249,13 +165,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, ...@@ -249,13 +165,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy,
Config *configuration = static_cast<Config *>(config); Config *configuration = static_cast<Config *>(config);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, CreatePlatformPixmapSurfaceEXT, GetDisplayIfValid(display),
thread, EGL_NO_SURFACE, display, configuration, native_pixmap, attributes);
ValidateCreatePlatformPixmapSurfaceEXT(display, configuration, native_pixmap, attributes),
"eglCreatePlatformPixmapSurfaceEXT", GetDisplayIfValid(display), EGL_NO_SURFACE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePlatformPixmapSurfaceEXT", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreatePlatformPixmapSurfaceEXT",
GetDisplayIfValid(display), EGL_NO_SURFACE); GetDisplayIfValid(display), EGL_NO_SURFACE);
thread->setError(EglBadDisplay() << "CreatePlatformPixmapSurfaceEXT unimplemented.", GetDebug(), thread->setError(EglBadDisplay() << "CreatePlatformPixmapSurfaceEXT unimplemented.",
"eglCreatePlatformPixmapSurfaceEXT", GetDisplayIfValid(display)); "eglCreatePlatformPixmapSurfaceEXT", GetDisplayIfValid(display));
return EGL_NO_SURFACE; return EGL_NO_SURFACE;
} }
...@@ -273,62 +187,11 @@ EGLBoolean EGLAPIENTRY EGL_QueryDeviceAttribEXT(EGLDeviceEXT device, ...@@ -273,62 +187,11 @@ EGLBoolean EGLAPIENTRY EGL_QueryDeviceAttribEXT(EGLDeviceEXT device,
Device *dev = static_cast<Device *>(device); Device *dev = static_cast<Device *>(device);
Error error = ValidateDevice(dev); ANGLE_EGL_VALIDATE(thread, QueryDeviceAttribEXT, GetDeviceIfValid(dev), EGL_FALSE, dev,
if (error.isError()) attribute, value);
{ ANGLE_EGL_TRY_RETURN(thread, dev->getAttribute(attribute, value), "eglQueryDeviceAttribEXT",
thread->setError(error, GetDebug(), "eglQueryDeviceAttribEXT", GetDeviceIfValid(dev)); GetDeviceIfValid(dev), EGL_FALSE);
return EGL_FALSE;
}
if (!Display::GetClientExtensions().deviceQueryEXT)
{
thread->setError(EglBadAccess() << "EGL_EXT_device_query not supported.", GetDebug(),
"eglQueryDeviceAttribEXT", GetDeviceIfValid(dev));
return EGL_FALSE;
}
// validate the attribute parameter
switch (attribute)
{
case EGL_D3D11_DEVICE_ANGLE:
case EGL_D3D9_DEVICE_ANGLE:
if (!dev->getExtensions().deviceD3D || dev->getType() != attribute)
{
thread->setError(EglBadAttribute(), GetDebug(), "eglQueryDeviceAttribEXT",
GetDeviceIfValid(dev));
return EGL_FALSE;
}
error = dev->getAttribute(attribute, value);
break;
case EGL_EAGL_CONTEXT_ANGLE:
if (!dev->getExtensions().deviceEAGL)
{
thread->setError(EglBadAttribute(), GetDebug(), "eglQueryDeviceAttribEXT",
GetDeviceIfValid(dev));
return EGL_FALSE;
}
error = dev->getAttribute(attribute, value);
break;
case EGL_CGL_CONTEXT_ANGLE:
case EGL_CGL_PIXEL_FORMAT_ANGLE:
if (!dev->getExtensions().deviceCGL)
{
thread->setError(EglBadAttribute(), GetDebug(), "eglQueryDeviceAttribEXT",
GetDeviceIfValid(dev));
return EGL_FALSE;
}
error = dev->getAttribute(attribute, value);
break;
default:
thread->setError(EglBadAttribute(), GetDebug(), "eglQueryDeviceAttribEXT",
GetDeviceIfValid(dev));
return EGL_FALSE;
}
if (error.isError())
{
thread->setError(error, GetDebug(), "eglQueryDeviceAttribEXT", GetDeviceIfValid(dev));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
} }
...@@ -343,12 +206,8 @@ const char *EGLAPIENTRY EGL_QueryDeviceStringEXT(EGLDeviceEXT device, EGLint nam ...@@ -343,12 +206,8 @@ const char *EGLAPIENTRY EGL_QueryDeviceStringEXT(EGLDeviceEXT device, EGLint nam
Device *dev = static_cast<Device *>(device); Device *dev = static_cast<Device *>(device);
Error error = ValidateDevice(dev); ANGLE_EGL_VALIDATE(thread, QueryDeviceStringEXT, GetDeviceIfValid(dev), EGL_FALSE, dev, name);
if (error.isError())
{
thread->setError(error, GetDebug(), "eglQueryDeviceStringEXT", GetDeviceIfValid(dev));
return EGL_FALSE;
}
egl::Display *owningDisplay = dev->getOwningDisplay(); egl::Display *owningDisplay = dev->getOwningDisplay();
ANGLE_EGL_TRY_RETURN(thread, owningDisplay->prepareForCall(), "eglQueryDeviceStringEXT", ANGLE_EGL_TRY_RETURN(thread, owningDisplay->prepareForCall(), "eglQueryDeviceStringEXT",
GetDisplayIfValid(owningDisplay), EGL_FALSE); GetDisplayIfValid(owningDisplay), EGL_FALSE);
...@@ -359,8 +218,7 @@ const char *EGLAPIENTRY EGL_QueryDeviceStringEXT(EGLDeviceEXT device, EGLint nam ...@@ -359,8 +218,7 @@ const char *EGLAPIENTRY EGL_QueryDeviceStringEXT(EGLDeviceEXT device, EGLint nam
result = dev->getExtensionString().c_str(); result = dev->getExtensionString().c_str();
break; break;
default: default:
thread->setError(EglBadDevice(), GetDebug(), "eglQueryDeviceStringEXT", thread->setError(EglBadDevice(), "eglQueryDeviceStringEXT", GetDeviceIfValid(dev));
GetDeviceIfValid(dev));
return nullptr; return nullptr;
} }
...@@ -379,8 +237,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribut ...@@ -379,8 +237,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribut
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateQueryDisplayAttribEXT(display, attribute), ANGLE_EGL_VALIDATE(thread, QueryDisplayAttribEXT, GetDisplayIfValid(display), EGL_FALSE,
"eglQueryDisplayAttribEXT", GetDisplayIfValid(display), EGL_FALSE); display, attribute);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryDisplayAttribEXT", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryDisplayAttribEXT",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
*value = display->queryAttrib(attribute); *value = display->queryAttrib(attribute);
...@@ -401,8 +259,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribANGLE(EGLDisplay dpy, ...@@ -401,8 +259,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribANGLE(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateQueryDisplayAttribANGLE(display, attribute), ANGLE_EGL_VALIDATE(thread, QueryDisplayAttribANGLE, GetDisplayIfValid(display), EGL_FALSE,
"eglQueryDisplayAttribANGLE", GetDisplayIfValid(display), EGL_FALSE); display, attribute);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryDisplayAttribANGLE", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryDisplayAttribANGLE",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
*value = display->queryAttrib(attribute); *value = display->queryAttrib(attribute);
...@@ -429,21 +287,13 @@ ANGLE_EXPORT EGLImageKHR EGLAPIENTRY EGL_CreateImageKHR(EGLDisplay dpy, ...@@ -429,21 +287,13 @@ ANGLE_EXPORT EGLImageKHR EGLAPIENTRY EGL_CreateImageKHR(EGLDisplay dpy,
gl::Context *context = static_cast<gl::Context *>(ctx); gl::Context *context = static_cast<gl::Context *>(ctx);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
Error error = ValidateCreateImageKHR(display, context, target, buffer, attributes); ANGLE_EGL_VALIDATE(thread, CreateImageKHR, GetDisplayIfValid(display), EGL_NO_IMAGE, display,
if (error.isError()) context, target, buffer, attributes);
{
thread->setError(error, GetDebug(), "eglCreateImageKHR", GetDisplayIfValid(display));
return EGL_NO_IMAGE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateImageKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateImageKHR",
GetDisplayIfValid(display), EGL_NO_IMAGE); GetDisplayIfValid(display), EGL_NO_IMAGE);
Image *image = nullptr; Image *image = nullptr;
error = display->createImage(context, target, buffer, attributes, &image); ANGLE_EGL_TRY_RETURN(thread, display->createImage(context, target, buffer, attributes, &image),
if (error.isError()) "", GetDisplayIfValid(display), EGL_NO_IMAGE);
{
thread->setError(error, GetDebug(), "eglCreateImageKHR", GetDisplayIfValid(display));
return EGL_NO_IMAGE;
}
thread->setSuccess(); thread->setSuccess();
return static_cast<EGLImage>(image); return static_cast<EGLImage>(image);
...@@ -459,12 +309,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_DestroyImageKHR(EGLDisplay dpy, EGLImage ...@@ -459,12 +309,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_DestroyImageKHR(EGLDisplay dpy, EGLImage
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Image *img = static_cast<Image *>(image); Image *img = static_cast<Image *>(image);
Error error = ValidateDestroyImageKHR(display, img); ANGLE_EGL_VALIDATE(thread, DestroyImageKHR, GetImageIfValid(display, img), EGL_FALSE, display,
if (error.isError()) img);
{
thread->setError(error, GetDebug(), "eglDestroyImageKHR", GetImageIfValid(display, img));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroyImageKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroyImageKHR",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
display->destroyImage(img); display->destroyImage(img);
...@@ -484,21 +330,12 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY EGL_CreateDeviceANGLE(EGLint device_type, ...@@ -484,21 +330,12 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY EGL_CreateDeviceANGLE(EGLint device_type,
device_type, (uintptr_t)native_device, (uintptr_t)attrib_list); device_type, (uintptr_t)native_device, (uintptr_t)attrib_list);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
Error error = ValidateCreateDeviceANGLE(device_type, native_device, attrib_list); ANGLE_EGL_VALIDATE(thread, CreateDeviceANGLE, GetThreadIfValid(thread), EGL_NO_DEVICE_EXT,
if (error.isError()) device_type, native_device, attrib_list);
{
thread->setError(error, GetDebug(), "eglCreateDeviceANGLE", GetThreadIfValid(thread));
return EGL_NO_DEVICE_EXT;
}
Device *device = nullptr; Device *device = nullptr;
error = Device::CreateDevice(device_type, native_device, &device); ANGLE_EGL_TRY_RETURN(thread, Device::CreateDevice(device_type, native_device, &device),
if (error.isError()) "eglCreateDeviceANGLE", GetThreadIfValid(thread), EGL_NO_DEVICE_EXT);
{
ASSERT(device == nullptr);
thread->setError(error, GetDebug(), "eglCreateDeviceANGLE", GetThreadIfValid(thread));
return EGL_NO_DEVICE_EXT;
}
thread->setSuccess(); thread->setSuccess();
return device; return device;
...@@ -512,13 +349,7 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_ReleaseDeviceANGLE(EGLDeviceEXT device) ...@@ -512,13 +349,7 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_ReleaseDeviceANGLE(EGLDeviceEXT device)
Device *dev = static_cast<Device *>(device); Device *dev = static_cast<Device *>(device);
Error error = ValidateReleaseDeviceANGLE(dev); ANGLE_EGL_VALIDATE(thread, ReleaseDeviceANGLE, GetDeviceIfValid(dev), EGL_FALSE, dev);
if (error.isError())
{
thread->setError(error, GetDebug(), "eglReleaseDeviceANGLE", GetDeviceIfValid(dev));
return EGL_FALSE;
}
SafeDelete(dev); SafeDelete(dev);
thread->setSuccess(); thread->setSuccess();
...@@ -536,21 +367,13 @@ EGLStreamKHR EGLAPIENTRY EGL_CreateStreamKHR(EGLDisplay dpy, const EGLint *attri ...@@ -536,21 +367,13 @@ EGLStreamKHR EGLAPIENTRY EGL_CreateStreamKHR(EGLDisplay dpy, const EGLint *attri
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
Error error = ValidateCreateStreamKHR(display, attributes); ANGLE_EGL_VALIDATE(thread, CreateStreamKHR, GetDisplayIfValid(display), EGL_NO_STREAM_KHR,
if (error.isError()) display, attributes);
{
thread->setError(error, GetDebug(), "eglCreateStreamKHR", GetDisplayIfValid(display));
return EGL_NO_STREAM_KHR;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateStreamKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateStreamKHR",
GetDisplayIfValid(display), EGL_NO_STREAM_KHR); GetDisplayIfValid(display), EGL_NO_STREAM_KHR);
Stream *stream; Stream *stream;
error = display->createStream(attributes, &stream); ANGLE_EGL_TRY_RETURN(thread, display->createStream(attributes, &stream), "eglCreateStreamKHR",
if (error.isError()) GetDisplayIfValid(display), EGL_NO_STREAM_KHR);
{
thread->setError(error, GetDebug(), "eglCreateStreamKHR", GetDisplayIfValid(display));
return EGL_NO_STREAM_KHR;
}
thread->setSuccess(); thread->setSuccess();
return static_cast<EGLStreamKHR>(stream); return static_cast<EGLStreamKHR>(stream);
...@@ -566,13 +389,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream) ...@@ -566,13 +389,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
Error error = ValidateDestroyStreamKHR(display, streamObject); ANGLE_EGL_VALIDATE(thread, DestroyStreamKHR, GetStreamIfValid(display, streamObject), EGL_FALSE,
if (error.isError()) display, streamObject);
{
thread->setError(error, GetDebug(), "eglDestroyStreamKHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroyStreamKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroyStreamKHR",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
display->destroyStream(streamObject); display->destroyStream(streamObject);
...@@ -596,13 +414,8 @@ EGLBoolean EGLAPIENTRY EGL_StreamAttribKHR(EGLDisplay dpy, ...@@ -596,13 +414,8 @@ EGLBoolean EGLAPIENTRY EGL_StreamAttribKHR(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
Error error = ValidateStreamAttribKHR(display, streamObject, attribute, value); ANGLE_EGL_VALIDATE(thread, StreamAttribKHR, GetStreamIfValid(display, streamObject), EGL_FALSE,
if (error.isError()) display, streamObject, attribute, value);
{
thread->setError(error, GetDebug(), "eglStreamAttribKHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamAttribKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamAttribKHR",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
switch (attribute) switch (attribute)
...@@ -636,13 +449,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryStreamKHR(EGLDisplay dpy, ...@@ -636,13 +449,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryStreamKHR(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
Error error = ValidateQueryStreamKHR(display, streamObject, attribute, value); ANGLE_EGL_VALIDATE(thread, QueryStreamKHR, GetStreamIfValid(display, streamObject), EGL_FALSE,
if (error.isError()) display, streamObject, attribute, value);
{
thread->setError(error, GetDebug(), "eglQueryStreamKHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryStreamKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryStreamKHR",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
switch (attribute) switch (attribute)
...@@ -679,13 +487,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryStreamu64KHR(EGLDisplay dpy, ...@@ -679,13 +487,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryStreamu64KHR(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
Error error = ValidateQueryStreamu64KHR(display, streamObject, attribute, value); ANGLE_EGL_VALIDATE(thread, QueryStreamu64KHR, GetStreamIfValid(display, streamObject),
if (error.isError()) EGL_FALSE, display, streamObject, attribute, value);
{
thread->setError(error, GetDebug(), "eglQueryStreamu64KHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryStreamu64KHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryStreamu64KHR",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
switch (attribute) switch (attribute)
...@@ -715,23 +518,15 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EG ...@@ -715,23 +518,15 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EG
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
gl::Context *context = gl::GetValidGlobalContext(); gl::Context *context = gl::GetValidGlobalContext();
Error error = ValidateStreamConsumerGLTextureExternalKHR(display, context, streamObject); ANGLE_EGL_VALIDATE(thread, StreamConsumerGLTextureExternalKHR,
if (error.isError()) GetStreamIfValid(display, streamObject), EGL_FALSE, display, context,
{ streamObject);
thread->setError(error, GetDebug(), "eglStreamConsumerGLTextureExternalKHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamConsumerGLTextureExternalKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamConsumerGLTextureExternalKHR",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
error = streamObject->createConsumerGLTextureExternal(AttributeMap(), context); ANGLE_EGL_TRY_RETURN(thread,
if (error.isError()) streamObject->createConsumerGLTextureExternal(AttributeMap(), context),
{ "eglStreamConsumerGLTextureExternalKHR",
thread->setError(error, GetDebug(), "eglStreamConsumerGLTextureExternalKHR", GetStreamIfValid(display, streamObject), EGL_FALSE);
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
} }
...@@ -747,23 +542,13 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR ...@@ -747,23 +542,13 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
gl::Context *context = gl::GetValidGlobalContext(); gl::Context *context = gl::GetValidGlobalContext();
Error error = ValidateStreamConsumerAcquireKHR(display, context, streamObject); ANGLE_EGL_VALIDATE(thread, StreamConsumerAcquireKHR, GetStreamIfValid(display, streamObject),
if (error.isError()) EGL_FALSE, display, context, streamObject);
{
thread->setError(error, GetDebug(), "eglStreamConsumerAcquireKHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamConsumerAcquireKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamConsumerAcquireKHR",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
error = streamObject->consumerAcquire(context); ANGLE_EGL_TRY_RETURN(thread, streamObject->consumerAcquire(context),
if (error.isError()) "eglStreamConsumerAcquireKHR", GetStreamIfValid(display, streamObject),
{ EGL_FALSE);
thread->setError(error, GetDebug(), "eglStreamConsumerAcquireKHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
} }
...@@ -779,23 +564,13 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR ...@@ -779,23 +564,13 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
gl::Context *context = gl::GetValidGlobalContext(); gl::Context *context = gl::GetValidGlobalContext();
Error error = ValidateStreamConsumerReleaseKHR(display, context, streamObject); ANGLE_EGL_VALIDATE(thread, StreamConsumerReleaseKHR, GetStreamIfValid(display, streamObject),
if (error.isError()) EGL_FALSE, display, context, streamObject);
{
thread->setError(error, GetDebug(), "eglSStreamConsumerReleaseKHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamConsumerReleaseKHR", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamConsumerReleaseKHR",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
error = streamObject->consumerRelease(context); ANGLE_EGL_TRY_RETURN(thread, streamObject->consumerRelease(context),
if (error.isError()) "eglStreamConsumerReleaseKHR", GetStreamIfValid(display, streamObject),
{ EGL_FALSE);
thread->setError(error, GetDebug(), "eglStreamConsumerReleaseKHR",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
} }
...@@ -815,25 +590,15 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalAttribsNV(EGLDisplay d ...@@ -815,25 +590,15 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalAttribsNV(EGLDisplay d
gl::Context *context = gl::GetValidGlobalContext(); gl::Context *context = gl::GetValidGlobalContext();
AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
Error error = ValidateStreamConsumerGLTextureExternalAttribsNV(display, context, streamObject, ANGLE_EGL_VALIDATE(thread, StreamConsumerGLTextureExternalAttribsNV,
attributes); GetStreamIfValid(display, streamObject), EGL_FALSE, display, context,
if (error.isError()) streamObject, attributes);
{
thread->setError(error, GetDebug(), "eglStreamConsumerGLTextureExternalAttribsNV",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(),
"eglStreamConsumerGLTextureExternalAttribsNV", GetDisplayIfValid(display), "eglStreamConsumerGLTextureExternalAttribsNV", GetDisplayIfValid(display),
EGL_FALSE); EGL_FALSE);
error = streamObject->createConsumerGLTextureExternal(attributes, context); ANGLE_EGL_TRY_RETURN(thread, streamObject->createConsumerGLTextureExternal(attributes, context),
if (error.isError()) "eglStreamConsumerGLTextureExternalAttribsNV",
{ GetStreamIfValid(display, streamObject), EGL_FALSE);
thread->setError(error, GetDebug(), "eglStreamConsumerGLTextureExternalAttribsNV",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
} }
...@@ -852,24 +617,15 @@ EGLBoolean EGLAPIENTRY EGL_CreateStreamProducerD3DTextureANGLE(EGLDisplay dpy, ...@@ -852,24 +617,15 @@ EGLBoolean EGLAPIENTRY EGL_CreateStreamProducerD3DTextureANGLE(EGLDisplay dpy,
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
Error error = ValidateCreateStreamProducerD3DTextureANGLE(display, streamObject, attributes); ANGLE_EGL_VALIDATE(thread, CreateStreamProducerD3DTextureANGLE,
if (error.isError()) GetStreamIfValid(display, streamObject), EGL_FALSE, display, streamObject,
{ attributes);
thread->setError(error, GetDebug(), "eglCreateStreamProducerD3DTextureANGLE",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(),
"eglCreateStreamProducerD3DTextureANGLE", GetDisplayIfValid(display), "eglCreateStreamProducerD3DTextureANGLE", GetDisplayIfValid(display),
EGL_FALSE); EGL_FALSE);
error = streamObject->createProducerD3D11Texture(attributes); ANGLE_EGL_TRY_RETURN(thread, streamObject->createProducerD3D11Texture(attributes),
if (error.isError()) "eglCreateStreamProducerD3DTextureANGLE",
{ GetStreamIfValid(display, streamObject), EGL_FALSE);
thread->setError(error, GetDebug(), "eglCreateStreamProducerD3DTextureANGLE",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
} }
...@@ -891,23 +647,13 @@ EGLBoolean EGLAPIENTRY EGL_StreamPostD3DTextureANGLE(EGLDisplay dpy, ...@@ -891,23 +647,13 @@ EGLBoolean EGLAPIENTRY EGL_StreamPostD3DTextureANGLE(EGLDisplay dpy,
Stream *streamObject = static_cast<Stream *>(stream); Stream *streamObject = static_cast<Stream *>(stream);
AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
Error error = ValidateStreamPostD3DTextureANGLE(display, streamObject, texture, attributes); ANGLE_EGL_VALIDATE(thread, StreamPostD3DTextureANGLE, GetStreamIfValid(display, streamObject),
if (error.isError()) EGL_FALSE, display, streamObject, texture, attributes);
{
thread->setError(error, GetDebug(), "eglStreamPostD3DTextureANGLE",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamPostD3DTextureANGLE", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglStreamPostD3DTextureANGLE",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
error = streamObject->postD3D11Texture(texture, attributes); ANGLE_EGL_TRY_RETURN(thread, streamObject->postD3D11Texture(texture, attributes),
if (error.isError()) "eglStreamPostD3DTextureANGLE", GetStreamIfValid(display, streamObject),
{ EGL_FALSE);
thread->setError(error, GetDebug(), "eglStreamPostD3DTextureANGLE",
GetStreamIfValid(display, streamObject));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
} }
...@@ -929,9 +675,8 @@ ANGLE_EXPORT EGLSync EGLAPIENTRY EGL_CreateSyncKHR(EGLDisplay dpy, ...@@ -929,9 +675,8 @@ ANGLE_EXPORT EGLSync EGLAPIENTRY EGL_CreateSyncKHR(EGLDisplay dpy,
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
egl::Display *currentDisplay = currentContext ? currentContext->getDisplay() : nullptr; egl::Display *currentDisplay = currentContext ? currentContext->getDisplay() : nullptr;
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, CreateSyncKHR, GetDisplayIfValid(display), EGL_NO_SYNC, display,
thread, ValidateCreateSyncKHR(display, type, attributes, currentDisplay, currentContext), type, attributes, currentDisplay, currentContext);
"eglCreateSync", GetDisplayIfValid(display), EGL_NO_SYNC);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateSync", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglCreateSync",
GetDisplayIfValid(display), EGL_NO_SYNC); GetDisplayIfValid(display), EGL_NO_SYNC);
egl::Sync *syncObject = nullptr; egl::Sync *syncObject = nullptr;
...@@ -952,8 +697,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_DestroySyncKHR(EGLDisplay dpy, EGLSync s ...@@ -952,8 +697,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_DestroySyncKHR(EGLDisplay dpy, EGLSync s
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateDestroySync(display, syncObject), "eglDestroySync", ANGLE_EGL_VALIDATE(thread, DestroySync, GetDisplayIfValid(display), EGL_FALSE, display,
GetDisplayIfValid(display), EGL_FALSE); syncObject);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroySync", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroySync",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
display->destroySync(syncObject); display->destroySync(syncObject);
...@@ -977,8 +722,8 @@ ANGLE_EXPORT EGLint EGLAPIENTRY EGL_ClientWaitSyncKHR(EGLDisplay dpy, ...@@ -977,8 +722,8 @@ ANGLE_EXPORT EGLint EGLAPIENTRY EGL_ClientWaitSyncKHR(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(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_VALIDATE(thread, ClientWaitSync, GetSyncIfValid(display, syncObject), EGL_FALSE,
"eglClientWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE); display, syncObject, flags, timeout);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglClientWaitSync", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglClientWaitSync",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
...@@ -1006,8 +751,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetSyncAttribKHR(EGLDisplay dpy, ...@@ -1006,8 +751,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetSyncAttribKHR(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(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_VALIDATE(thread, GetSyncAttribKHR, GetSyncIfValid(display, syncObject), EGL_FALSE,
"eglGetSyncAttrib", GetSyncIfValid(display, syncObject), EGL_FALSE); display, syncObject, attribute, value);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetSyncAttrib", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetSyncAttrib",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, GetSyncAttrib(display, syncObject, attribute, value), ANGLE_EGL_TRY_RETURN(thread, GetSyncAttrib(display, syncObject, attribute, value),
...@@ -1030,8 +775,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSync sync ...@@ -1030,8 +775,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSync sync
gl::Context *context = thread->getContext(); gl::Context *context = thread->getContext();
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_VALIDATE(thread, WaitSync, GetSyncIfValid(display, syncObject), EGL_FALSE, display,
"eglWaitSync", GetSyncIfValid(display, syncObject), EGL_FALSE); context, syncObject, flags);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitSync", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglWaitSync",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
...@@ -1058,22 +803,12 @@ EGLBoolean EGLAPIENTRY EGL_GetMscRateANGLE(EGLDisplay dpy, ...@@ -1058,22 +803,12 @@ EGLBoolean EGLAPIENTRY EGL_GetMscRateANGLE(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateGetMscRateANGLE(display, eglSurface, numerator, denominator); ANGLE_EGL_VALIDATE(thread, GetMscRateANGLE, GetSurfaceIfValid(display, eglSurface), EGL_FALSE,
if (error.isError()) display, eglSurface, numerator, denominator);
{
thread->setError(error, GetDebug(), "eglGetMscRateANGLE",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetMscRateANGLE", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetMscRateANGLE",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
error = eglSurface->getMscRate(numerator, denominator); ANGLE_EGL_TRY_RETURN(thread, eglSurface->getMscRate(numerator, denominator),
if (error.isError()) "eglGetMscRateANGLE", GetSurfaceIfValid(display, eglSurface), EGL_FALSE);
{
thread->setError(error, GetDebug(), "eglGetMscRateANGLE",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
...@@ -1096,22 +831,13 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncValuesCHROMIUM(EGLDisplay dpy, ...@@ -1096,22 +831,13 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncValuesCHROMIUM(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateGetSyncValuesCHROMIUM(display, eglSurface, ust, msc, sbc); ANGLE_EGL_VALIDATE(thread, GetSyncValuesCHROMIUM, GetSurfaceIfValid(display, eglSurface),
if (error.isError()) EGL_FALSE, display, eglSurface, ust, msc, sbc);
{
thread->setError(error, GetDebug(), "eglGetSyncValuesCHROMIUM",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetSyncValuesCHROMIUM", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetSyncValuesCHROMIUM",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
error = eglSurface->getSyncValues(ust, msc, sbc); ANGLE_EGL_TRY_RETURN(thread, eglSurface->getSyncValues(ust, msc, sbc),
if (error.isError()) "eglGetSyncValuesCHROMIUM", GetSurfaceIfValid(display, eglSurface),
{ EGL_FALSE);
thread->setError(error, GetDebug(), "eglGetSyncValuesCHROMIUM",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
...@@ -1133,22 +859,13 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithDamageKHR(EGLDisplay dpy, ...@@ -1133,22 +859,13 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithDamageKHR(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateSwapBuffersWithDamageKHR(display, eglSurface, rects, n_rects); ANGLE_EGL_VALIDATE(thread, SwapBuffersWithDamageKHR, GetSurfaceIfValid(display, eglSurface),
if (error.isError()) EGL_FALSE, display, eglSurface, rects, n_rects);
{
thread->setError(error, GetDebug(), "eglSwapBuffersWithDamageEXT",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSwapBuffersWithDamageEXT", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSwapBuffersWithDamageEXT",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
error = eglSurface->swapWithDamage(thread->getContext(), rects, n_rects); ANGLE_EGL_TRY_RETURN(thread, eglSurface->swapWithDamage(thread->getContext(), rects, n_rects),
if (error.isError()) "eglSwapBuffersWithDamageEXT", GetSurfaceIfValid(display, eglSurface),
{ EGL_FALSE);
thread->setError(error, GetDebug(), "eglSwapBuffersWithDamageEXT",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
thread->setSuccess(); thread->setSuccess();
return EGL_TRUE; return EGL_TRUE;
...@@ -1167,9 +884,8 @@ EGLBoolean EGLAPIENTRY EGL_PresentationTimeANDROID(EGLDisplay dpy, ...@@ -1167,9 +884,8 @@ EGLBoolean EGLAPIENTRY EGL_PresentationTimeANDROID(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
ANGLE_EGL_TRY_RETURN(thread, ValidatePresentationTimeANDROID(display, eglSurface, time), ANGLE_EGL_VALIDATE(thread, PresentationTimeANDROID, GetSurfaceIfValid(display, eglSurface),
"eglPresentationTimeANDROID", GetSurfaceIfValid(display, eglSurface), EGL_FALSE, display, eglSurface, time);
EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglPresentationTimeANDROID", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglPresentationTimeANDROID",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, eglSurface->setPresentationTime(time), ANGLE_EGL_TRY_RETURN(thread, eglSurface->setPresentationTime(time),
...@@ -1191,8 +907,8 @@ ANGLE_EXPORT void EGLAPIENTRY EGL_SetBlobCacheFuncsANDROID(EGLDisplay dpy, ...@@ -1191,8 +907,8 @@ ANGLE_EXPORT void EGLAPIENTRY EGL_SetBlobCacheFuncsANDROID(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
ANGLE_EGL_TRY(thread, ValidateSetBlobCacheANDROID(display, set, get), ANGLE_EGL_VALIDATE_VOID(thread, SetBlobCacheANDROID, GetDisplayIfValid(display), display, set,
"eglSetBlobCacheFuncsANDROID", GetDisplayIfValid(display)); get);
ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglSetBlobCacheFuncsANDROID", ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglSetBlobCacheFuncsANDROID",
GetDisplayIfValid(display)); GetDisplayIfValid(display));
thread->setSuccess(); thread->setSuccess();
...@@ -1207,8 +923,8 @@ EGLint EGLAPIENTRY EGL_ProgramCacheGetAttribANGLE(EGLDisplay dpy, EGLenum attrib ...@@ -1207,8 +923,8 @@ EGLint EGLAPIENTRY EGL_ProgramCacheGetAttribANGLE(EGLDisplay dpy, EGLenum attrib
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateProgramCacheGetAttribANGLE(display, attrib), ANGLE_EGL_VALIDATE(thread, ProgramCacheGetAttribANGLE, GetDisplayIfValid(display), 0, display,
"eglProgramCacheGetAttribANGLE", GetDisplayIfValid(display), 0); attrib);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglProgramCacheGetAttribANGLE", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglProgramCacheGetAttribANGLE",
GetDisplayIfValid(display), 0); GetDisplayIfValid(display), 0);
thread->setSuccess(); thread->setSuccess();
...@@ -1232,9 +948,8 @@ void EGLAPIENTRY EGL_ProgramCacheQueryANGLE(EGLDisplay dpy, ...@@ -1232,9 +948,8 @@ void EGLAPIENTRY EGL_ProgramCacheQueryANGLE(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY(thread, ANGLE_EGL_VALIDATE_VOID(thread, ProgramCacheQueryANGLE, GetDisplayIfValid(display), display,
ValidateProgramCacheQueryANGLE(display, index, key, keysize, binary, binarysize), index, key, keysize, binary, binarysize);
"eglProgramCacheQueryANGLE", GetDisplayIfValid(display));
ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglProgramCacheQueryANGLE", ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglProgramCacheQueryANGLE",
GetDisplayIfValid(display)); GetDisplayIfValid(display));
ANGLE_EGL_TRY(thread, display->programCacheQuery(index, key, keysize, binary, binarysize), ANGLE_EGL_TRY(thread, display->programCacheQuery(index, key, keysize, binary, binarysize),
...@@ -1258,9 +973,8 @@ void EGLAPIENTRY EGL_ProgramCachePopulateANGLE(EGLDisplay dpy, ...@@ -1258,9 +973,8 @@ void EGLAPIENTRY EGL_ProgramCachePopulateANGLE(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY(thread, ANGLE_EGL_VALIDATE_VOID(thread, ProgramCachePopulateANGLE, GetDisplayIfValid(display), display,
ValidateProgramCachePopulateANGLE(display, key, keysize, binary, binarysize), key, keysize, binary, binarysize);
"eglProgramCachePopulateANGLE", GetDisplayIfValid(display));
ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglProgramCachePopulateANGLE", ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglProgramCachePopulateANGLE",
GetDisplayIfValid(display)); GetDisplayIfValid(display));
ANGLE_EGL_TRY(thread, display->programCachePopulate(key, keysize, binary, binarysize), ANGLE_EGL_TRY(thread, display->programCachePopulate(key, keysize, binary, binarysize),
...@@ -1278,8 +992,8 @@ EGLint EGLAPIENTRY EGL_ProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGL ...@@ -1278,8 +992,8 @@ EGLint EGLAPIENTRY EGL_ProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGL
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateProgramCacheResizeANGLE(display, limit, mode), ANGLE_EGL_VALIDATE(thread, ProgramCacheResizeANGLE, GetDisplayIfValid(display), 0, display,
"eglProgramCacheResizeANGLE", GetDisplayIfValid(display), 0); limit, mode);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglProgramCacheResizeANGLE", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglProgramCacheResizeANGLE",
GetDisplayIfValid(display), 0); GetDisplayIfValid(display), 0);
thread->setSuccess(); thread->setSuccess();
...@@ -1298,12 +1012,8 @@ EGLint EGLAPIENTRY EGL_DebugMessageControlKHR(EGLDEBUGPROCKHR callback, ...@@ -1298,12 +1012,8 @@ EGLint EGLAPIENTRY EGL_DebugMessageControlKHR(EGLDEBUGPROCKHR callback,
AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list); AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
Error error = ValidateDebugMessageControlKHR(callback, attributes); ANGLE_EGL_VALIDATE(thread, DebugMessageControlKHR, nullptr, thread->getError(), callback,
if (error.isError()) attributes);
{
thread->setError(error, GetDebug(), "eglDebugMessageControlKHR", nullptr);
return error.getCode();
}
Debug *debug = GetDebug(); Debug *debug = GetDebug();
debug->setCallback(callback, attributes); debug->setCallback(callback, attributes);
...@@ -1320,12 +1030,7 @@ EGLBoolean EGLAPIENTRY EGL_QueryDebugKHR(EGLint attribute, EGLAttrib *value) ...@@ -1320,12 +1030,7 @@ EGLBoolean EGLAPIENTRY EGL_QueryDebugKHR(EGLint attribute, EGLAttrib *value)
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
Error error = ValidateQueryDebugKHR(attribute, value); ANGLE_EGL_VALIDATE(thread, QueryDebugKHR, nullptr, EGL_FALSE, attribute, value);
if (error.isError())
{
thread->setError(error, GetDebug(), "eglQueryDebugKHR", nullptr);
return EGL_FALSE;
}
Debug *debug = GetDebug(); Debug *debug = GetDebug();
switch (attribute) switch (attribute)
...@@ -1365,22 +1070,10 @@ EGLint EGLAPIENTRY EGL_LabelObjectKHR(EGLDisplay dpy, ...@@ -1365,22 +1070,10 @@ EGLint EGLAPIENTRY EGL_LabelObjectKHR(EGLDisplay dpy,
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ObjectType objectTypePacked = FromEGLenum<ObjectType>(objectType); ObjectType objectTypePacked = FromEGLenum<ObjectType>(objectType);
Error error = ValidateLabelObjectKHR(thread, display, objectTypePacked, object, label); ANGLE_EGL_VALIDATE(thread, LabelObjectKHR,
if (error.isError()) GetLabeledObjectIfValid(thread, display, objectTypePacked, object),
{ thread->getError(), thread, display, objectTypePacked, object, label);
thread->setError(error, GetDebug(), "eglLabelObjectKHR",
GetLabeledObjectIfValid(thread, display, objectTypePacked, object));
return error.getCode();
}
if (display)
{
error = display->prepareForCall();
if (error.isError())
{
thread->setError(error, GetDebug(), "eglLabelObjectKHR", GetDisplayIfValid(display));
return error.getCode();
}
}
LabeledObject *labeledObject = LabeledObject *labeledObject =
GetLabeledObjectIfValid(thread, display, objectTypePacked, object); GetLabeledObjectIfValid(thread, display, objectTypePacked, object);
ASSERT(labeledObject != nullptr); ASSERT(labeledObject != nullptr);
...@@ -1405,9 +1098,9 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingSupportedANDROID(EGLD ...@@ -1405,9 +1098,9 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingSupportedANDROID(EGLD
CompositorTiming nameInternal = FromEGLenum<CompositorTiming>(name); CompositorTiming nameInternal = FromEGLenum<CompositorTiming>(name);
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, GetCompositorTimingSupportedANDROID,
thread, ValidateGetCompositorTimingSupportedANDROID(display, eglSurface, nameInternal), GetSurfaceIfValid(display, eglSurface), EGL_FALSE, display, eglSurface,
"eglQueryTimestampSupportedANDROID", GetSurfaceIfValid(display, eglSurface), EGL_FALSE); nameInternal);
thread->setSuccess(); thread->setSuccess();
return eglSurface->getSupportedCompositorTimings().test(nameInternal); return eglSurface->getSupportedCompositorTimings().test(nameInternal);
...@@ -1430,10 +1123,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingANDROID(EGLDisplay dp ...@@ -1430,10 +1123,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingANDROID(EGLDisplay dp
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, GetCompositorTimingANDROID, GetSurfaceIfValid(display, eglSurface),
thread, EGL_FALSE, display, eglSurface, numTimestamps, names, values);
ValidateGetCompositorTimingANDROID(display, eglSurface, numTimestamps, names, values),
"eglGetCompositorTimingANDROIDD", GetSurfaceIfValid(display, eglSurface), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetCompositorTimingANDROIDD", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetCompositorTimingANDROIDD",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, eglSurface->getCompositorTiming(numTimestamps, names, values), ANGLE_EGL_TRY_RETURN(thread, eglSurface->getCompositorTiming(numTimestamps, names, values),
...@@ -1457,9 +1148,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetNextFrameIdANDROID(EGLDisplay dpy, ...@@ -1457,9 +1148,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetNextFrameIdANDROID(EGLDisplay dpy,
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateGetNextFrameIdANDROID(display, eglSurface, frameId), ANGLE_EGL_VALIDATE(thread, GetNextFrameIdANDROID, GetSurfaceIfValid(display, eglSurface),
"eglGetNextFrameIdANDROID", GetSurfaceIfValid(display, eglSurface), EGL_FALSE, display, eglSurface, frameId);
EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetNextFrameIdANDROID", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetNextFrameIdANDROID",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, eglSurface->getNextFrameId(frameId), "eglGetNextFrameIdANDROID", ANGLE_EGL_TRY_RETURN(thread, eglSurface->getNextFrameId(frameId), "eglGetNextFrameIdANDROID",
...@@ -1484,9 +1174,9 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampSupportedANDROID(EGLDis ...@@ -1484,9 +1174,9 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampSupportedANDROID(EGLDis
Timestamp timestampInternal = FromEGLenum<Timestamp>(timestamp); Timestamp timestampInternal = FromEGLenum<Timestamp>(timestamp);
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, GetFrameTimestampSupportedANDROID,
thread, ValidateGetFrameTimestampSupportedANDROID(display, eglSurface, timestampInternal), GetSurfaceIfValid(display, eglSurface), EGL_FALSE, display, eglSurface,
"eglQueryTimestampSupportedANDROID", GetSurfaceIfValid(display, eglSurface), EGL_FALSE); timestampInternal);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryTimestampSupportedANDROID", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryTimestampSupportedANDROID",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
thread->setSuccess(); thread->setSuccess();
...@@ -1512,11 +1202,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampsANDROID(EGLDisplay dpy ...@@ -1512,11 +1202,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampsANDROID(EGLDisplay dpy
Surface *eglSurface = static_cast<Surface *>(surface); Surface *eglSurface = static_cast<Surface *>(surface);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ANGLE_EGL_VALIDATE(thread, GetFrameTimestampsANDROID, GetSurfaceIfValid(display, eglSurface),
ValidateGetFrameTimestampsANDROID(display, eglSurface, frameId, EGL_FALSE, display, eglSurface, frameId, numTimestamps, timestamps, values);
numTimestamps, timestamps, values),
"eglGetFrameTimestampsANDROID", GetSurfaceIfValid(display, eglSurface),
EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetFrameTimestampsANDROID", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglGetFrameTimestampsANDROID",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_TRY_RETURN(
...@@ -1539,8 +1226,8 @@ ANGLE_EXPORT const char *EGLAPIENTRY EGL_QueryStringiANGLE(EGLDisplay dpy, ...@@ -1539,8 +1226,8 @@ ANGLE_EXPORT const char *EGLAPIENTRY EGL_QueryStringiANGLE(EGLDisplay dpy,
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateQueryStringiANGLE(display, name, index), ANGLE_EGL_VALIDATE(thread, QueryStringiANGLE, GetDisplayIfValid(display), nullptr, display,
"eglQueryStringiANGLE", GetDisplayIfValid(display), nullptr); name, index);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryStringiANGLE", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglQueryStringiANGLE",
GetDisplayIfValid(display), nullptr); GetDisplayIfValid(display), nullptr);
thread->setSuccess(); thread->setSuccess();
...@@ -1554,8 +1241,7 @@ EGLClientBuffer EGLAPIENTRY EGL_GetNativeClientBufferANDROID(const struct AHardw ...@@ -1554,8 +1241,7 @@ EGLClientBuffer EGLAPIENTRY EGL_GetNativeClientBufferANDROID(const struct AHardw
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateGetNativeClientBufferANDROID(buffer), ANGLE_EGL_VALIDATE(thread, GetNativeClientBufferANDROID, nullptr, nullptr, buffer);
"eglGetNativeClientBufferANDROID", nullptr, nullptr);
thread->setSuccess(); thread->setSuccess();
return egl::Display::GetNativeClientBuffer(buffer); return egl::Display::GetNativeClientBuffer(buffer);
...@@ -1574,8 +1260,7 @@ EGLClientBuffer EGLAPIENTRY EGL_CreateNativeClientBufferANDROID(const EGLint *at ...@@ -1574,8 +1260,7 @@ EGLClientBuffer EGLAPIENTRY EGL_CreateNativeClientBufferANDROID(const EGLint *at
"eglCreateNativeClientBufferANDROID", nullptr, nullptr); "eglCreateNativeClientBufferANDROID", nullptr, nullptr);
const AttributeMap &attribMap = AttributeMap::CreateFromIntArray(attrib_list); const AttributeMap &attribMap = AttributeMap::CreateFromIntArray(attrib_list);
ANGLE_EGL_TRY_RETURN(thread, ValidateCreateNativeClientBufferANDROID(attribMap), ANGLE_EGL_VALIDATE(thread, CreateNativeClientBufferANDROID, nullptr, nullptr, attribMap);
"eglCreateNativeClientBufferANDROID", nullptr, nullptr);
EGLClientBuffer eglClientBuffer = nullptr; EGLClientBuffer eglClientBuffer = nullptr;
ANGLE_EGL_TRY_RETURN(thread, ANGLE_EGL_TRY_RETURN(thread,
...@@ -1596,9 +1281,8 @@ EGLint EGLAPIENTRY EGL_DupNativeFenceFDANDROID(EGLDisplay dpy, EGLSyncKHR sync) ...@@ -1596,9 +1281,8 @@ EGLint EGLAPIENTRY EGL_DupNativeFenceFDANDROID(EGLDisplay dpy, EGLSyncKHR sync)
Sync *syncObject = static_cast<Sync *>(sync); Sync *syncObject = static_cast<Sync *>(sync);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN(thread, ValidateDupNativeFenceFDANDROID(display, syncObject), ANGLE_EGL_VALIDATE(thread, DupNativeFenceFDANDROID, GetSyncIfValid(display, syncObject),
"eglDupNativeFenceFDANDROID", GetSyncIfValid(display, syncObject), EGL_NO_NATIVE_FENCE_FD_ANDROID, display, syncObject);
EGL_NO_NATIVE_FENCE_FD_ANDROID);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDupNativeFenceFDANDROID", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDupNativeFenceFDANDROID",
GetDisplayIfValid(display), EGL_NO_NATIVE_FENCE_FD_ANDROID); GetDisplayIfValid(display), EGL_NO_NATIVE_FENCE_FD_ANDROID);
EGLint result = EGL_NO_NATIVE_FENCE_FD_ANDROID; EGLint result = EGL_NO_NATIVE_FENCE_FD_ANDROID;
...@@ -1623,9 +1307,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithFrameTokenANGLE(EGLDisplay dpy, ...@@ -1623,9 +1307,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithFrameTokenANGLE(EGLDisplay dpy,
egl::Surface *eglSurface = static_cast<egl::Surface *>(surface); egl::Surface *eglSurface = static_cast<egl::Surface *>(surface);
Thread *thread = egl::GetCurrentThread(); Thread *thread = egl::GetCurrentThread();
ANGLE_EGL_TRY_RETURN( ANGLE_EGL_VALIDATE(thread, SwapBuffersWithFrameTokenANGLE, GetDisplayIfValid(display),
thread, ValidateSwapBuffersWithFrameTokenANGLE(display, eglSurface, frametoken), EGL_FALSE, display, eglSurface, frametoken);
"eglSwapBuffersWithFrameTokenANGLE", GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSwapBuffersWithFrameTokenANGLE", ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglSwapBuffersWithFrameTokenANGLE",
GetDisplayIfValid(display), EGL_FALSE); GetDisplayIfValid(display), EGL_FALSE);
ANGLE_EGL_TRY_RETURN(thread, eglSurface->swapWithFrameToken(thread->getContext(), frametoken), ANGLE_EGL_TRY_RETURN(thread, eglSurface->swapWithFrameToken(thread->getContext(), frametoken),
...@@ -1646,8 +1329,8 @@ void EGLAPIENTRY EGL_ReleaseHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx) ...@@ -1646,8 +1329,8 @@ void EGLAPIENTRY EGL_ReleaseHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
gl::Context *context = static_cast<gl::Context *>(ctx); gl::Context *context = static_cast<gl::Context *>(ctx);
ANGLE_EGL_TRY(thread, ValidateContext(display, context), "eglReleaseHighPowerGPUANGLE", ANGLE_EGL_VALIDATE_VOID(thread, ReleaseHighPowerGPUANGLE, GetDisplayIfValid(display), display,
GetDisplayIfValid(display)); context);
ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglReleaseHighPowerGPUANGLE", ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglReleaseHighPowerGPUANGLE",
GetDisplayIfValid(display)); GetDisplayIfValid(display));
ANGLE_EGL_TRY(thread, context->releaseHighPowerGPU(), "eglReleaseHighPowerGPUANGLE", ANGLE_EGL_TRY(thread, context->releaseHighPowerGPU(), "eglReleaseHighPowerGPUANGLE",
...@@ -1666,8 +1349,8 @@ void EGLAPIENTRY EGL_ReacquireHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx) ...@@ -1666,8 +1349,8 @@ void EGLAPIENTRY EGL_ReacquireHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
gl::Context *context = static_cast<gl::Context *>(ctx); gl::Context *context = static_cast<gl::Context *>(ctx);
ANGLE_EGL_TRY(thread, ValidateContext(display, context), "eglReacquireHighPowerGPUANGLE", ANGLE_EGL_VALIDATE_VOID(thread, ReacquireHighPowerGPUANGLE, GetDisplayIfValid(display), display,
GetDisplayIfValid(display)); context);
ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglReacquireHighPowerGPUANGLE", ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglReacquireHighPowerGPUANGLE",
GetDisplayIfValid(display)); GetDisplayIfValid(display));
ANGLE_EGL_TRY(thread, context->reacquireHighPowerGPU(), "eglReacquireHighPowerGPUANGLE", ANGLE_EGL_TRY(thread, context->reacquireHighPowerGPU(), "eglReacquireHighPowerGPUANGLE",
...@@ -1684,8 +1367,7 @@ void EGLAPIENTRY EGL_HandleGPUSwitchANGLE(EGLDisplay dpy) ...@@ -1684,8 +1367,7 @@ void EGLAPIENTRY EGL_HandleGPUSwitchANGLE(EGLDisplay dpy)
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
ANGLE_EGL_TRY(thread, ValidateDisplay(display), "eglHandleGPUSwitchANGLE", ANGLE_EGL_VALIDATE_VOID(thread, HandleGPUSwitchANGLE, GetDisplayIfValid(display), display);
GetDisplayIfValid(display));
ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglHandleGPUSwitchANGLE", ANGLE_EGL_TRY(thread, display->prepareForCall(), "eglHandleGPUSwitchANGLE",
GetDisplayIfValid(display)); GetDisplayIfValid(display));
ANGLE_EGL_TRY(thread, display->handleGPUSwitch(), "eglHandleGPUSwitchANGLE", ANGLE_EGL_TRY(thread, display->handleGPUSwitch(), "eglHandleGPUSwitchANGLE",
...@@ -1706,8 +1388,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_SignalSyncKHR(EGLDisplay dpy, EGLSync sy ...@@ -1706,8 +1388,8 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_SignalSyncKHR(EGLDisplay dpy, EGLSync sy
egl::Display *display = static_cast<egl::Display *>(dpy); egl::Display *display = static_cast<egl::Display *>(dpy);
egl::Sync *syncObject = static_cast<Sync *>(sync); egl::Sync *syncObject = static_cast<Sync *>(sync);
ANGLE_EGL_TRY_RETURN(thread, ValidateSignalSyncKHR(display, syncObject, mode), ANGLE_EGL_VALIDATE(thread, SignalSyncKHR, GetSyncIfValid(display, syncObject), EGL_FALSE,
"eglSignalSyncKHR", GetSyncIfValid(display, syncObject), EGL_FALSE); display, syncObject, mode);
gl::Context *currentContext = thread->getContext(); gl::Context *currentContext = thread->getContext();
ANGLE_EGL_TRY_RETURN(thread, syncObject->signal(display, currentContext, mode), ANGLE_EGL_TRY_RETURN(thread, syncObject->signal(display, currentContext, mode),
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "common/platform.h" #include "common/platform.h"
#include "common/system_utils.h" #include "common/system_utils.h"
#include "libANGLE/ErrorStrings.h" #include "libANGLE/ErrorStrings.h"
#include "libANGLE/Thread.h"
#include "libGLESv2/resource.h" #include "libGLESv2/resource.h"
#include <atomic> #include <atomic>
...@@ -20,8 +21,6 @@ namespace egl ...@@ -20,8 +21,6 @@ namespace egl
{ {
namespace namespace
{ {
Debug *g_Debug = nullptr;
ANGLE_REQUIRE_CONSTANT_INIT std::atomic<angle::GlobalMutex *> g_Mutex(nullptr); ANGLE_REQUIRE_CONSTANT_INIT std::atomic<angle::GlobalMutex *> g_Mutex(nullptr);
static_assert(std::is_trivially_destructible<decltype(g_Mutex)>::value, static_assert(std::is_trivially_destructible<decltype(g_Mutex)>::value,
"global mutex is not trivially destructible"); "global mutex is not trivially destructible");
...@@ -47,15 +46,6 @@ Thread *AllocateCurrentThread() ...@@ -47,15 +46,6 @@ Thread *AllocateCurrentThread()
return gCurrentThread; return gCurrentThread;
} }
void AllocateDebug()
{
// All EGL calls use a global lock, this is thread safe
if (g_Debug == nullptr)
{
g_Debug = new Debug();
}
}
void AllocateMutex() void AllocateMutex()
{ {
if (g_Mutex == nullptr) if (g_Mutex == nullptr)
...@@ -85,12 +75,6 @@ Thread *GetCurrentThread() ...@@ -85,12 +75,6 @@ Thread *GetCurrentThread()
return (current ? current : AllocateCurrentThread()); return (current ? current : AllocateCurrentThread());
} }
Debug *GetDebug()
{
AllocateDebug();
return g_Debug;
}
void SetContextCurrent(Thread *thread, gl::Context *context) void SetContextCurrent(Thread *thread, gl::Context *context)
{ {
ASSERT(gCurrentThread); ASSERT(gCurrentThread);
...@@ -122,17 +106,11 @@ namespace egl ...@@ -122,17 +106,11 @@ namespace egl
namespace namespace
{ {
void DeallocateCurrentThread() void DeallocateCurrentThread()
{ {
SafeDelete(gCurrentThread); SafeDelete(gCurrentThread);
} }
void DeallocateDebug()
{
SafeDelete(g_Debug);
}
void DeallocateMutex() void DeallocateMutex()
{ {
angle::GlobalMutex *mutex = g_Mutex.exchange(nullptr); angle::GlobalMutex *mutex = g_Mutex.exchange(nullptr);
...@@ -145,8 +123,7 @@ void DeallocateMutex() ...@@ -145,8 +123,7 @@ void DeallocateMutex()
bool InitializeProcess() bool InitializeProcess()
{ {
ASSERT(g_Debug == nullptr); EnsureDebugAllocated();
AllocateDebug();
AllocateMutex(); AllocateMutex();
return AllocateCurrentThread() != nullptr; return AllocateCurrentThread() != nullptr;
} }
......
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