summaryrefslogtreecommitdiffstats
path: root/gfx/angle/checkout/src/libGLESv2/global_state.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/angle/checkout/src/libGLESv2/global_state.h')
-rw-r--r--gfx/angle/checkout/src/libGLESv2/global_state.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libGLESv2/global_state.h b/gfx/angle/checkout/src/libGLESv2/global_state.h
new file mode 100644
index 0000000000..8d55b91905
--- /dev/null
+++ b/gfx/angle/checkout/src/libGLESv2/global_state.h
@@ -0,0 +1,61 @@
+//
+// Copyright(c) 2014 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.
+//
+
+// global_state.h : Defines functions for querying the thread-local GL and EGL state.
+
+#ifndef LIBGLESV2_GLOBALSTATE_H_
+#define LIBGLESV2_GLOBALSTATE_H_
+
+#include "libANGLE/Context.h"
+#include "libANGLE/Debug.h"
+#include "libANGLE/Thread.h"
+#include "libANGLE/features.h"
+
+#include <mutex>
+
+namespace egl
+{
+class Debug;
+class Thread;
+
+std::mutex &GetGlobalMutex();
+Thread *GetCurrentThread();
+Debug *GetDebug();
+void SetContextCurrent(Thread *thread, gl::Context *context);
+} // namespace egl
+
+#define ANGLE_SCOPED_GLOBAL_LOCK() \
+ std::lock_guard<std::mutex> globalMutexLock(egl::GetGlobalMutex())
+
+namespace gl
+{
+extern Context *gSingleThreadedContext;
+
+ANGLE_INLINE Context *GetGlobalContext()
+{
+ if (gSingleThreadedContext)
+ {
+ return gSingleThreadedContext;
+ }
+
+ egl::Thread *thread = egl::GetCurrentThread();
+ return thread->getContext();
+}
+
+ANGLE_INLINE Context *GetValidGlobalContext()
+{
+ if (gSingleThreadedContext && !gSingleThreadedContext->isContextLost())
+ {
+ return gSingleThreadedContext;
+ }
+
+ egl::Thread *thread = egl::GetCurrentThread();
+ return thread->getValidContext();
+}
+
+} // namespace gl
+
+#endif // LIBGLESV2_GLOBALSTATE_H_