| Index: gpu/gles2_conform_support/egl/egl.cc
|
| diff --git a/gpu/gles2_conform_support/egl/egl.cc b/gpu/gles2_conform_support/egl/egl.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1e414d323a53466a64290f322777387b7620c594
|
| --- /dev/null
|
| +++ b/gpu/gles2_conform_support/egl/egl.cc
|
| @@ -0,0 +1,377 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <EGL/egl.h>
|
| +
|
| +#include "ui/gfx/gl/gl_context.h"
|
| +#include "ui/gfx/gl/gl_surface.h"
|
| +#include "base/command_line.h"
|
| +#include "gpu/gles2_conform_support/egl/display.h"
|
| +
|
| +namespace {
|
| +void SetCurrentError(EGLint error_code) {
|
| +}
|
| +
|
| +template<typename T>
|
| +T EglError(EGLint error_code, T return_value) {
|
| + SetCurrentError(error_code);
|
| + return return_value;
|
| +}
|
| +
|
| +template<typename T>
|
| +T EglSuccess(T return_value) {
|
| + SetCurrentError(EGL_SUCCESS);
|
| + return return_value;
|
| +}
|
| +
|
| +EGLint ValidateDisplay(EGLDisplay dpy) {
|
| + if (dpy == EGL_NO_DISPLAY)
|
| + return EGL_BAD_DISPLAY;
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->is_initialized())
|
| + return EGL_NOT_INITIALIZED;
|
| +
|
| + return EGL_SUCCESS;
|
| +}
|
| +
|
| +EGLint ValidateDisplayConfig(EGLDisplay dpy, EGLConfig config) {
|
| + EGLint error_code = ValidateDisplay(dpy);
|
| + if (error_code != EGL_SUCCESS)
|
| + return error_code;
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->IsValidConfig(config))
|
| + return EGL_BAD_CONFIG;
|
| +
|
| + return EGL_SUCCESS;
|
| +}
|
| +
|
| +EGLint ValidateDisplaySurface(EGLDisplay dpy, EGLSurface surface) {
|
| + EGLint error_code = ValidateDisplay(dpy);
|
| + if (error_code != EGL_SUCCESS)
|
| + return error_code;
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->IsValidSurface(surface))
|
| + return EGL_BAD_SURFACE;
|
| +
|
| + return EGL_SUCCESS;
|
| +}
|
| +
|
| +EGLint ValidateDisplayContext(EGLDisplay dpy, EGLContext context) {
|
| + EGLint error_code = ValidateDisplay(dpy);
|
| + if (error_code != EGL_SUCCESS)
|
| + return error_code;
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->IsValidContext(context))
|
| + return EGL_BAD_CONTEXT;
|
| +
|
| + return EGL_SUCCESS;
|
| +}
|
| +} // namespace
|
| +
|
| +extern "C" {
|
| +EGLint eglGetError() {
|
| + // TODO(alokp): Fix me.
|
| + return EGL_SUCCESS;
|
| +}
|
| +
|
| +EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id) {
|
| + return new egl::Display(display_id);
|
| +}
|
| +
|
| +EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) {
|
| + if (dpy == EGL_NO_DISPLAY)
|
| + return EglError(EGL_BAD_DISPLAY, EGL_FALSE);
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->Initialize())
|
| + return EglError(EGL_NOT_INITIALIZED, EGL_FALSE);
|
| +
|
| + int argc = 1;
|
| + const char* const argv[] = {
|
| + "dummy"
|
| + };
|
| + CommandLine::Init(argc, argv);
|
| + gfx::GLSurface::InitializeOneOff();
|
| +
|
| + *major = 1;
|
| + *minor = 4;
|
| + return EglSuccess(EGL_TRUE);
|
| +}
|
| +
|
| +EGLBoolean eglTerminate(EGLDisplay dpy) {
|
| + EGLint error_code = ValidateDisplay(dpy);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + delete display;
|
| +
|
| + return EglSuccess(EGL_TRUE);
|
| +}
|
| +
|
| +const char* eglQueryString(EGLDisplay dpy, EGLint name) {
|
| + EGLint error_code = ValidateDisplay(dpy);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, static_cast<const char*>(NULL));
|
| +
|
| + switch (name) {
|
| + case EGL_CLIENT_APIS:
|
| + return EglSuccess("OpenGL_ES");
|
| + case EGL_EXTENSIONS:
|
| + return EglSuccess("");
|
| + case EGL_VENDOR:
|
| + return EglSuccess("Google Inc.");
|
| + case EGL_VERSION:
|
| + return EglSuccess("1.4");
|
| + default:
|
| + return EglError(EGL_BAD_PARAMETER, static_cast<const char*>(NULL));
|
| + }
|
| +}
|
| +
|
| +EGLBoolean eglGetConfigs(EGLDisplay dpy,
|
| + EGLConfig* configs,
|
| + EGLint config_size,
|
| + EGLint* num_config) {
|
| + EGLint error_code = ValidateDisplay(dpy);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| +
|
| + if (num_config == NULL)
|
| + return EglError(EGL_BAD_PARAMETER, EGL_FALSE);
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->GetConfigs(configs, config_size, num_config))
|
| + return EglError(EGL_BAD_ATTRIBUTE, EGL_FALSE);
|
| +
|
| + return EglSuccess(EGL_TRUE);
|
| +}
|
| +
|
| +EGLBoolean eglChooseConfig(EGLDisplay dpy,
|
| + const EGLint* attrib_list,
|
| + EGLConfig* configs,
|
| + EGLint config_size,
|
| + EGLint* num_config) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglGetConfigAttrib(EGLDisplay dpy,
|
| + EGLConfig config,
|
| + EGLint attribute,
|
| + EGLint* value) {
|
| + EGLint error_code = ValidateDisplayConfig(dpy, config);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->GetConfigAttrib(config, attribute, value))
|
| + return EglError(EGL_BAD_ATTRIBUTE, EGL_FALSE);
|
| +
|
| + return EglSuccess(EGL_TRUE);
|
| +}
|
| +
|
| +EGLSurface eglCreateWindowSurface(EGLDisplay dpy,
|
| + EGLConfig config,
|
| + EGLNativeWindowType win,
|
| + const EGLint* attrib_list) {
|
| + EGLint error_code = ValidateDisplayConfig(dpy, config);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_NO_SURFACE);
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->IsValidNativeWindow(win))
|
| + return EglError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);
|
| +
|
| + EGLSurface surface = display->CreateWindowSurface(config, win, attrib_list);
|
| + if (surface == EGL_NO_SURFACE)
|
| + return EglError(EGL_BAD_ALLOC, EGL_NO_SURFACE);
|
| +
|
| + return EglSuccess(surface);
|
| +}
|
| +
|
| +EGLSurface eglCreatePbufferSurface(EGLDisplay dpy,
|
| + EGLConfig config,
|
| + const EGLint* attrib_list) {
|
| + return EGL_NO_SURFACE;
|
| +}
|
| +
|
| +EGLSurface eglCreatePixmapSurface(EGLDisplay dpy,
|
| + EGLConfig config,
|
| + EGLNativePixmapType pixmap,
|
| + const EGLint* attrib_list) {
|
| + return EGL_NO_SURFACE;
|
| +}
|
| +
|
| +EGLBoolean eglDestroySurface(EGLDisplay dpy,
|
| + EGLSurface surface) {
|
| + EGLint error_code = ValidateDisplaySurface(dpy, surface);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + display->DestroySurface(surface);
|
| + return EglSuccess(EGL_TRUE);
|
| +}
|
| +
|
| +EGLBoolean eglQuerySurface(EGLDisplay dpy,
|
| + EGLSurface surface,
|
| + EGLint attribute,
|
| + EGLint* value) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglBindAPI(EGLenum api) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLenum eglQueryAPI() {
|
| + return EGL_OPENGL_ES_API;
|
| +}
|
| +
|
| +EGLBoolean eglWaitClient(void) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglReleaseThread(void) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLSurface eglCreatePbufferFromClientBuffer(EGLDisplay dpy,
|
| + EGLenum buftype,
|
| + EGLClientBuffer buffer,
|
| + EGLConfig config,
|
| + const EGLint* attrib_list) {
|
| + return EGL_NO_SURFACE;
|
| +}
|
| +
|
| +EGLBoolean eglSurfaceAttrib(EGLDisplay dpy,
|
| + EGLSurface surface,
|
| + EGLint attribute,
|
| + EGLint value) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglBindTexImage(EGLDisplay dpy,
|
| + EGLSurface surface,
|
| + EGLint buffer) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglReleaseTexImage(EGLDisplay dpy,
|
| + EGLSurface surface,
|
| + EGLint buffer) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLContext eglCreateContext(EGLDisplay dpy,
|
| + EGLConfig config,
|
| + EGLContext share_context,
|
| + const EGLint* attrib_list) {
|
| + EGLint error_code = ValidateDisplayConfig(dpy, config);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_NO_CONTEXT);
|
| +
|
| + if (share_context != EGL_NO_CONTEXT) {
|
| + error_code = ValidateDisplayContext(dpy, share_context);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_NO_CONTEXT);
|
| + }
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + EGLContext context = display->CreateContext(
|
| + config, share_context, attrib_list);
|
| + if (context == EGL_NO_CONTEXT)
|
| + return EglError(EGL_BAD_ALLOC, EGL_NO_CONTEXT);
|
| +
|
| + return EglSuccess(context);
|
| +}
|
| +
|
| +EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx) {
|
| + EGLint error_code = ValidateDisplayContext(dpy, ctx);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + display->DestroyContext(ctx);
|
| + return EGL_TRUE;
|
| +}
|
| +
|
| +EGLBoolean eglMakeCurrent(EGLDisplay dpy,
|
| + EGLSurface draw,
|
| + EGLSurface read,
|
| + EGLContext ctx) {
|
| + if (ctx != EGL_NO_CONTEXT) {
|
| + EGLint error_code = ValidateDisplaySurface(dpy, draw);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| + error_code = ValidateDisplaySurface(dpy, read);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| + error_code = ValidateDisplayContext(dpy, ctx);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| + }
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + if (!display->MakeCurrent(draw, read, ctx))
|
| + return EglError(EGL_CONTEXT_LOST, EGL_FALSE);
|
| + return EGL_TRUE;
|
| +}
|
| +
|
| +EGLContext eglGetCurrentContext() {
|
| + return EGL_NO_CONTEXT;
|
| +}
|
| +
|
| +EGLSurface eglGetCurrentSurface(EGLint readdraw) {
|
| + return EGL_NO_SURFACE;
|
| +}
|
| +
|
| +EGLDisplay eglGetCurrentDisplay() {
|
| + return EGL_NO_DISPLAY;
|
| +}
|
| +
|
| +EGLBoolean eglQueryContext(EGLDisplay dpy,
|
| + EGLContext ctx,
|
| + EGLint attribute,
|
| + EGLint* value) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglWaitGL() {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglWaitNative(EGLint engine) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface surface) {
|
| + EGLint error_code = ValidateDisplaySurface(dpy, surface);
|
| + if (error_code != EGL_SUCCESS)
|
| + return EglError(error_code, EGL_FALSE);
|
| +
|
| + egl::Display* display = static_cast<egl::Display*>(dpy);
|
| + display->SwapBuffers(surface);
|
| + return EglSuccess(EGL_TRUE);
|
| +}
|
| +
|
| +EGLBoolean eglCopyBuffers(EGLDisplay dpy,
|
| + EGLSurface surface,
|
| + EGLNativePixmapType target) {
|
| + return EGL_FALSE;
|
| +}
|
| +
|
| +/* Now, define eglGetProcAddress using the generic function ptr. type */
|
| +__eglMustCastToProperFunctionPointerType
|
| +eglGetProcAddress(const char* procname) {
|
| + return NULL;
|
| +}
|
| +} // extern "C"
|
|
|