xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/RenderbufferImpl.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // RenderbufferImpl.h: Defines the abstract class gl::RenderbufferImpl
8 
9 #ifndef LIBANGLE_RENDERER_RENDERBUFFERIMPL_H_
10 #define LIBANGLE_RENDERER_RENDERBUFFERIMPL_H_
11 
12 #include "angle_gl.h"
13 #include "common/angleutils.h"
14 #include "libANGLE/Error.h"
15 #include "libANGLE/angletypes.h"
16 #include "libANGLE/renderer/FramebufferAttachmentObjectImpl.h"
17 
18 namespace gl
19 {
20 struct PixelPackState;
21 class RenderbufferState;
22 }  // namespace gl
23 
24 namespace egl
25 {
26 class Image;
27 }  // namespace egl
28 
29 namespace rx
30 {
31 
32 class RenderbufferImpl : public FramebufferAttachmentObjectImpl
33 {
34   public:
RenderbufferImpl(const gl::RenderbufferState & state)35     RenderbufferImpl(const gl::RenderbufferState &state) : mState(state) {}
~RenderbufferImpl()36     ~RenderbufferImpl() override {}
onDestroy(const gl::Context * context)37     virtual void onDestroy(const gl::Context *context) {}
38 
39     virtual angle::Result setStorage(const gl::Context *context,
40                                      GLenum internalformat,
41                                      GLsizei width,
42                                      GLsizei height)                        = 0;
43     virtual angle::Result setStorageMultisample(const gl::Context *context,
44                                                 GLsizei samples,
45                                                 GLenum internalformat,
46                                                 GLsizei width,
47                                                 GLsizei height,
48                                                 gl::MultisamplingMode mode) = 0;
49     virtual angle::Result setStorageEGLImageTarget(const gl::Context *context,
50                                                    egl::Image *image)       = 0;
51 
52     virtual angle::Result copyRenderbufferSubData(const gl::Context *context,
53                                                   const gl::Renderbuffer *srcBuffer,
54                                                   GLint srcLevel,
55                                                   GLint srcX,
56                                                   GLint srcY,
57                                                   GLint srcZ,
58                                                   GLint dstLevel,
59                                                   GLint dstX,
60                                                   GLint dstY,
61                                                   GLint dstZ,
62                                                   GLsizei srcWidth,
63                                                   GLsizei srcHeight,
64                                                   GLsizei srcDepth);
65 
66     virtual angle::Result copyTextureSubData(const gl::Context *context,
67                                              const gl::Texture *srcTexture,
68                                              GLint srcLevel,
69                                              GLint srcX,
70                                              GLint srcY,
71                                              GLint srcZ,
72                                              GLint dstLevel,
73                                              GLint dstX,
74                                              GLint dstY,
75                                              GLint dstZ,
76                                              GLsizei srcWidth,
77                                              GLsizei srcHeight,
78                                              GLsizei srcDepth);
79 
80     virtual GLenum getColorReadFormat(const gl::Context *context);
81     virtual GLenum getColorReadType(const gl::Context *context);
82 
83     virtual angle::Result getRenderbufferImage(const gl::Context *context,
84                                                const gl::PixelPackState &packState,
85                                                gl::Buffer *packBuffer,
86                                                GLenum format,
87                                                GLenum type,
88                                                void *pixels);
89 
90     // Override if accurate native memory size information is available
91     virtual GLint getMemorySize() const;
92 
93     virtual angle::Result onLabelUpdate(const gl::Context *context);
94 
95   protected:
96     const gl::RenderbufferState &mState;
97 };
98 
copyRenderbufferSubData(const gl::Context * context,const gl::Renderbuffer * srcBuffer,GLint srcLevel,GLint srcX,GLint srcY,GLint srcZ,GLint dstLevel,GLint dstX,GLint dstY,GLint dstZ,GLsizei srcWidth,GLsizei srcHeight,GLsizei srcDepth)99 inline angle::Result RenderbufferImpl::copyRenderbufferSubData(const gl::Context *context,
100                                                                const gl::Renderbuffer *srcBuffer,
101                                                                GLint srcLevel,
102                                                                GLint srcX,
103                                                                GLint srcY,
104                                                                GLint srcZ,
105                                                                GLint dstLevel,
106                                                                GLint dstX,
107                                                                GLint dstY,
108                                                                GLint dstZ,
109                                                                GLsizei srcWidth,
110                                                                GLsizei srcHeight,
111                                                                GLsizei srcDepth)
112 {
113     UNREACHABLE();
114     return angle::Result::Stop;
115 }
116 
copyTextureSubData(const gl::Context * context,const gl::Texture * srcTexture,GLint srcLevel,GLint srcX,GLint srcY,GLint srcZ,GLint dstLevel,GLint dstX,GLint dstY,GLint dstZ,GLsizei srcWidth,GLsizei srcHeight,GLsizei srcDepth)117 inline angle::Result RenderbufferImpl::copyTextureSubData(const gl::Context *context,
118                                                           const gl::Texture *srcTexture,
119                                                           GLint srcLevel,
120                                                           GLint srcX,
121                                                           GLint srcY,
122                                                           GLint srcZ,
123                                                           GLint dstLevel,
124                                                           GLint dstX,
125                                                           GLint dstY,
126                                                           GLint dstZ,
127                                                           GLsizei srcWidth,
128                                                           GLsizei srcHeight,
129                                                           GLsizei srcDepth)
130 {
131     UNREACHABLE();
132     return angle::Result::Stop;
133 }
134 
getMemorySize()135 inline GLint RenderbufferImpl::getMemorySize() const
136 {
137     return 0;
138 }
139 
getColorReadFormat(const gl::Context * context)140 inline GLenum RenderbufferImpl::getColorReadFormat(const gl::Context *context)
141 {
142     UNREACHABLE();
143     return GL_NONE;
144 }
145 
getColorReadType(const gl::Context * context)146 inline GLenum RenderbufferImpl::getColorReadType(const gl::Context *context)
147 {
148     UNREACHABLE();
149     return GL_NONE;
150 }
151 
getRenderbufferImage(const gl::Context * context,const gl::PixelPackState & packState,gl::Buffer * packBuffer,GLenum format,GLenum type,void * pixels)152 inline angle::Result RenderbufferImpl::getRenderbufferImage(const gl::Context *context,
153                                                             const gl::PixelPackState &packState,
154                                                             gl::Buffer *packBuffer,
155                                                             GLenum format,
156                                                             GLenum type,
157                                                             void *pixels)
158 {
159     UNREACHABLE();
160     return angle::Result::Stop;
161 }
162 }  // namespace rx
163 
164 #endif  // LIBANGLE_RENDERER_RENDERBUFFERIMPL_H_
165