Commit d20e80b8 by Tobin Ehlis Committed by Commit Bot

More EGL validation refactor

Added separate Validate* functions for CopyBuffers(), BindTexImage(), ReleaseTexImage(), SwapInterval(), and BindAPI(). For ValidateBindTexImage() the textureObject is set by validation when appropriate and then used in the core function to prevent replicating the textureObject look-up code. Bug: angleproject:798 Change-Id: Ia32076a10aa0b044c2bdc8e2e24dd36d002c5022 Reviewed-on: https://chromium-review.googlesource.com/1180090Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
parent f26b27e2
...@@ -2536,18 +2536,6 @@ Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface ...@@ -2536,18 +2536,6 @@ Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface
return NoError(); return NoError();
} }
Error ValidateWaitNative(const Display *display, const EGLint engine)
{
ANGLE_TRY(ValidateDisplay(display));
if (engine != EGL_CORE_NATIVE_ENGINE)
{
return EglBadParameter() << "the 'engine' parameter has an unrecognized value";
}
return NoError();
}
Error ValidateSwapBuffersWithDamageKHR(const Display *display, Error ValidateSwapBuffersWithDamageKHR(const Display *display,
const Surface *surface, const Surface *surface,
EGLint *rects, EGLint *rects,
...@@ -2586,6 +2574,129 @@ Error ValidateSwapBuffersWithDamageKHR(const Display *display, ...@@ -2586,6 +2574,129 @@ Error ValidateSwapBuffersWithDamageKHR(const Display *display,
return NoError(); return NoError();
} }
Error ValidateWaitNative(const Display *display, const EGLint engine)
{
ANGLE_TRY(ValidateDisplay(display));
if (engine != EGL_CORE_NATIVE_ENGINE)
{
return EglBadParameter() << "the 'engine' parameter has an unrecognized value";
}
return NoError();
}
Error ValidateCopyBuffers(Display *display, const Surface *surface)
{
ANGLE_TRY(ValidateSurface(display, surface));
if (display->testDeviceLost())
{
return EglContextLost();
}
return NoError();
}
// Validate state for eglBindTexImage. If context is non-null then textureObject will be set to
// surface's texture that will have an image bound to it
Error ValidateBindTexImage(const Display *display,
const Surface *surface,
const EGLSurface eglSurface,
const EGLint buffer,
const gl::Context *context,
gl::Texture **textureObject)
{
ANGLE_TRY(ValidateSurface(display, surface));
if (buffer != EGL_BACK_BUFFER)
{
return EglBadParameter();
}
if (eglSurface == EGL_NO_SURFACE || surface->getType() == EGL_WINDOW_BIT)
{
return EglBadSurface();
}
if (surface->getBoundTexture())
{
return EglBadAccess();
}
if (surface->getTextureFormat() == TextureFormat::NoTexture)
{
return EglBadMatch();
}
if (context)
{
gl::TextureType type = egl_gl::EGLTextureTargetToTextureType(surface->getTextureTarget());
*textureObject = context->getTargetTexture(type);
ASSERT(*textureObject != nullptr);
if ((*textureObject)->getImmutableFormat())
{
return EglBadMatch();
}
}
return NoError();
}
Error ValidateReleaseTexImage(const Display *display,
const Surface *surface,
const EGLSurface eglSurface,
const EGLint buffer)
{
ANGLE_TRY(ValidateSurface(display, surface));
if (buffer != EGL_BACK_BUFFER)
{
return EglBadParameter();
}
if (eglSurface == EGL_NO_SURFACE || surface->getType() == EGL_WINDOW_BIT)
{
return EglBadSurface();
}
if (surface->getTextureFormat() == TextureFormat::NoTexture)
{
return EglBadMatch();
}
return NoError();
}
Error ValidateSwapInterval(const Display *display, const Surface *draw_surface)
{
ANGLE_TRY(ValidateDisplay(display));
if (draw_surface == nullptr)
{
return EglBadSurface();
}
return NoError();
}
Error ValidateBindAPI(const EGLenum api)
{
switch (api)
{
case EGL_OPENGL_API:
case EGL_OPENVG_API:
return EglBadParameter(); // Not supported by this implementation
case EGL_OPENGL_ES_API:
break;
default:
return EglBadParameter();
}
return NoError();
}
Error ValidatePresentationTimeANDROID(const Display *display, Error ValidatePresentationTimeANDROID(const Display *display,
const Surface *surface, const Surface *surface,
EGLnsecsANDROID time) EGLnsecsANDROID time)
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "common/PackedEnums.h" #include "common/PackedEnums.h"
#include "libANGLE/Error.h" #include "libANGLE/Error.h"
#include "libANGLE/Texture.h"
#include <EGL/egl.h> #include <EGL/egl.h>
#include <EGL/eglext.h> #include <EGL/eglext.h>
...@@ -146,11 +147,29 @@ Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface ...@@ -146,11 +147,29 @@ Error ValidateSwapBuffers(Thread *thread, const Display *display, const Surface
Error ValidateWaitNative(const Display *display, const EGLint engine); Error ValidateWaitNative(const Display *display, const EGLint engine);
Error ValidateCopyBuffers(Display *display, const Surface *surface);
Error ValidateSwapBuffersWithDamageKHR(const Display *display, Error ValidateSwapBuffersWithDamageKHR(const Display *display,
const Surface *surface, const Surface *surface,
EGLint *rects, EGLint *rects,
EGLint n_rects); EGLint n_rects);
Error ValidateBindTexImage(const Display *display,
const Surface *surface,
const EGLSurface eglSurface,
const EGLint buffer,
const gl::Context *context,
gl::Texture **textureObject);
Error ValidateReleaseTexImage(const Display *display,
const Surface *surface,
const EGLSurface eglSurface,
const EGLint buffer);
Error ValidateSwapInterval(const Display *display, const Surface *draw_surface);
Error ValidateBindAPI(const EGLenum api);
Error ValidatePresentationTimeANDROID(const Display *display, Error ValidatePresentationTimeANDROID(const Display *display,
const Surface *surface, const Surface *surface,
EGLnsecsANDROID time); EGLnsecsANDROID time);
......
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