summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Madill <jmadill@chromium.org>2013-10-23 13:58:09 -0400
committerJamie Madill <jmadill@chromium.org>2013-10-23 13:58:09 -0400
commitb4e0003292f829a0f88a14df4b02a785fcf2b45f (patch)
tree668aecc412c9ab21b644bc147d8f12f8f00161fa
parent5625f658834c52906439ec34613906f2116884db (diff)
downloadangle_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.cpp10
-rw-r--r--src/libGLESv2/Context.h3
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);