xref: /aosp_15_r20/external/angle/src/libANGLE/Thread.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2016 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // Thread.h : Defines the Thread class which represents a global EGL thread.
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_THREAD_H_
10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_THREAD_H_
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include <EGL/egl.h>
13*8975f5c5SAndroid Build Coastguard Worker 
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Debug.h"
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker #include <atomic>
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker namespace angle
19*8975f5c5SAndroid Build Coastguard Worker {
20*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_USE_ANDROID_TLS_SLOT)
21*8975f5c5SAndroid Build Coastguard Worker extern bool gUseAndroidOpenGLTlsSlot;
22*8975f5c5SAndroid Build Coastguard Worker #endif
23*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
24*8975f5c5SAndroid Build Coastguard Worker 
25*8975f5c5SAndroid Build Coastguard Worker namespace gl
26*8975f5c5SAndroid Build Coastguard Worker {
27*8975f5c5SAndroid Build Coastguard Worker class Context;
28*8975f5c5SAndroid Build Coastguard Worker }  // namespace gl
29*8975f5c5SAndroid Build Coastguard Worker 
30*8975f5c5SAndroid Build Coastguard Worker namespace egl
31*8975f5c5SAndroid Build Coastguard Worker {
32*8975f5c5SAndroid Build Coastguard Worker class Error;
33*8975f5c5SAndroid Build Coastguard Worker class Debug;
34*8975f5c5SAndroid Build Coastguard Worker class Display;
35*8975f5c5SAndroid Build Coastguard Worker class Surface;
36*8975f5c5SAndroid Build Coastguard Worker 
37*8975f5c5SAndroid Build Coastguard Worker class Thread : public LabeledObject
38*8975f5c5SAndroid Build Coastguard Worker {
39*8975f5c5SAndroid Build Coastguard Worker   public:
40*8975f5c5SAndroid Build Coastguard Worker     Thread();
41*8975f5c5SAndroid Build Coastguard Worker 
42*8975f5c5SAndroid Build Coastguard Worker     void setLabel(EGLLabelKHR label) override;
43*8975f5c5SAndroid Build Coastguard Worker     EGLLabelKHR getLabel() const override;
44*8975f5c5SAndroid Build Coastguard Worker 
45*8975f5c5SAndroid Build Coastguard Worker     void setSuccess();
46*8975f5c5SAndroid Build Coastguard Worker 
47*8975f5c5SAndroid Build Coastguard Worker     void setError(EGLint error,
48*8975f5c5SAndroid Build Coastguard Worker                   const char *command,
49*8975f5c5SAndroid Build Coastguard Worker                   const LabeledObject *object,
50*8975f5c5SAndroid Build Coastguard Worker                   const char *message);
51*8975f5c5SAndroid Build Coastguard Worker 
52*8975f5c5SAndroid Build Coastguard Worker     // TODO: Remove egl::Error. http://anglebug.com/42261727
53*8975f5c5SAndroid Build Coastguard Worker     void setError(const Error &error, const char *command, const LabeledObject *object);
54*8975f5c5SAndroid Build Coastguard Worker     EGLint getError() const;
55*8975f5c5SAndroid Build Coastguard Worker 
56*8975f5c5SAndroid Build Coastguard Worker     void setAPI(EGLenum api);
57*8975f5c5SAndroid Build Coastguard Worker     EGLenum getAPI() const;
58*8975f5c5SAndroid Build Coastguard Worker 
59*8975f5c5SAndroid Build Coastguard Worker     void setCurrent(gl::Context *context);
60*8975f5c5SAndroid Build Coastguard Worker     Surface *getCurrentDrawSurface() const;
61*8975f5c5SAndroid Build Coastguard Worker     Surface *getCurrentReadSurface() const;
62*8975f5c5SAndroid Build Coastguard Worker     gl::Context *getContext() const;
63*8975f5c5SAndroid Build Coastguard Worker     Display *getDisplay() const;
64*8975f5c5SAndroid Build Coastguard Worker 
65*8975f5c5SAndroid Build Coastguard Worker   private:
66*8975f5c5SAndroid Build Coastguard Worker     EGLLabelKHR mLabel;
67*8975f5c5SAndroid Build Coastguard Worker     EGLint mError;
68*8975f5c5SAndroid Build Coastguard Worker     EGLenum mAPI;
69*8975f5c5SAndroid Build Coastguard Worker     gl::Context *mContext;
70*8975f5c5SAndroid Build Coastguard Worker };
71*8975f5c5SAndroid Build Coastguard Worker 
72*8975f5c5SAndroid Build Coastguard Worker void EnsureDebugAllocated();
73*8975f5c5SAndroid Build Coastguard Worker void DeallocateDebug();
74*8975f5c5SAndroid Build Coastguard Worker Debug *GetDebug();
75*8975f5c5SAndroid Build Coastguard Worker 
76*8975f5c5SAndroid Build Coastguard Worker }  // namespace egl
77*8975f5c5SAndroid Build Coastguard Worker 
78*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_THREAD_H_
79