diff options
Diffstat (limited to 'gfx/angle/checkout/src/libGLESv2/global_state.h')
-rw-r--r-- | gfx/angle/checkout/src/libGLESv2/global_state.h | 61 |
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_ |