xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/gl/ClearMultiviewGL.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2017 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 // ClearMultiviewGL:
7*8975f5c5SAndroid Build Coastguard Worker //   A helper for clearing multiview side-by-side and layered framebuffers.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_
11*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include "angle_gl.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h"
16*8975f5c5SAndroid Build Coastguard Worker 
17*8975f5c5SAndroid Build Coastguard Worker namespace gl
18*8975f5c5SAndroid Build Coastguard Worker {
19*8975f5c5SAndroid Build Coastguard Worker class FramebufferState;
20*8975f5c5SAndroid Build Coastguard Worker }  // namespace gl
21*8975f5c5SAndroid Build Coastguard Worker 
22*8975f5c5SAndroid Build Coastguard Worker namespace rx
23*8975f5c5SAndroid Build Coastguard Worker {
24*8975f5c5SAndroid Build Coastguard Worker class FunctionsGL;
25*8975f5c5SAndroid Build Coastguard Worker class StateManagerGL;
26*8975f5c5SAndroid Build Coastguard Worker 
27*8975f5c5SAndroid Build Coastguard Worker class ClearMultiviewGL : angle::NonCopyable
28*8975f5c5SAndroid Build Coastguard Worker {
29*8975f5c5SAndroid Build Coastguard Worker   public:
30*8975f5c5SAndroid Build Coastguard Worker     // Enum containing the different types of Clear* commands.
31*8975f5c5SAndroid Build Coastguard Worker     enum class ClearCommandType
32*8975f5c5SAndroid Build Coastguard Worker     {
33*8975f5c5SAndroid Build Coastguard Worker         Clear,
34*8975f5c5SAndroid Build Coastguard Worker         ClearBufferfv,
35*8975f5c5SAndroid Build Coastguard Worker         ClearBufferuiv,
36*8975f5c5SAndroid Build Coastguard Worker         ClearBufferiv,
37*8975f5c5SAndroid Build Coastguard Worker         ClearBufferfi
38*8975f5c5SAndroid Build Coastguard Worker     };
39*8975f5c5SAndroid Build Coastguard Worker 
40*8975f5c5SAndroid Build Coastguard Worker   public:
41*8975f5c5SAndroid Build Coastguard Worker     ClearMultiviewGL(const FunctionsGL *functions, StateManagerGL *stateManager);
42*8975f5c5SAndroid Build Coastguard Worker     ~ClearMultiviewGL();
43*8975f5c5SAndroid Build Coastguard Worker 
44*8975f5c5SAndroid Build Coastguard Worker     ClearMultiviewGL(const ClearMultiviewGL &rht) = delete;
45*8975f5c5SAndroid Build Coastguard Worker     ClearMultiviewGL &operator=(const ClearMultiviewGL &rht) = delete;
46*8975f5c5SAndroid Build Coastguard Worker     ClearMultiviewGL(ClearMultiviewGL &&rht)                 = delete;
47*8975f5c5SAndroid Build Coastguard Worker     ClearMultiviewGL &operator=(ClearMultiviewGL &&rht) = delete;
48*8975f5c5SAndroid Build Coastguard Worker 
49*8975f5c5SAndroid Build Coastguard Worker     void clearMultiviewFBO(const gl::FramebufferState &state,
50*8975f5c5SAndroid Build Coastguard Worker                            const gl::Rectangle &scissorBase,
51*8975f5c5SAndroid Build Coastguard Worker                            ClearCommandType clearCommandType,
52*8975f5c5SAndroid Build Coastguard Worker                            GLbitfield mask,
53*8975f5c5SAndroid Build Coastguard Worker                            GLenum buffer,
54*8975f5c5SAndroid Build Coastguard Worker                            GLint drawbuffer,
55*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *values,
56*8975f5c5SAndroid Build Coastguard Worker                            GLfloat depth,
57*8975f5c5SAndroid Build Coastguard Worker                            GLint stencil);
58*8975f5c5SAndroid Build Coastguard Worker     void initializeResources();
59*8975f5c5SAndroid Build Coastguard Worker 
60*8975f5c5SAndroid Build Coastguard Worker   private:
61*8975f5c5SAndroid Build Coastguard Worker     void attachTextures(const gl::FramebufferState &state, int layer);
62*8975f5c5SAndroid Build Coastguard Worker     void detachTextures(const gl::FramebufferState &state);
63*8975f5c5SAndroid Build Coastguard Worker     void clearLayeredFBO(const gl::FramebufferState &state,
64*8975f5c5SAndroid Build Coastguard Worker                          ClearCommandType clearCommandType,
65*8975f5c5SAndroid Build Coastguard Worker                          GLbitfield mask,
66*8975f5c5SAndroid Build Coastguard Worker                          GLenum buffer,
67*8975f5c5SAndroid Build Coastguard Worker                          GLint drawbuffer,
68*8975f5c5SAndroid Build Coastguard Worker                          const uint8_t *values,
69*8975f5c5SAndroid Build Coastguard Worker                          GLfloat depth,
70*8975f5c5SAndroid Build Coastguard Worker                          GLint stencil);
71*8975f5c5SAndroid Build Coastguard Worker     void genericClear(ClearCommandType clearCommandType,
72*8975f5c5SAndroid Build Coastguard Worker                       GLbitfield mask,
73*8975f5c5SAndroid Build Coastguard Worker                       GLenum buffer,
74*8975f5c5SAndroid Build Coastguard Worker                       GLint drawbuffer,
75*8975f5c5SAndroid Build Coastguard Worker                       const uint8_t *values,
76*8975f5c5SAndroid Build Coastguard Worker                       GLfloat depth,
77*8975f5c5SAndroid Build Coastguard Worker                       GLint stencil);
78*8975f5c5SAndroid Build Coastguard Worker 
79*8975f5c5SAndroid Build Coastguard Worker     const FunctionsGL *mFunctions;
80*8975f5c5SAndroid Build Coastguard Worker     StateManagerGL *mStateManager;
81*8975f5c5SAndroid Build Coastguard Worker 
82*8975f5c5SAndroid Build Coastguard Worker     GLuint mFramebuffer;
83*8975f5c5SAndroid Build Coastguard Worker };
84*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
85*8975f5c5SAndroid Build Coastguard Worker 
86*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_
87