Commit dd43fccc by Geoff Lang

Add EGL validation helper files and move some validation to them.

BUG=angle:658 Change-Id: Id560268a280f2fa7d75a7d0727dac830fe8de9f1 Reviewed-on: https://chromium-review.googlesource.com/242034Reviewed-by: 's avatarKenneth Russell <kbr@chromium.org> Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 1d8ae673
//
// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// validationEGL.cpp: Validation functions for generic EGL entry point parameters
#include "libANGLE/validationEGL.h"
#include "libANGLE/Config.h"
#include "libANGLE/Context.h"
#include "libANGLE/Display.h"
#include "libANGLE/Surface.h"
namespace egl
{
Error ValidateDisplay(const Display *display)
{
if (display == EGL_NO_DISPLAY)
{
return Error(EGL_BAD_DISPLAY);
}
if (!display->isInitialized())
{
return Error(EGL_NOT_INITIALIZED);
}
return Error(EGL_SUCCESS);
}
Error ValidateSurface(const Display *display, Surface *surface)
{
Error error = ValidateDisplay(display);
if (error.isError())
{
return error;
}
if (!display->isValidSurface(surface))
{
return Error(EGL_BAD_SURFACE);
}
return Error(EGL_SUCCESS);
}
Error ValidateConfig(const Display *display, const Config *config)
{
Error error = ValidateDisplay(display);
if (error.isError())
{
return error;
}
if (!display->isValidConfig(config))
{
return Error(EGL_BAD_CONFIG);
}
return Error(EGL_SUCCESS);
}
Error ValidateContext(const Display *display, gl::Context *context)
{
Error error = ValidateDisplay(display);
if (error.isError())
{
return error;
}
if (!display->isValidContext(context))
{
return Error(EGL_BAD_CONTEXT);
}
return Error(EGL_SUCCESS);
}
}
//
// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// validationEGL.h: Validation functions for generic EGL entry point parameters
#ifndef LIBANGLE_VALIDATIONEGL_H_
#define LIBANGLE_VALIDATIONEGL_H_
#include "libANGLE/Error.h"
namespace gl
{
class Context;
}
namespace egl
{
struct Config;
class Display;
class Surface;
// Object validation
Error ValidateDisplay(const Display *display);
Error ValidateSurface(const Display *display, Surface *surface);
Error ValidateConfig(const Display *display, const Config *config);
Error ValidateContext(const Display *display, gl::Context *context);
}
#endif // LIBANGLE_VALIDATIONEGL_H_
......@@ -129,6 +129,8 @@
'libANGLE/renderer/TransformFeedbackImpl.h',
'libANGLE/renderer/VertexArrayImpl.h',
'libANGLE/renderer/Workarounds.h',
'libANGLE/validationEGL.cpp',
'libANGLE/validationEGL.h',
'libANGLE/validationES.cpp',
'libANGLE/validationES.h',
'libANGLE/validationES2.cpp',
......
......@@ -11,46 +11,13 @@
#include "libANGLE/Display.h"
#include "libANGLE/Surface.h"
#include "libANGLE/validationEGL.h"
#include "common/debug.h"
namespace egl
{
// EGL object validation
static bool ValidateDisplay(Display *display)
{
if (display == EGL_NO_DISPLAY)
{
SetGlobalError(Error(EGL_BAD_DISPLAY));
return false;
}
if (!display->isInitialized())
{
SetGlobalError(Error(EGL_NOT_INITIALIZED));
return false;
}
return true;
}
static bool ValidateSurface(Display *display, Surface *surface)
{
if (!ValidateDisplay(display))
{
return false;
}
if (!display->isValidSurface(surface))
{
SetGlobalError(Error(EGL_BAD_SURFACE));
return false;
}
return true;
}
// EGL_ANGLE_query_surface_pointer
EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value)
{
......@@ -58,10 +25,12 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
dpy, surface, attribute, value);
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = (Surface*)surface;
Surface *eglSurface = static_cast<Surface*>(surface);
if (!ValidateSurface(display, eglSurface))
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
SetGlobalError(error);
return EGL_FALSE;
}
......@@ -93,7 +62,7 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
return EGL_FALSE;
}
Error error = eglSurface->querySurfacePointerANGLE(attribute, value);
error = eglSurface->querySurfacePointerANGLE(attribute, value);
SetGlobalError(error);
return (error.isError() ? EGL_FALSE : EGL_TRUE);
}
......@@ -113,8 +82,10 @@ EGLBoolean EGLAPIENTRY PostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLin
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = static_cast<Surface*>(surface);
if (!ValidateSurface(display, eglSurface))
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
SetGlobalError(error);
return EGL_FALSE;
}
......@@ -137,7 +108,7 @@ EGLBoolean EGLAPIENTRY PostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLin
return EGL_TRUE;
}
Error error = eglSurface->postSubBuffer(x, y, width, height);
error = eglSurface->postSubBuffer(x, y, width, height);
if (error.isError())
{
SetGlobalError(error);
......
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