diff options
author | Jamie Madill <jmadill@chromium.org> | 2013-10-23 13:58:09 -0400 |
---|---|---|
committer | Jamie Madill <jmadill@chromium.org> | 2013-10-23 13:58:09 -0400 |
commit | b4e0003292f829a0f88a14df4b02a785fcf2b45f (patch) | |
tree | 668aecc412c9ab21b644bc147d8f12f8f00161fa | |
parent | 5625f658834c52906439ec34613906f2116884db (diff) | |
download | angle_dx11-b4e0003292f829a0f88a14df4b02a785fcf2b45f.tar.gz |
Do not allow context sharing between egl Displays.
This is an explicit error according to the EGL specification.
ANGLEBUG=487
BUG=
Test=WebGL CTS
R=geofflang@chromium.org, shannonwoods@chromium.org
Review URL: https://codereview.appspot.com/15690047
-rw-r--r-- | src/libEGL/libEGL.cpp | 10 | ||||
-rw-r--r-- | src/libGLESv2/Context.h | 3 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/libEGL/libEGL.cpp b/src/libEGL/libEGL.cpp index 6e10c392..320670da 100644 --- a/src/libEGL/libEGL.cpp +++ b/src/libEGL/libEGL.cpp @@ -819,13 +819,21 @@ EGLContext __stdcall eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLConte return egl::error(EGL_BAD_CONFIG, EGL_NO_CONTEXT); } - if (share_context && static_cast<gl::Context*>(share_context)->isResetNotificationEnabled() != reset_notification) + gl::Context *sharedContextPtr = (share_context != EGL_NO_CONTEXT ? static_cast<gl::Context*>(share_context) : NULL); + + if (sharedContextPtr != NULL && sharedContextPtr->isResetNotificationEnabled() != reset_notification) { return egl::error(EGL_BAD_MATCH, EGL_NO_CONTEXT); } egl::Display *display = static_cast<egl::Display*>(dpy); + // Can not share contexts between displays + if (sharedContextPtr != NULL && sharedContextPtr->getRenderer() != display->getRenderer()) + { + return egl::error(EGL_BAD_MATCH, EGL_NO_CONTEXT); + } + if (!validateConfig(display, config)) { return EGL_NO_CONTEXT; diff --git a/src/libGLESv2/Context.h b/src/libGLESv2/Context.h index 9c222be2..349ec130 100644 --- a/src/libGLESv2/Context.h +++ b/src/libGLESv2/Context.h @@ -37,7 +37,6 @@ class Renderer; namespace egl { -class Display; class Surface; } @@ -398,6 +397,8 @@ class Context GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask); + rx::Renderer *getRenderer() { return mRenderer; } + private: DISALLOW_COPY_AND_ASSIGN(Context); |